[英]Excel vba two dimensional array loop stops
作为较长代码的一部分,我试图根据二维字母分配数组为每行分配特定的人员名称。 LastRow已被声明并正确拾取,但是无论如何,该循环在27个循环后仍会停止。 如何纠正此问题以继续进行LastRow? 这是我第一次使用多维数组,因此非常感谢您的帮助。
Private Sub Assignments()
Dim Alpha As Variant, Staff As Variant
Dim i As Integer
Dim LastRow As Long
Dim alpha_Assignment(1 To 26, 1 To 2) As Variant
'define last row
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
'set alpha column to array and set staff to array
Alpha = Range("AB2:AB" & LastRow).Value
Staff = Range("AC2:AC" & LastRow).Value
'Array Values to Alpha and Assigned staff
alpha_Assignment(1, 1) = "A"
alpha_Assignment(1, 2) = "Staff 1"
alpha_Assignment(2, 1) = "B"
alpha_Assignment(2, 2) = "Staff 2"
alpha_Assignment(3, 1) = "C"
alpha_Assignment(3, 2) = "Staff 3"
'and so on for all 26 letters in alphabet then loop statement and paste into worksheet.
For i = 1 To UBound(alpha_Assignment)
If Alpha(i, 1) = alpha_Assignment(i, 1) Then
Staff(i, 1) = alpha_Assignment(i, 2)
ElseIf Alpha(i, 1) <> alpha_Assignment(i, 1) Then
Staff(i, 1) = "Staff 1"
End If
Next i
Range("AC2").Resize(UBound(Staff, 1), 1).Value = Staff
End Sub
您的循环上限在这里定义
For i = 1 To UBound(alpha_Assignment)
如果您希望它循环播放,则将其调整为
For i = 1 To LastRow
您的for...next
从1到基于Dim为26的alpha_assignment
的第一个元素的alpha_assignment
。
我会说您需要在这里使用Redim
语句:
'define last row
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
ReDim alpha_Assignment(1 To LastRow, 1 To 2) As Variant
' then loop
For i = LBound(alpha_Assignment) To UBound(alpha_Assignment)
' ...
Next i
这项“耦合”工作似乎需要使用Dictionary
对象
如下所示:
Option Explicit
Private Sub Assignments()
Dim Alpha As Variant, Staff As Variant
Dim i As Integer
Dim LastRow As Long
'define last row
LastRow = Cells(Rows.count, "A").End(xlUp).Row
'set alpha column to array and set staff to array
Alpha = Range("AB2:AB" & LastRow).Value
Staff = Range("AC2:AC" & LastRow).Value
Dim alphaDict As Scripting.Dictionary
Set alphaDict = New Scripting.Dictionary
'dictionary with key=Alpha and Item=Assigned staff
With alphaDict
.Add "A", "Staff 1"
.Add "B", "Staff 2"
.Add "C", "Staff 3"
.Add "D", "Staff 4"
.Add "E", "Staff 5"
.Add "F", "Staff 6"
'and so on for all 26 letters in alphabet
End With
For i = 1 To UBound(Alpha)
If alphaDict.Exists(Alpha(i, 1)) Then Staff(i, 1) = alphaDict(Alpha(i, 1))
Next i
Range("AC2").Resize(UBound(Staff, 1), 1).Value = Staff
End Sub
要使用Dictionary对象,您必须向项目添加必要的引用,如下所示
单击工具->引用
向下滚动列表框到“ Microsoft Scripting Runtime”并勾选其选中标记
点击“确定”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.