Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3107|回复: 8

[已解决]多个类似名字的数组循环执行命令

[复制链接]
发表于 2015-1-6 18:24 | 显示全部楼层 |阅读模式
我有一堆数组:
my1_L = Array(5, 17, 29, 41, 53, 65, 77, 89, 101, 113, 125, 137)
my1_R = Array(6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138)
my2_L = Array(7, 19, 31, 43, 55, 67, 79, 91, 103, 115, 127, 139)
my2_R = Array(8, 20, 32, 44, 56, 68, 80, 92, 104, 116, 128, 140)
my3_L = Array(1, 13, 25, 37, 49, 61, 73, 85, 97, 109, 121, 133)
my3_R = Array(9, 21, 33, 45, 57, 69, 81, 93, 105, 117, 129, 141)
my4_L = Array(2, 14, 26, 38, 50, 62, 74, 86, 98, 110, 122, 134)
my4_R = Array(10, 22, 34, 46, 58, 70, 82, 94, 106, 118, 130, 142)
my5_L = Array(3, 15, 27, 39, 51, 63, 75, 87, 99, 111, 123, 135)
my5_R = Array(11, 23, 35, 47, 59, 71, 83, 95, 107, 119, 131, 143)
my6_L = Array(4, 16, 28, 40, 52, 64, 76, 88, 100, 112, 124, 136)
my6_R = Array(12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144)

都是myX_L或者myX_R的命名方式,我想循环查询任意一个数字在这些一维数组中的位置,如果循环执行的话,那些一维数组可以怎么简化表示?

for i=1 to 6
  for j=0 t0 11
   if a=my&i&"_L"(j) then
红色表述部分的书写格式时候错误的,小弟请问下应该怎么修改?便于循环查询,谢谢!




最佳答案
2015-1-6 19:36
  1. Sub test()
  2.     Dim my_L(1 To 6), my_R(1 To 6)
  3.     my_L(1) = Array(5, 17, 29, 41, 53, 65, 77, 89, 101, 113, 125, 137)
  4.     my_R(1) = Array(6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138)
  5.     my_L(2) = Array(7, 19, 31, 43, 55, 67, 79, 91, 103, 115, 127, 139)
  6.     my_R(2) = Array(8, 20, 32, 44, 56, 68, 80, 92, 104, 116, 128, 140)
  7.     my_L(3) = Array(1, 13, 25, 37, 49, 61, 73, 85, 97, 109, 121, 133)
  8.     my_R(3) = Array(9, 21, 33, 45, 57, 69, 81, 93, 105, 117, 129, 141)
  9.     my_L(4) = Array(2, 14, 26, 38, 50, 62, 74, 86, 98, 110, 122, 134)
  10.     my_R(4) = Array(10, 22, 34, 46, 58, 70, 82, 94, 106, 118, 130, 142)
  11.     my_L(5) = Array(3, 15, 27, 39, 51, 63, 75, 87, 99, 111, 123, 135)
  12.     my_R(5) = Array(11, 23, 35, 47, 59, 71, 83, 95, 107, 119, 131, 143)
  13.     my_L(6) = Array(4, 16, 28, 40, 52, 64, 76, 88, 100, 112, 124, 136)
  14.     my_R(6) = Array(12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144)
  15.     For i = 1 To 6
  16.         For j = 1 To 11
  17.             If a = my_L(i)(j) Then
  18.             
  19.             End If
  20.         Next
  21.     Next
  22. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-1-6 19:36 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim my_L(1 To 6), my_R(1 To 6)
  3.     my_L(1) = Array(5, 17, 29, 41, 53, 65, 77, 89, 101, 113, 125, 137)
  4.     my_R(1) = Array(6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138)
  5.     my_L(2) = Array(7, 19, 31, 43, 55, 67, 79, 91, 103, 115, 127, 139)
  6.     my_R(2) = Array(8, 20, 32, 44, 56, 68, 80, 92, 104, 116, 128, 140)
  7.     my_L(3) = Array(1, 13, 25, 37, 49, 61, 73, 85, 97, 109, 121, 133)
  8.     my_R(3) = Array(9, 21, 33, 45, 57, 69, 81, 93, 105, 117, 129, 141)
  9.     my_L(4) = Array(2, 14, 26, 38, 50, 62, 74, 86, 98, 110, 122, 134)
  10.     my_R(4) = Array(10, 22, 34, 46, 58, 70, 82, 94, 106, 118, 130, 142)
  11.     my_L(5) = Array(3, 15, 27, 39, 51, 63, 75, 87, 99, 111, 123, 135)
  12.     my_R(5) = Array(11, 23, 35, 47, 59, 71, 83, 95, 107, 119, 131, 143)
  13.     my_L(6) = Array(4, 16, 28, 40, 52, 64, 76, 88, 100, 112, 124, 136)
  14.     my_R(6) = Array(12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144)
  15.     For i = 1 To 6
  16.         For j = 1 To 11
  17.             If a = my_L(i)(j) Then
  18.             
  19.             End If
  20.         Next
  21.     Next
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2015-1-6 22:14 | 显示全部楼层
QQ截图20150106220716.jpg
工作簿2.rar (17.89 KB, 下载次数: 1)

