VBA之神,
我想请求您提供一些代码,但我似乎无法直接开展工作。
目的,
当一行有一个单元格值" x"在工作表中的第A行'转储',我想在工作表'测试'中过去某些值。 需要在Sheet' test'上发布的值位于B,D,F和L列。
B栏,表格'转储'应该转到D4,在表格'测试'。
D栏,表格' Dump'应该转到C4,在Sheet' test'。
F,Sheet' Dump'应该转到A4,在Sheet' test'。
L栏,表格' Dump'应该转到E4,在Sheet' test'。
当然,我试图让VBA循环,因为当Sheet' Dump'包含字符' 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错误,请指导我做错了什么。只是在编码时尝试学习。
答案 0 :(得分:3)
复制的语法是
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
答案 1 :(得分:2)
您可以尝试以下操作。
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