VBA在预定列中过滤不同工作表上的某些单元格值
VBA的神,
我想请求你的一些代码我似乎无法正常工作的帮助。
目的,
当一行的单元格的值为“x”,表格“转储”中的行A时,我想过去表“testing”中的某些值。 需要在Sheet'test'上张贴的值在B,D,F和L列。
B栏中的值,'Dump'表应该转到D4,在'test'表中。
D栏中的值,“工作表转储”应该在工作表“testing”中转到C4。
F栏中的值,“转储”表应该转到A4,在“testing”表中。
来自列L的值,工作表“转储”应该转到工作表“testing”中的E4。
当然,我试图使VBA循环,因为当工作表“转储”多行包含字符“X”,它继续从D / C / A / E4到下一行。
我已经有工作的代码贴在这里:
Sub test() Dim i, LastRow LastRow = Sheets("Dump").Range("A" & Rows.Count).End(xlUp).Row Sheets("test").Range("A2:K200").ClearContents For i = 2 To LastRow If Sheets("Dump").Cells(i, "A").Value = "x" Then Sheets("Dump").Range(Cells(i, "B"), Cells(i, "B")).Copy Destination:=Sheets("test").Range("A" & Rows.Count).End(xlUp).Offset(1) End If Next i End Sub
一直在尝试使用很多不同的VBA源,并对其进行了一些调整。 如果我从一个错误的源头开始,或者正在犯一些n00b错误,请指导我做错了什么。 只是试图学习,而编码。
你可以尝试以下。
Sub test() Dim i, LastRow LastRow = Sheets("Dump").Range("A" & Rows.Count).End(xlUp).Row Sheets("test").Range("A2:K200").ClearContents j = 4 For i = 2 To LastRow If Sheets("Dump").Cells(i, "A").Value = "x" Then Sheets("test").Cells(j, 4) = Sheets("Dump").Cells(i, 2).Value Sheets("test").Cells(j, 3) = Sheets("Dump").Cells(i, 3).Value Sheets("test").Cells(j, 1) = Sheets("Dump").Cells(i, 6).Value Sheets("test").Cells(j, 5) = Sheets("Dump").Cells(i, 12).Value j = j + 1 End If Next i End Sub
您需要单独跟踪test
表中的每一行,因此添加j = 4
(因为您想从第4行开始)。
编辑
如果你给他们打电话,我会定义你的床单。
Sub test() Dim i, LastRow, source as Worksheet, dest as Worksheet Set source = ActiveWorkbook.Sheets("Dump") Set dest = ActiveWorkbook.Sheets("test") LastRow = source.Range("A" & Rows.Count).End(xlUp).Row dest.Range("A2:K200").ClearContents j = 4 For i = 2 To LastRow With source If .Cells(i, "A").Value = "x" Then dest.Cells(j, 4) = .Cells(i, 2).Value dest.Cells(j, 3) = .Cells(i, 3).Value dest.Cells(j, 1) = .Cells(i, 6).Value dest.Cells(j, 5) = .Cells(i, 12).Value j = j + 1 End If End With Next i End Sub
Tim发布了更好的方法来复制值,但这是你的代码有什么问题:
复制的语法是
sourceRange.Copy Destination:=destinationRange
:=
指定了.Copy
方法的选项/参数。 这可能会令人困惑,因为围绕论点的括号没有像其他语言所期望的那样。
someMethod(argument1, argument2)
将会
someMethod argument1, argument2
如果行中没有其他东西(否则你需要括号)。
您可以通过命名并使用:=
来指定您使用的参数。 这对于可选参数或保持代码可读性特别有用(您可能不记得几个月内每个参数是什么)。 有些人保持参数为空,但我认为这是显而易见的
someMethod paramName1:=True, paramName4:=False, paramName5:=True
比比较容易阅读
someMethod True, , , False, True
(我假设参数名称是描述性的像Destination
)。
函数的参数需要和函数在同一行。 要连接行,删除换行符(duh)或在行尾放置一个_
(如果变长)。
圆括号和换行符的示例:
Set someRange = rangeToSearch.Find( _ What:="abc", _ LookIn:=xlValues, _ MatchCase:=True)
无括号和换行符的示例:
destinationRange.PasteSpecial Paste:=xlPasteValues, skipblanks:=True