[英]Excel VBA - insert rows from range to array based on criteria; then populate certain ranges on another sheet with data from array
我的VBA知识非常有限。 我浏览了StackOverflow上的问题,然后用谷歌搜索了几天,但是找不到解决我问题的方法。
因此,我正在处理Excel宏。 我的范围是A3:H7136。 A列中的某些单元格的值为1; 其余为空。 D,E,F,G,H列中的单元格可以为空白,也可以包含文本或数字。
我正在尝试做的是将范围A3:H7136并将数据放入数组中。 排除包含空白A单元格和空白D单元格的行; 转换为“最终”数组,将第2、4和8列中的数据粘贴到另一个工作表上的范围D309:D558,G309:G558,J309:J558中。
到目前为止,我有以下几点:
Private Sub CommandButton1_Click()
Dim RowArray() As Long
Dim my_array1 As Range
Dim my_array2 As Variant
Dim i As Integer
Set my_array1 = ThisWorkbook.Worksheets("ETC").Range("A3:H7136")
my_array2 = my_array1.Value
For i = 1 To UBound(my_array2)
If my_array2(i, 1) = 1 And my_array2(i, 4) <> "" Then
RowArray(x) = i: x = x + 1
End If
Next i
Sheets("Allocation").Range("D309:D558") = Application.Index(my_array2, 1, Array(4))
Sheets("Allocation").Range("J309:J558") = Application.Index(my_array2, 1, Array(2))
End Sub
我停在那里,因为我意识到代码粘贴了#value! 进入另一个工作表中的范围。 该代码是来自多个论坛的“ Frankenstein-ed”,因此对于专业人士而言可能看起来很奇怪。 我需要帮助使代码正常工作。 我也有几个问题:
my-array2
,而不是它的“最终”过滤版本。 我应该声明“最终”数组吗? 提前致谢!
几件事:
从来没有声明过RowArray
的大小,因此会抛出界外错误。
您可以将三个数组用于循环中的输出,然后将数组直接分配给所需的区域。
Private Sub CommandButton1_Click()
Dim DArray() As Variant
Dim GArray() As Variant
Dim JArray() As Variant
Dim my_array2 As Variant
Dim i As Long, x As Long
Dim cnt As Long
cnt = ThisWorkbook.Worksheets("ETC").Evaluate("COUNTIFS(A3:A7136,1,D3:D7136,""<>"")")
If cnt > 0 Then
ReDim DArray(1 To cnt, 1 To 1) As Variant
ReDim GArray(1 To cnt, 1 To 1) As Variant
ReDim JArray(1 To cnt, 1 To 1) As Variant
my_array2 = ThisWorkbook.Worksheets("ETC").Range("A3:H7136").Value
x = 1
For i = 1 To UBound(my_array2)
If my_array2(i, 1) = 1 And my_array2(i, 4) <> "" Then
DArray(x, 1) = my_array2(i, 4)
GArray(x, 1) = my_array2(i, 4)
JArray(x, 1) = my_array2(i, 8)
x = x + 1
End If
Next i
Sheets("Allocation").Range("D309").Resize(UBound(DArray, 1), 1).Value = DArray
Sheets("Allocation").Range("G309").Resize(UBound(GArray, 1), 1).Value = GArray
Sheets("Allocation").Range("J309").Resize(UBound(JArray, 1), 1).Value = JArray
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.