【发布时间】:2019-04-12 17:03:02
【问题描述】:
已回答...必须等待 2 天才能接受自己的回答
背景:
我有一个从 Excel 中的数据集生成的数组(“arr”);我使用该数组来填充另一个数组(“zrr”),其中该填充的一个方面是使用字典(“dcdept”)。
字典已正确填充(通过debug.print dcdept(ActualKey) 测试;填充后dcdept(4000)="Value" 和测试debug.print dcdept(4000) 在即时窗口中打印出单词“Value”。
我最初是通过 .cells(i,) 引用使用源数据集,但有几十万行,我试图在 VBA 中保留活动以加快速度。
我的代码没有生成错误/警报。
问题:
当尝试使用来自 arr (dcdept(arr(i-2,16))) 的字典键填充 zrr (zrr(i-1,3)) 中的元素时,我没有得到任何值输出。
问题:
有没有人有任何建议/解决方案来解决给定数据的问题?
有问题的代码:
Public arr As Variant, brr As Variant, crr As Variant, drr As Variant, lrs As Long
Private Sub changes()
Dim i As Long, x As Long, y As String, z As String, dcdept As Scripting.Dictionary, zrr As Variant, a As Long
'set-up dictionary for department
Set dcdept = New Scripting.Dictionary
dcdept(4000) = "Value"
'generate array to store new values
With Sheets("Conversion")
.Columns(16).NumberFormat = "0"
lrs = .Cells(.Rows.Count, 1).End(xlUp).Row
arr = .Range(.Cells(2, 1), .Cells(lrs, 17)).Value '17 = Q
ReDim zrr(lrs, 4)
For i = 2 To lrs
ReDim Preserve zrr(lrs, 4)
Select Case Left(arr(i - 1, 17), 3)
Case "QTE"
x = 7
Case "ZNA"
x = 5
End Select
zrr(i - 2, 0) = Right(arr(i - 1, 17), x)
If InStr(arr(i - 1, 9), " Milestone ") Then
y = Left(arr(i - 1, 9), 2) & " " & arr(i - 1, 10)
Else
y = arr(i - 1, 9) & " " & arr(i - 1, 10)
End If
zrr(i - 2, 1) = y
If IsEmpty(arr(i - 1, 14)) Then
zrr(i - 2, 2) = "N"
Else
zrr(i - 2, 2) = "Y"
End If
a = Val(arr(i - 1, 16))
z = dcdept(a)
zrr(i - 2, 3) = z
Debug.Print a
Debug.Print z
Next i
'append data to sheet
.Cells(2, "R").Resize(lrs, 3).Value = zrr 'SHOULD BE Resize(lrs,4), per answer
End With
End Sub
【问题讨论】:
-
我认为这行
zrr(i-1,3) = dcdept(arr(i-2,16))正在向字典中添加一个新项目 - 你可以在本地窗口中查看吗?您可以改为循环遍历字典项? -
@SJR 感谢您的意见;它没有出现(从测试中)字典本身受到影响/附加。现在尝试将该循环键入代码中,看看是否可以解决此问题。大多数我的测试都让我回想起我的数据有问题,我似乎无法从中理解......该表最初是用
@格式化的,否则我在尝试转置更大的数组时会出错超过 9101 行,然后我将某些列设置回"yyyy/mm/dd"或"0"。 -
@SJR 刚刚对
debug.print进行了另一项测试,这看起来与写回数组zrr相关联 -
我不确定你是否测试过,但在字典中,关键的类型很重要。所以
dcdept(4000)和dcdept("4000")会有区别。如果将值作为文本读入数组,则它不会识别键的整数值。如果您已经对此进行了测试,那么我在识别问题时会遇到一些麻烦。您是否有机会发布更多相关代码以便我们跟进? -
我刚刚在您的代码中也看到了这一点。我真的打了自己的额头
标签: arrays excel vba dictionary