Excel 从一张工作表中收集信息,并将其放置到vba中的另一张工作表中

Excel 从一张工作表中收集信息,并将其放置到vba中的另一张工作表中,excel,vba,Excel,Vba,我在同一工作簿中有两张excel表格。第1页和第2页。 在sheet1中,我生成每个月的日期。例如,z1列将为2017年3月1日,AA1列将为2017年3月2日,AB1列将为2017年3月3日等,直到一个月的结束日期 然后在表2中,我在N、O、p列中有一些数字。每天这些数字都可能不同 表1和表2的C列中都存储了序列号 现在,我试图从sheet2(N+O+p)中收集N、O、p列中的值,并将它们存储在sheet1中head=Date列中的相同序号中。 我试图使用以下代码,但这不起作用 有人能帮我吗

我在同一工作簿中有两张excel表格。第1页和第2页。 在sheet1中,我生成每个月的日期。例如,z1列将为2017年3月1日,AA1列将为2017年3月2日,AB1列将为2017年3月3日等,直到一个月的结束日期

然后在表2中,我在N、O、p列中有一些数字。每天这些数字都可能不同

表1和表2的C列中都存储了序列号

现在,我试图从sheet2(N+O+p)中收集N、O、p列中的值,并将它们存储在sheet1中head=Date列中的相同序号中。 我试图使用以下代码,但这不起作用

有人能帮我吗

Sub registrereren()
Dim FirstDate As Date
Dim LastDate As Date
Dim NextDate As Date
Dim r As Long

Dim j As Long
Dim lastrow1 As Long

FirstDate = DateSerial(Year(Date), Month(Date), 1)
LastDate = DateSerial(Year(Date), Month(Date) + 1, 0)
lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row

For r = 27 To LastDate

If Cells(1, r) = Date Then
 Next r

   For j = 2 To lastrow1

   Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0)


    Next j
 End If

End Sub

下一个r放错了位置。如果

生成的代码如下所示:

Sub registrereren()
    Dim FirstDate As Date
    Dim LastDate As Date
    Dim NextDate As Date
    Dim r As Long
    Dim j As Long
    Dim lastrow1 As Long

    FirstDate = DateSerial(Year(Date), Month(Date), 1)
    LastDate = DateSerial(Year(Date), Month(Date) + 1, 0)
    lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row

    For r = 27 To LastDate
        If Cells(1, r) = Date Then
            For j = 2 To lastrow1
                Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0)
            Next j
        End If
    Next r
End Sub
VBA编辑器使代码缩进变得容易。无论何时启动子、函数、循环、select case或if语句,都要养成按tab键缩进下一行的习惯。处理完块后,使用backspace键返回到先前的缩进级别。此外,编辑器功能区上还有一些选项,允许您缩进或删除整个代码块

一旦你养成了这样做的习惯,当一个块没有以正确的方式终止时,它就会向你跳出来。另一方面,您的零散且不一致的缩进使您很难看出
Next r
的问题所在


上面的代码可以编译,但我无法以任何简单的方式进行测试,因为我不确定您的电子表格是如何布置的。如果仍然不起作用,则说明代码存在另一个问题,可以编辑您的问题,或者在需要时问另一个问题(一旦确定问题所在)。

下一个r放错了位置。如果

生成的代码如下所示:

Sub registrereren()
    Dim FirstDate As Date
    Dim LastDate As Date
    Dim NextDate As Date
    Dim r As Long
    Dim j As Long
    Dim lastrow1 As Long

    FirstDate = DateSerial(Year(Date), Month(Date), 1)
    LastDate = DateSerial(Year(Date), Month(Date) + 1, 0)
    lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row

    For r = 27 To LastDate
        If Cells(1, r) = Date Then
            For j = 2 To lastrow1
                Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0)
            Next j
        End If
    Next r
End Sub
VBA编辑器使代码缩进变得容易。无论何时启动子、函数、循环、select case或if语句,都要养成按tab键缩进下一行的习惯。处理完块后,使用backspace键返回到先前的缩进级别。此外,编辑器功能区上还有一些选项,允许您缩进或删除整个代码块

一旦你养成了这样做的习惯,当一个块没有以正确的方式终止时,它就会向你跳出来。另一方面,您的零散且不一致的缩进使您很难看出
Next r
的问题所在


上面的代码可以编译,但我无法以任何简单的方式进行测试,因为我不确定您的电子表格是如何布置的。如果仍然不起作用,则说明代码存在另一个问题,您可以编辑您的问题,或者在需要时问另一个问题(一旦您确定了问题所在)。

如何/为什么不起作用?它是否给出了一个错误,如果是,什么错误在哪里?仅供参考,您应该确保指定要在哪张纸上运行
行数
计数,就像使用
范围()
工作表(“注册”).Range(“C”和Sheets(“注册”).Rows.Count).End(xlUp).Row
同样,为了澄清,如果
单元格(1,r)
不等于
日期,那么您希望发生什么?我认为你的循环有点不正常。因为,如果我理解的话,如果单元格(1,27)
不等于
日期,那么它只运行一次
,那么你就要转到sub的末尾,是这样吗?用
F8
进行检查。你好,布鲁斯。谢谢你的回复。我在Next r的行上得到一个错误,它说Next没有for。我在VBA方面并没有那么进步。我想在sheet1和sheet2上运行row.count。我希望第一个循环检查表1中的第一行。然后当它找到与日期相等的头部时。然后我想从sheet2的N、O、P列中收集信息,并将它们粘贴到eader等于Date的列中?它是否给出了一个错误,如果是,什么错误在哪里?仅供参考,您应该确保指定要在哪张纸上运行
行数
计数,就像使用
范围()
工作表(“注册”).Range(“C”和Sheets(“注册”).Rows.Count).End(xlUp).Row
同样,为了澄清,如果
单元格(1,r)
不等于
日期,那么您希望发生什么?我认为你的循环有点不正常。因为,如果我理解的话,如果单元格(1,27)
不等于
日期,那么它只运行一次
,那么你就要转到sub的末尾,是这样吗?用
F8
进行检查。你好,布鲁斯。谢谢你的回复。我在Next r的行上得到一个错误,它说Next没有for。我在VBA方面并没有那么进步。我想在sheet1和sheet2上运行row.count。我希望第一个循环检查表1中的第一行。然后当它找到与日期相等的头部时。然后我想从sheet2的N、O、P列中收集信息,并将它们粘贴到标题为Date的列中。嗨,John,谢谢你的回答。我想做的实际上是这样的:Sub test()ActiveCell.Offset(1,12)。Range(“A1”)。选择ActiveCell.FormulaR1C1=“=SUM(Sheet2!RC:RC[2])”ActiveCell.Select.AutoFill目标:=ActiveCell.Range(“A1:A49”),类型:=\xlFillDefault ActiveCell.Range(“A1:A49”)。选择ActiveWindow.smallroll Down:=-18 ActiveCell。选择End Sub我需要代码在第一行中搜索包含当前日期的单元格。然后在此宏中,目标应从该单元格选择到最后一行。嗨,John,谢谢你的回答。我正在尝试的实际操作如下:Sub test()ActiveCell.Offs