我希望用xl VBA编写一个简单的宏,它循环通过单元格A1:A100和;
这是我的尝试-我正在努力让它工作,并一直在谷歌各种不同的方法,但似乎不能工作!
私有子CopyRow()
Dim i As Range
Sheets("Input").Select
Range("A1").Select
For Each i In Sheet9.Range("A2:A1000")
Select Case i.Value
Case "HT"
Rows(ActiveCell.Row).Copy
Sheets("Records").Select
Range("A2").End(xlDown).PasteSpecial xlPasteValues
Sheets("Input").Select
Case Else
End Select
Next i
感谢您能给我的任何帮助!
发布于 2018-07-28 23:02:48
您的问题出在“ActiveCell.Row”中,这里的活动单元格不是环路电流单元格,因此您可以使用“i.Row”。
但您也可以避免所有这些选择/激活,而使用完全限定的范围引用:
Private Sub CopyRow()
Dim i As Range
With Sheets("Records") ‘reference target sheet
For Each i In Sheet9.Range("A2:A1000") ‘loop through Sheet9 "A2:A1000" cells
If i.Value2 = "HT" Then
i.EntireRow.Copy
.Cells(.Rows.Count,"A").End(xlUp).Offset(1,0).PasteSpecial xlPasteValues ‘ all “dots” are making following members/object referencing the object referenced in “With...”
End If
Next
End With
End Sub
发布于 2018-07-28 19:30:22
我假设数据在“输入”工作表中,结果必须放入“记录”工作表中。从你的解释中我不知道"Sheet9“工作表的意义是什么。
这是一段快速的代码,它可以实现您想要的功能:
Sub copy_HT_rows()
Dim rng As Range
Sheets("Input").Select
Range("A1").Select
For Each rng In Sheets("input").Range("A1:A100")
If rng.Value = "HT" Then
Rows(rng.Row).Copy
Sheets("Records").Select
If (Range("A1") <> "") Then
Range("A10000").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Else
Range("A1").PasteSpecial xlPasteValues
End If
Sheets("Input").Select
End If
Next rng
End Sub
发布于 2018-07-29 01:40:32
使用自动筛选
Option Explicit
Public Sub test()
Dim rng As Range
Set rng = ThisWorkbook.Worksheets("Sheet9").Range("A1:A1000") '<include header
If Application.WorksheetFunction.CountIf(rng, "HT") = 0 Then Exit Sub
rng.AutoFilter
rng.AutoFilter 1, "HT"
With ThisWorkbook.Worksheets("Records")
rng.Offset(1).Resize(rng.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Copy .Range("A" & .Cells(.Rows.Count, "A").End(xlUp).Row + 1)
End With
rng.AutoFilter
End Sub
https://stackoverflow.com/questions/51570511
复制相似问题