Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA中的相对单元引用_Vba_Excel - Fatal编程技术网

VBA中的相对单元引用

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。 如果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, 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’——应用程序定义的错误或对象定义的错误,即使我使用完全相同的代码?