嗨,当涉及到VBA Excel时,我是一个完全的新手。
我正在尝试过滤一个大小可变的电子表格,里面装满了数据,在一列中寻找一个设置词。找到后,我想将整个行复制到另一个工作表中。
因为它们可能不止一行包含这个单词,所以我不想覆盖之前复制的行。
这就是我为查找单词而创建的内容,但是如何将行复制到另一个工作表中呢?
Sheets("Sheet1").Select 'Select datasheet
Range("A1").Select 'Set cell position to start search from
Do Until Selection.Offset(0, 4).Value = "" 'word to be searched is 4 cell in
'do what is required
If Selection.Offset(0, 4).Value = "UKS" Then
MsgBox "Found" 'Found it!
'not sure how to copy row to another worksheet
End If
'finish move on to next one in list
Selection.Offset(1, 0).Select 'move down 1 row
Loop
Range("A1").Select ' reset cell position
任何帮助都将不胜感激,请你解释一下它是如何工作的,因为我喜欢理解,而不仅仅是抄袭。
杰森
发布于 2016-03-07 16:27:53
看看下面,也许它给了你一些线索。不过,我会试着评论一下细节,让你更好地了解这件事。
我的示例稍微复杂一些,因为它一次对两列应用过滤,但它有助于您理解它的复杂性,因为您可以进一步应用它。
With Sheets("Source")
.AutoFilterMode = False
With .Range("$A$21" & ":" & "$C$" & 300)
.AutoFilter Field:=1, Criteria1:=Array("April", "August", "Dezember", "Februar", "Januar", "Juli", "Juni", "Mai", "März", "November", "Oktober", "September"), Operator:=xlFilterValues
.AutoFilter Field:=2, Criteria1:="<>"
ActiveSheet.AutoFilter.Range.Copy
Sheets("Chart").Select
Range("A7").Select
Sheets("Chart").Paste
End With
End With
那么,这是关于什么的:
代码的逻辑是
With Sheets(“源”) .AutoFilterMode = False With .Range("$A$21“& ":”& "$C$“& 300) .AutoFilter Field:=1,Criteria1:=Array(”4月“,”8月“,"Dezember","Februar","Januar","Juli","Juni","Mai","März",”11月“,"Oktober",“九月”),Operator:=xlFilterValues
.AutoFilterMode = False
.AutoFilter Field:=1,Criteria1:=Array(“4月”,“8月”,“12月”,“2月”,“1月”,"Juli","Juni","Mai","März",“11月”,"Oktober",“9月”),Operator:=xlFilterValues
第2列
.AutoFilter Field:=2,Criteria1:="<>“
带有.Range的
(“$A$21”& ":“& "$C$”& 300)
在本例中,我的示例将过滤器应用于以A21开头、以C300结尾的一系列单元格(实际上是一个表)。
为什么是A21?,因为我的数据就是在那里被复制的。它总是从A21开始。
为什么是C300?因为最大行数永远不会超过(300-21)=279行我的数据模型在任何时候都不会超过279行未过滤的行数,你可以根据你的假设放一个更大的数字。如果有更多的行,请不要介意,因为我通过消除空白来过滤它们,请参见上面的内容。
顺便说一句,"kosher“版本是通过VBA计算行数,并在定义范围时使用它。
您可以简单地使用一个非常大的数字来覆盖表中可能的行数。
计算行数乍一看对你来说可能有点复杂,但最终会付出代价的。
假设您想要计算B列中的行数(变量) FinalRowChartSheet = Range("B7").End(xlDown).Row
祝你一切顺利。我希望我能帮到你。
别忘了给我的答案打分,如果你发现它useful.Thank你。
发布于 2015-10-08 15:41:32
下面是一个循环代码示例和一个过滤器代码示例。
Sub loopMe()
Dim sh As Worksheet, ws As Worksheet
Dim LstR As Long, rng As Range, c As Range
Set sh = Sheets("Sheet1") 'set the sheet to loop
Set ws = Sheets("Sheet2") 'set the sheet to paste
With sh 'do something with the sheet
LstR = .Cells(.Rows.Count, "D").End(xlUp).Row 'find last row
Set rng = .Range("D2:D" & LstR) 'set range to loop
End With
'start the loop
For Each c In rng.Cells
If c = "UKS" Then
c.EntireRow.Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1) 'copy row to first empty row in sheet2
End If
Next c
End Sub
Sub FilterMe()
Dim sh As Worksheet, ws As Worksheet
Dim LstR As Long, rng As Range
Set sh = Sheets("Sheet1") 'set the sheet to filter
Set ws = Sheets("Sheet2") 'set the sheet to paste
Application.ScreenUpdating = False
With sh 'do something with the sheet
LstR = .Cells(.Rows.Count, "D").End(xlUp).Row 'find last row
.Columns("D:D").AutoFilter Field:=1, Criteria1:="UKS"
Set rng = .Range("A2:Z" & LstR).SpecialCells(xlCellTypeVisible) 'Replace Z with correct last column
rng.Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(1)
.AutoFilterMode = False
End With
End Sub
https://stackoverflow.com/questions/33009016
复制相似问题