excel - 使用工作表名称动态填充列

标签 excel vba

我需要使用工作表的名称填充特定列中的单元格。

我有以下用于填充单个单元格的代码:

Sub Worksheet_Name_Plop()
    Cells.WrapText = False ' Disables WordWrap
    [AG2].Value = ActiveSheet.Name
    Columns("AG").Select
    Selection.EntireColumn.AutoFit
End Sub

我遇到的麻烦是每个工作表可能有 1 到 10,000 多行数据。不确定如何仅填充具有数据的行。

有一个标题行,因此结果从每个工作表的第二行开始很重要。

为了提高效率:我还需要能够在同一文件的所有工作表中执行此操作。

非常感谢任何帮助!

最佳答案

9 秒内 1000 万行:

Option Explicit

Public Sub setID1()
    Const FIRST_ROW As Long = 2
    Const COL       As String = "AG"
    Dim ws As Worksheet, lastRow As Long, t As Double, tr As Long

    Application.ScreenUpdating = False: t = Timer
    For Each ws In Application.ActiveWorkbook.Worksheets
        lastRow = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1

        ws.Range(COL & FIRST_ROW & ":" & COL & lastRow).Value2 = ws.Name
        With ws.Cells(FIRST_ROW, COL)
            .WrapText = False
            .EntireColumn.AutoFit
        End With
        tr = tr + lastRow - FIRST_ROW + 1
    Next
    Debug.Print "setID1 - Sheets: " & Worksheets.Count & _
                       ", Rows: " & tr & ", Duration: " & Timer - t
    Application.ScreenUpdating = True
End Sub
Public Sub setID2()
    Const FIRST_ROW As Long = 2
    Const COL       As String = "AG"
    Dim ws As Worksheet, lastRow As Long, t As Double, tr As Long

    Application.ScreenUpdating = False: t = Timer
    For Each ws In Application.ActiveWorkbook.Worksheets
        lastRow = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1

        With ws.Cells(FIRST_ROW, COL)
            .Value2 = ws.Name
            .WrapText = False
            .EntireColumn.AutoFit
        End With
        ws.Range(COL & FIRST_ROW & ":" & COL & lastRow).FillDown
        tr = tr + lastRow - FIRST_ROW + 1
    Next
    Debug.Print "setID2 - Sheets: " & Worksheets.Count & _
                       ", Rows: " & tr & ", Duration: " & Timer - t
    Application.ScreenUpdating = True
End Sub

测试:
setID1 - Sheets: 10, Rows: 10000000, Duration: 9.08203125
setID1 - Sheets: 10, Rows: 10000000, Duration: 9.064453125
setID1 - Sheets: 10, Rows: 10000000, Duration: 9.0625

setID2 - Sheets: 10, Rows: 10000000, Duration: 8.580078125
setID2 - Sheets: 10, Rows: 10000000, Duration: 8.58203125
setID2 - Sheets: 10, Rows: 10000000, Duration: 8.56640625

关于excel - 使用工作表名称动态填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870809/

相关文章:

php - 使用 PHPExcel 在单元格中存储大量数字

vba - 在 VBA 中检查哪个 Excel 工作表处于事件状态(当前显示)

vba - 检查 PDF 是否发送到打印机

在 Excel 中使用 VBA 将文本文件通过 FTP 传输到服务器

excel - 如何判断 Excel 工作簿是否 protected

excel - 根据表格标题自动在单元格中输入日期/时间戳的代码

excel - 备份+恢复特定代码行的 IDE 书签

vba - 从excel中的名称列表中生成所有组合

excel - 使用 vba 脚本将 .txt 中的数据挖掘到 excel 电子表格

vba - 自动将选择复制到新文件并自动保存的代码