提问人:Hajoroeters 提问时间:11/2/2023 最后编辑:Mayukh BhattacharyaHajoroeters 更新时间:11/4/2023 访问量:45
根据特定列中的文本将特定行复制到其他工作表
Copy specific rows based on text in a specific column to a different sheet
问:
我目前正在尝试将数据从一张纸1(精确输出)硬拷贝到另一张纸2(硬输出应计)。两张纸中的第 I 列提供了可以是“加价”或“应计”的描述。我的目标是将所有行从 sheet1 硬拷贝到 sheet2,其中 I 列表示应计。但是,当我尝试运行我的代码时,它不起作用(选择范围类的方法失败)。
有什么建议吗?
该代码基于以下教程:https://www.youtube.com/watch?v=qGZQIl9JJk4
亲切问候
哈条
代码如下:
Sub Coentunnel_Accruals()
' Coentunnel Macro
If Worksheets("Checks").Range("C2").Value > 0.01 Then
MsgBox "One or multiple checks is/are invalid"
Exit Sub
End If
a = Worksheets("Output for Exact").Cells(Rows.Count, 9).End(xlUp).Row
For i = 2 To a
If Worksheets("Output for Exact").Cells(i, 9).Value = "Accruals" Then
Worksheets("Output for Exact").Rows(i).Copy
Worksheets("Hard Output Accruals").Activate
b = Worksheets("Hard Output Accruals").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Hard Output Accruals").Cells(b + 1, 1).Select
ActivateSheet.PasteSpecial Paste:=xlPasteValues
Worksheets("Output for Exact").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("Output for Exact").Cells(1, 1).Select
End Sub
我尝试更改不会激活任何工作表且不选择任何工作表的代码。我首先使用了以下简单代码:
If Worksheets("Output for Exact").Range("I2").Value = "Accrual" Then
Worksheets("Output for Exact").Range("A2:W39").Copy
Worksheets("Hard Ouput Accruals").Range("A2").PasteSpecial Paste:=xlPasteValues
但是,这仅考虑 I2 中的值,不会遍历所有行以查看它是否为应计项目,并且仅复制 I2 为应计项目的数据。
答:
0赞
IvanSTV
11/2/2023
#1
你为什么不使用简单的方法呢?
Sub CopyLines()
Const iRow as Long
Sheets(1).Activate
Dim x as Long, y as Long, count as long
x=Sheets(1).Activesheet.UsedRange.Rows.count
y=Sheets(1).Activesheet.UsedRange.Columns.count
Dim Result (x,y) as Variant' result array
count=0
For i=1 to x
If Cells(i,iRow)=<your condition> then
For j=1 to y
count=count+1
Result(count,j)=Cells(i,j)
Next j
End If
Sheets(2).Activate
For i=1 to count
for j=1 to y
Cells(i,j)=Result(i,j)
Next j
Next i
End sub
0赞
Jeffrey Zanghi
11/4/2023
#2
这是您的代码的过度简化版本...但我认为您可以根据需要将两者结合起来/编辑。
基本上,在我的笨拙版本中,我在 Sheet3 的第 I 列中复制了所有带有“是”字样的行,然后将它们作为值粘贴到 Sheet4 上。在您的方案中,显然将“是”更改为“应计”,并将 Sheet3 和 Sheet4 更改为 Sheets 的名称
Sub CopyRows()
Dim i As Long, j As Long, lastRow As Long
lastRow = Sheets("Sheet3").Cells(Rows.Count, 9).End(xlUp).Row
j = 1
For i = 1 To lastRow
If Sheets("Sheet3").Cells(i, 9).Value = "Yes" Then
Sheets("Sheet3").Rows(i).Copy
Sheets("Sheet4").Rows(j).PasteSpecial xlPasteValues
j = j + 1
End If
Next i
End Sub
评论
Worksheets("Hard Output Accruals").Range("A" & b & ":W" & b).Value = Worksheets("Output for Exact").Range("A" & i & ":W" & i).Value