Sub FillData()
    Dim wb As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim dateValue As Date
    
    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets("Sheet1")
    Set ws2 = wb.Sheets("Sheet2")
    
    lastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To lastRow1
        dateValue = ws1.Cells(i, 1).Value
        lastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
        
        For j = 1 To lastRow2 Step 10
            If ws2.Cells(j, 1).Value = "" Then
                For k = 0 To 8
                    ws2.Cells(j + k, 1).Value = ws1.Cells(i, k + 1).Value
                Next k
                Exit For
            ElseIf ws2.Cells(j, 1).Value = dateValue Then
                Dim rowCount As Long
                rowCount = Application.WorksheetFunction.CountA(ws2.Range(ws2.Cells(j + 4, 1), ws2.Cells(j + 10, 1)))
                If rowCount < 7 Then
                    For k = 0 To 8
                        ws2.Cells(j + rowCount + 4 + k, 1).Value = ws1.Cells(i, k + 1).Value
                    Next k
                    Exit For
                End If
            End If
        Next j
    Next i
End Sub

该 VBA 宏可以实现以下功能:

  1. 将 Sheet1 中 A1 列不同日期的数据填充到 Sheet2 中的重复表格。
  2. 每个表格最多容纳 7 行数据,超过 7 行将填充到下一个表格。
  3. 不同日期的数据不允许填充在一个表格里。

使用方法:

  1. 将代码复制到 Excel 的 VBA 编辑器中。
  2. 将 Sheet1 和 Sheet2 的名称替换为您的实际工作表名称。
  3. 运行宏。

代码解释:

  • lastRow1lastRow2 分别表示 Sheet1 和 Sheet2 的最后一行。
  • dateValue 存储 Sheet1 中当前行的日期值。
  • j 循环遍历 Sheet2 中的表格。
  • rowCount 计算当前表格中已填充的行数。
  • 如果当前表格为空,则将数据填充到当前表格。
  • 如果当前表格日期与 dateValue 相同,且当前表格的填充行数小于 7,则将数据填充到当前表格的下一行。
  • 如果当前表格日期与 dateValue 相同,且当前表格的填充行数大于或等于 7,则将数据填充到下一个表格。

注意:

  • 确保 Sheet2 中的表格格式为 10 行,1-3 行为标题行,4-10 行为空白行。
  • 宏将覆盖 Sheet2 中已有的数据。
  • 宏将按 Sheet1 中的日期顺序填充数据。
Excel VBA 宏:将 Sheet1 数据按日期填充到 Sheet2 重复表格

原文地址: https://www.cveoy.top/t/topic/lDOb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录