如何在工作表中选择特定的行

时间:2019-07-18 11:01:30

标签: excel vba

我有一个很大的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

1 个答案:

答案 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

enter image description here


使用数组方法,结果存储在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