Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Excel 确定最后使用的单元格并粘贴到下面_Excel_Vba - Fatal编程技术网

Excel 确定最后使用的单元格并粘贴到下面

Excel 确定最后使用的单元格并粘贴到下面,excel,vba,Excel,Vba,我对VBA完全是个新手。我有下面的代码,它进行匹配练习,然后将相关值粘贴到B列。我的问题是每次使用代码时,该列都会更改如何将其添加到模块中,以便它查找第1行中使用的最后一个单元格并粘贴下面的值 Sub TransferData() Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long Dim myname As String Application.ScreenUpdating = False lastrow1 = She

我对VBA完全是个新手。我有下面的代码,它进行匹配练习,然后将相关值粘贴到B列。我的问题是每次使用代码时,该列都会更改如何将其添加到模块中,以便它查找第1行中使用的最后一个单元格并粘贴下面的值

Sub TransferData()

Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long
Dim myname As String

Application.ScreenUpdating = False

lastrow1 = Sheets("Input Sheet").Range("B" & Rows.Count).End(xlUp).Row
For i = 2 To lastrow1
    myname = Sheets("Input Sheet").Cells(i, "B").Value
    Sheets("Data").Activate
    lastrow2 = Sheets("Data").Range("A" & Rows.Count).End(xlUp).Row

    For j = 2 To lastrow2
        If Sheets("Data").Cells(j, "A").Value = myname Then
            Sheets("Input Sheet").Activate
            Sheets("Input Sheet").Cells(i, "c").Copy
            Sheets("Data").Activate
            Sheets("Data").Cells(j, "B").Select
            ActiveSheet.PasteSpecial
        End If
    Next j
    Application.CutCopyMode = False
Next i
Application.ScreenUpdating = True

End Sub

如果您有任何帮助,我们将不胜感激。

您可以用
匹配功能替换j=2至最后一行的第二个

此外,无需一直
激活
纸张背面和第四张,只需使用完全限定的
范围
s即可

代码

Option Explicit

Sub TransferData()

Dim i As Long, j As Long, lastrow1 As Long, lastrow2 As Long
Dim myname As String
Dim MatchRng    As Range

Application.ScreenUpdating = False
j = 2
With Sheets("Input Sheet")
    lastrow1 = .Range("B" & .Rows.Count).End(xlUp).Row

    ' the 2 lines bellow should be outisde the loop
    lastrow2 = Sheets("Data").Range("A" & Sheets("Data").Rows.Count).End(xlUp).Row
    Set MatchRng = Sheets("Data").Range("A2:A" & lastrow2)
    For i = 2 To lastrow1
        myname = .Range("B" & i).Value

        If Not IsError(Application.Match(myname, MatchRng, 0)) Then '<-- if successful Match
            Sheets("Data").Range("B" & j).Value = .Range("C" & i).Value
            j = j + 1
        End If
        Application.CutCopyMode = False
    Next i
End With
Application.ScreenUpdating = True

End Sub
选项显式
子传输数据()
尺寸i为长,j为长,lastrow1为长,lastrow2为长
将myname设置为字符串
调光匹配范围
Application.ScreenUpdating=False
j=2
带工作表(“输入工作表”)
lastrow1=.Range(“B”和.Rows.Count).End(xlUp).Row
'下面的两条线应位于环路外
lastrow2=工作表(“数据”).Range(“A”)和工作表(“数据”).Rows.Count).End(xlUp).Row
设置MatchRng=图纸(“数据”)。范围(“A2:A”和最后一行2)
对于i=2到最后一行1
myname=.Range(“B”&i).Value

如果不是IsError(Application.Match(myname,MatchRng,0)),则“可能的副本”。这个问题的答案不被接受,但答案是正确的。如果你搜索一下,可能还有更多关于这个的答案。@Mark你在上面的答案中试过我的代码了吗?有什么反馈吗?谢伊,看看这个。它按预期工作,但我的问题是,每次使用工作簿时,数据表上的第1行都会添加一个新的日期,这就是需要粘贴新数据的位置,因为上面的代码只会粘贴到ColB中。我需要某种方法让代码识别要粘贴的正确位置。@标记这不在上面的帖子中我想这就是原因我在问题的最后一部分问,“我的问题是,每次使用代码时,col都会更改如何将其添加到模块中,以便它查找第1行中使用的最后一个单元格并粘贴下面的值。”