Excel 如何选择工作表中的特定行
我有一个很大的excel文件,我想将所有信息从工作表传输到变量 我不需要文件中的所有行,所以我想选择我感兴趣的行 我曾尝试使用Union来选择我感兴趣的行,从而生成复杂的范围变量 问题是,如果有用的信息被不需要的行除以,我的程序就不会增加范围 例如: 我有这样的桌子:Excel 如何选择工作表中的特定行,excel,vba,Excel,Vba,我有一个很大的excel文件,我想将所有信息从工作表传输到变量 我不需要文件中的所有行,所以我想选择我感兴趣的行 我曾尝试使用Union来选择我感兴趣的行,从而生成复杂的范围变量 问题是,如果有用的信息被不需要的行除以,我的程序就不会增加范围 例如: 我有这样的桌子: 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|
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
如果WS.Cells(i,1).Value=“123”那么
如果r.Columns.Count()小于2,则
设置r=WS.Range(WS.Cells(i,1),WS.Cells(i,4))
其他的
Set r=Union(r,WS.Range(WS.Cells(i,1),WS.Cells(i,4)))
如果结束
如果结束
使用您的方法,这是可行的:
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
按所需值过滤第一列如何?也许你根本不需要VBA。这可能只需点击几下Power Query就可以完成,而无需编写任何VBA。这可以工作,但只是拾取某些行不就慢了吗?这对我来说非常重要,因为我有两个大文件,我想尽我所能优化我的程序。过滤是一种方法。您没有说明如何返回
r
。您可能需要循环遍历它的区域,因为它不是连续的。那么,过滤它就是了。我不想过滤,但我猜,这是一种方式…正如他们在上面告诉你的那样,过滤是一种方式,只是因为过滤将执行一次,而试图通过循环一个大文件来构建一个范围将花费大量时间。过滤数据后,您可以使用SpecialCells(xlCellTypeVisible)
构建范围。不要尝试将过滤后的数据拉入变量中,因为它不起作用。谢谢。但我需要将信息传递给变量。不在excel文件中。有没有办法做到这一点?我这样做,但没有结果:temp=r.ValueAn数组?那么为什么不通过阵列来实现呢?如何实现?我的意思是,我曾尝试使用ReDim Preserve,但没有得到任何好的结果。(我是VBA新手,所以我的代码有很多问题)上面编辑的答案。
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