我有一个很大的Excel文件,我想将所有信息从工作表传输到变量。
我不需要文件中的所有行,所以我想选择我感兴趣的行。
我尝试使用 Union 使复杂的Range变量选择我感兴趣的行。
问题是,如果有用的信息除以不需要的行,我的程序就不会增加范围。
示例: 我有这样的桌子:
123|1|1|1
123|2|2|2
456|3|3|3
123|4|4|4
我想要第一行中有123的行,但是随后我使用的是 Union 函数,我只有前两行,而没有第四行。
我需要:
123|1|1|1
123|2|2|2
123|4|4|4
但收到:
123|1|1|1
123|2|2|2
下面将是我的代码的一部分。这部分是在循环中
r-范围
WS-工作表
Set r = WS.Range("A1:A1")
有人可以帮我这个忙吗?我已经在寻找一个小时的解决方案了。
If WS.Cells(i, 1).Value = "123" Then
If r.Columns.Count() < 2 Then
Set r = WS.Range(WS.Cells(i, 1), WS.Cells(i, 4))
Else
Set r = Union(r, WS.Range(WS.Cells(i, 1), WS.Cells(i, 4)))
End If
End If
答案 0 :(得分:1)
使用您的方法,该方法有效:
Sub x()
Dim r As Range, ws As Worksheet, i As Long
Dim j As Long
Set ws = ActiveSheet
Set r = ws.Range("A1")
For i = 1 To 4
If ws.Cells(i, 1).Value = 123 Then
If r.Columns.Count < 2 Then
Set r = ws.Range(ws.Cells(i, 1), ws.Cells(i, 4))
Else
Set r = Union(r, ws.Range(ws.Cells(i, 1), ws.Cells(i, 4)))
End If
End If
Next i
For j = 1 To r.Areas.Count
Range("G" & Rows.Count).End(xlUp)(2).Resize(r.Areas(j).Rows.Count, r.Areas(j).Columns.Count).Value = r.Areas(j).Value
Next j
End Sub
使用数组方法,结果存储在v2
中。
Sub x()
Dim ws As Worksheet, i As Long, j As Long, v As Variant, v2() As Variant
v = Range("A1:D4").Value
ReDim Preserve v2(1 To UBound(v, 1), 1 To UBound(v, 2))
For i = LBound(v, 1) To UBound(v, 1)
If v(i, 1) = 123 Then
j = j + 1
v2(j, 1) = v(i, 1)
v2(j, 2) = v(i, 2)
v2(j, 3) = v(i, 3)
v2(j, 4) = v(i, 4)
End If
Next i
Range("G1").Resize(j, UBound(v2, 2)).Value = v2
End Sub