点评

你附件的例子对楼主来说,没有什么意义吧。  发表于 2015-1-7 08:27
回复

使用道具 举报

发表于 2015-1-6 22:54 | 显示全部楼层
仔细看他数据特征,无需循环查找,取余就晓得在哪里了
回复

使用道具 举报

发表于 2015-1-7 08:24 | 显示全部楼层
本帖最后由 香川群子 于 2015-1-7 08:44 编辑
上清宫主 发表于 2015-1-6 22:54
仔细看他数据特征,无需循环查找,取余就晓得在哪里了

楼主的数据是1-144个数字,排列非常有规律:
① 从小到大以12个数为一组分为12列
② 每一组(各列)中的12个数,再按以下顺序重新排列:
   sr = Array(5, 7, 9, 11, 1, 2, 3, 4, 6, 8, 10, 12) '行位置规律

因此,只要写一个简单的自定义函数,即可任意查询1-144数字的位置。
  1. Function f(n)
  2.     s = "050709110102030406081012" '字符串形式储存的行位置重复规律
  3.     t = Mid(s, ((n - 1) Mod 12) * 2 + 1, 2) '计算数值n得到对应的行位置值t
  4.     f = "my" & (t + 1) \ 2 & "_" & IIf(t Mod 2, "L(", "R(") & (n - 1) \ 12 & ") = " & n
  5. End Function
复制代码
返回信息格式如:

my5_L(10) = 123

my5_R(6) =  83

即,查询返回1-144中任意数值在楼主要求数组中的对应位置。


回复

使用道具 举报

发表于 2015-1-7 08:34 | 显示全部楼层
能按楼主要求规律,生成1-144数据的12行12列二维数组的代码:
  1. Sub test()
  2.     Dim a(1 To 12), b&(1 To 12, 1 To 12)
  3.     For i = 1 To 4
  4.         a(i * 2 + 3) = i
  5.     Next
  6.     For j = 1 To 12
  7.         If a(j) = 0 Then a(j) = i: i = i + 1
  8.     Next
  9.     'MsgBox Join(a, vbCr)
  10.     '以上首先生成行顺序

  11.     '接下来生成12列数据
  12.     For i = 1 To 12
  13.         For j = 0 To 11
  14.             b(i, j + 1) = a(i) + j * 12
  15.         Next
  16.     Next
  17.     [a1].Resize(12, 12) = b
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2015-1-7 09:10 | 显示全部楼层
香川群子 发表于 2015-1-7 08:34
能按楼主要求规律,生成1-144数据的12行12列二维数组的代码:

3#附件是和楼主的需求无关
等楼主传了附件和模拟的结果,我想我才能明白意思


回复

使用道具 举报

发表于 2015-1-7 12:29 | 显示全部楼层
爱疯 发表于 2015-1-7 09:10
3#附件是和楼主的需求无关
等楼主传了附件和模拟的结果,我想我才能明白意思

那你先想办法看懂我的回帖吧。
回复

使用道具 举报

发表于 2015-1-7 14:07 来自手机 | 显示全部楼层
香川群子 发表于 2015-1-7 12:29
那你先想办法看懂我的回帖吧。

谢谢群子老师!
我看懂回帖了。
6#作用是解决如何生成2维数组。
5#是如何查询出输入值的所属一维数组名,及其在一维数组中的索引。

5#或6#作为问题来学习的话,比较有趣(首先要发现数值的规律,再要想办法实现),可能是楼主求助目的,也可能还不是,因为我觉得题目还是没完整、具体的说明需求。
感觉群子老师、上清,都是对此类型的题目敏感的人。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-12 11:06 , Processed in 0.285140 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表