VBA如何通过拼接字符串生成动态变量名并读取对应数组值
VBA动态拼接变量名读取数组值的解决方案
VBA原生不支持通过字符串形式的变量名直接访问变量值,你当前的拼接操作只会生成普通文本字符串,不会被识别为变量调用,因此无法拿到对应数组的实际值。下面给出两种常用的实现方案:
方案1:使用二维数组重构数据(最简便)
把三个币种的数组整合到同一个二维数组中,直接通过下标索引取值,实现逻辑最简单:
Sub SearchValue() ' 定义二维数组,第一维对应币种(0=EUR、1=USD、2=GBP),第二维对应数值索引 Dim BUY_Array(0 To 2, 0 To 5) As Integer Dim curr As Variant curr = Array("EUR", "USD", "GBP") ' 给二维数组批量赋值 ' EUR_Buy数组值 BUY_Array(0, 0) = 1: BUY_Array(0, 1) = 2: BUY_Array(0, 2) = 3: BUY_Array(0, 3) = 4: BUY_Array(0, 4) = 5: BUY_Array(0, 5) = 6 ' USD_BUY数组值 BUY_Array(1, 0) = 2: BUY_Array(1, 1) = 4: BUY_Array(1, 2) = 6: BUY_Array(1, 3) = 8: BUY_Array(1, 4) = 10: BUY_Array(1, 5) = 12 ' GBP_BUY数组值 BUY_Array(2, 0) = 1: BUY_Array(2, 1) = 3: BUY_Array(2, 2) = 5: BUY_Array(2, 3) = 7: BUY_Array(2, 4) = 9: BUY_Array(2, 5) = 11 Dim i As Integer, j As Integer For i = 0 To 2 For j = 0 To 5 If BUY_Array(i, j) = 8 Then MsgBox "Yes,对应币种:" & curr(i) & ",索引位置:" & j End If Next j Next i End Sub
方案2:使用字典存储数组(更灵活,支持按币种名称调用)
如果需要保留按币种名称访问的逻辑,可以用字典对象实现,键存储币种标识,值存储对应的数组:
Sub SearchValue() ' 创建字典对象,无需额外引用 Dim dict As Object Set dict = CreateObject("Scripting.Dictionary") ' 给字典添加键值对:键为币种名,值为对应汇率数组 dict("EUR") = Array(1, 2, 3, 4, 5, 6) dict("USD") = Array(2, 4, 6, 8, 10, 12) dict("GBP") = Array(1, 3, 5, 7, 9, 11) Dim curr As Variant curr = Array("EUR", "USD", "GBP") Dim i As Integer, j As Integer For i = 0 To 2 For j = 0 To 5 ' 先通过币种名从字典取出对应数组,再取下标对应的值判断 If dict(curr(i))(j) = 8 Then MsgBox "Yes,对应币种:" & curr(i) & ",索引位置:" & j End If Next j Next i End Sub
内容的提问来源于stack exchange,提问作者johnlemon9
相关产品推荐
相关产品推荐

