VBA中的相对单元引用
我有三列数据,A、B和C。 如果a列和B列之间存在匹配,我想从C列复制以下3个值。例如,我想从C列复制数字1、3和6,因为a和B在第三行匹配VBA中的相对单元引用,vba,excel,Vba,Excel,我有三列数据,A、B和C。 如果a列和B列之间存在匹配,我想从C列复制以下3个值。例如,我想从C列复制数字1、3和6,因为a和B在第三行匹配 A B C 1 2 4 3 4 4 5 5 1 4 6 3 4 8 6 1 8 3 我尝试过调整大小、范围(单元格(Selection.Row,1)、单元格(Selection.Row,3))。复制等,但似乎没有任何效果 Sub test() Dim rngsize As Range, rngsi
A B C
1 2 4
3 4 4
5 5 1
4 6 3
4 8 6
1 8 3
我尝试过调整大小、范围(单元格(Selection.Row,1)、单元格(Selection.Row,3))。复制等,但似乎没有任何效果
Sub test()
Dim rngsize As Range, rngsize2 As Range, rngmake As Range, rngmake2 As Range, rngprice As Range, rngprice2 as range, i As Integer, j As Integer, x As Integer
x = 3
For i = 2 To Sheets("Sheet3").Range("E" & Rows.Count).End(xlUp).Row
For j = 7 To Sheets("Sheet2").Range("E" & Rows.Count).End(xlUp).Row
Set rngsize = Sheets("Sheet3").Range("E" & i)
Set rngsize2 = Sheets("Sheet2").Range("E" & j)
Set rngmake = Sheets("Sheet3").Range("F" & i)
Set rngmake2 = Sheets("Sheet2").Range("F" & j)
Set rngprice = Sheets("Sheet3").Range("X" & i)
Set rngprice2 = Sheets("Sheet2").Range("X" & j)
If rngsize * 0.5 <= rngsize And rngsize2 + 1.5 >= rngsize Then
If rngmake2 * 0.5 <= rngmake And rngmake2 * 1.5 >= rngmake Then
Range(Cells(Selection.Row, 1), Cells(Selection.Row, 3)).Copy
rngprice2.Copy
Worksheets("Sheet4").Range("F" & x).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = xlCopy
x = x + 1
End If
End If
Next j
Next i
End Sub
子测试()
Dim rngsize As Range、rngsize2 As Range、rngmake As Range、rngmake2 As Range、rngprice As Range、rngprice2 As Range、i As Integer、j As Integer、x As Integer
x=3
对于i=2至板材(“板材3”)。范围(“E”和行数。计数)。结束(xlUp)。行
对于j=7至板材(“板材2”)。范围(“E”和行数)。结束(xlUp)。行
设置rngsize=图纸(“图纸3”)。范围(“E”和“i”)
设置rngsize2=板材(“板材2”)。范围(“E”和“j”)
设置rngmake=板材(“板材3”)。范围(“F”和“i”)
设置rngmake2=板材(“板材2”)。范围(“F”和“j”)
设置rngprice=板材(“板材3”)。范围(“X”和“i”)
设置rngprice2=板材(“板材2”)。范围(“X”和“j”)
如果rngsize*0.5=rngsize,则
如果rngmake2*0.5=rngmake,则
范围(单元格(Selection.Row,1),单元格(Selection.Row,3))。复制
rngprice2.收到
工作表(“Sheet4”).范围(“F”和x).粘贴特殊粘贴:=xlPasteValues
Application.CutCopyMode=xlCopy
x=x+1
如果结束
如果结束
下一个j
接下来我
端接头
我无法理解您的代码,因此我根据您的示例和描述拼凑了一些东西。您必须修改常量和工作表以适合您的应用程序
根据您的描述和示例,您希望VBA用于:
当A与同一行中的B匹配时,将C从该行复制,将C从下两行复制到另一个工作表中
Private Sub CopyMatch()
Dim i As Integer
Dim j As Integer
Dim wsCopy As Worksheet
Dim wsPaste As Worksheet
Const intACol As Integer = 1
Const intBCol As Integer = 2
Const intCCol As Integer = 3
Const intPasteCol As Integer = 1
Const intCopyRowStart As Integer = 2
Const intPasteRowStart As Integer = 1
'assign worksheets
Set wsCopy = Sheets("Sheet1")
Set wsPaste = Sheets("Sheet2")
'cycle through each row
i = intCopyRowStart
j = intPasteRowStart
Do Until wsCopy.Cells(i, intACol).Value = "" And _
wsCopy.Cells(i, intBCol).Value = "" And _
wsCopy.Cells(i, intCCol).Value = ""
'check for A-B match
If wsCopy.Cells(i, intACol).Value = wsCopy.Cells(i, intBCol).Value Then
'copy C value from match row + 2 next rows for C
wsCopy.Range(Cells(i, intCCol), Cells(i + 2, intCCol)).Copy
'paste in other sheet
wsPaste.Cells(j, intPasteCol).PasteSpecial Paste:=xlPasteValues
j = j + 3
End If
i = i + 1
Loop
End Sub
这将在另一个工作表中返回值1、3和6
我尝试将此应用于您的代码,如下所示:
Sub test()
Dim rngsize As Range, rngsize2 As Range, rngmake As Range, rngmake2 As Range, rngprice As Range, rngprice2 As Range, i As Integer, j As Integer, x As Integer
x = 3
For i = 2 To Sheets("Sheet3").Range("E" & Rows.Count).End(xlUp).Row
For j = 7 To Sheets("Sheet2").Range("E" & Rows.Count).End(xlUp).Row
Set rngsize = Sheets("Sheet3").Range("E" & i)
Set rngsize2 = Sheets("Sheet2").Range("E" & j)
Set rngmake = Sheets("Sheet3").Range("F" & i)
Set rngmake2 = Sheets("Sheet2").Range("F" & j)
Set rngprice = Sheets("Sheet3").Range("X" & i)
Set rngprice2 = Sheets("Sheet2").Range("X" & j)
If rngsize * 0.5 <= rngsize And rngsize2 + 1.5 >= rngsize Then
If rngmake2 * 0.5 <= rngmake And rngmake2 * 1.5 >= rngmake Then
Sheets("Sheet2").Range(Cells(rngprice.Row, rngprice.Column), Cells(rngprice.Row + 2, rngprice.Column)).Copy
Sheets("Sheet4").Range("F" & x).PasteSpecial Paste:=xlPasteValues
x = x + 3
End If
End If
Next j
Next i
End Sub
子测试()
Dim rngsize As Range、rngsize2 As Range、rngmake As Range、rngmake2 As Range、rngprice As Range、rngprice2 As Range、i As Integer、j As Integer、x As Integer
x=3
对于i=2至板材(“板材3”)。范围(“E”和行数。计数)。结束(xlUp)。行
对于j=7至板材(“板材2”)。范围(“E”和行数)。结束(xlUp)。行
设置rngsize=图纸(“图纸3”)。范围(“E”和“i”)
设置rngsize2=板材(“板材2”)。范围(“E”和“j”)
设置rngmake=板材(“板材3”)。范围(“F”和“i”)
设置rngmake2=板材(“板材2”)。范围(“F”和“j”)
设置rngprice=板材(“板材3”)。范围(“X”和“i”)
设置rngprice2=板材(“板材2”)。范围(“X”和“j”)
如果rngsize*0.5=rngsize,则
如果rngmake2*0.5=rngmake,则
表格(“Sheet2”)。范围(单元格(rngprice.Row,rngprice.Column),单元格(rngprice.Row+2,rngprice.Column))。复制
纸张(“Sheet4”)。范围(“F”和x)。粘贴特殊粘贴:=xlPasteValues
x=x+3
如果结束
如果结束
下一个j
接下来我
端接头
它在运行,但不确定是否按预期工作。我不明白这里的意思。在第三行有一个匹配项,所以你在第三行之后取c列的值而不复制?现在代码正在复制与大小和品牌相同的行中的价格,但我希望它复制以下相同的价格。希望这是有意义的,谢谢。在这种情况下,你不可能知道选项是什么。试试rngprice。调整大小(,3)。复制你也应该将x=x+1
更改为x=x+3
谢谢。我已经添加了代码并相应地调整到(工作表(“Sheet2”).范围(单元格(I,rngprice)、单元格(I+2,rngprice)).Copy),但是我不断收到关于“单元格(I+2…)和单元格(I…)”的错误消息:=<应用程序定义或对象定义错误“在您的代码中,您只将范围设置为每个单元格一个。嗯,我不断收到运行时错误‘1004’——应用程序定义的错误或对象定义的错误,即使我使用完全相同的代码?