Excel 使用工作表名称动态填充列
我需要用工作表的名称填充特定列中的单元格 我有以下填充单个单元格的代码:Excel 使用工作表名称动态填充列,excel,vba,Excel,Vba,我需要用工作表的名称填充特定列中的单元格 我有以下填充单个单元格的代码: Sub Worksheet_Name_Plop() Cells.WrapText = False ' Disables WordWrap [AG2].Value = ActiveSheet.Name Columns("AG").Select Selection.EntireColumn.AutoFit End Sub 我遇到的问题是,每个工作表可能有一到10000多行数据。不确定如何仅填充
Sub Worksheet_Name_Plop()
Cells.WrapText = False ' Disables WordWrap
[AG2].Value = ActiveSheet.Name
Columns("AG").Select
Selection.EntireColumn.AutoFit
End Sub
我遇到的问题是,每个工作表可能有一到10000多行数据。不确定如何仅填充包含数据的行
有一个标题行,因此结果从每个工作表的第二行开始很重要
为了提高效率:我还需要能够跨同一文件的所有工作表执行此操作
非常感谢您的帮助 遍历行并检查列中的数据,然后在该行中写入名称(如果存在)
Sub Worksheet_Name_Plop()
Dim lRow As Long
Dim ws As Excel.Worksheet
Dim iIndex As Integer
For iIndex = 1 To ActiveWorkbook.Worksheets.count
Set ws = Worksheets(iIndex)
ws.Activate
'Start at row 2
lRow = 2
'Loop through the rows in the worksheet
Do While lRow <= ws.UsedRange.Rows.count
'Check if some column has data
If ws.Range("A" & lRow).Value <> "" Then
'Write the worksheet name to column AG of that row
ws.Range("AG" & lRow).Value = ws.Name
End if
'Increment you counter
lRow = lRow + 1
ws.Range("A" & lRow).Activate
Loop
Columns("AG").Select
Selection.EntireColumn.AutoFit
Next iIndex
End Sub
子工作表\u Name\u Plop()
暗淡的光线和长的一样
将ws设置为Excel.Worksheet
作为整数的Dim iIndex
对于iIndex=1的ActiveWorkbook.Worksheets.count
设置ws=工作表(iIndex)
ws.Activate
'从第2行开始
lRow=2
'循环浏览工作表中的行
当lRow1000万行时,在9秒内执行以下操作:
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
测试:
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
是否有一列将包含连续的数据,直到最后一行,例如A列?对不起,A是公平的游戏!这是有效的,可以通过工作表观看它的循环!是的,有很多快速的方法做事情,但是如果是一次性的事情或者类似的事情,我会用一个简单的循环。有时更容易看到正在发生的事情,并对它的工作感到舒服。真是闪电般的快!打印统计信息注释行是否应该在运行时更新?另外(在测试之前没有看到这一点),是否可以对结果禁用自动换行功能?我将其更新为包含.WrapText=False
,以及一个稍快的替代方法(.FillDown
)。打印统计数据行在执行时将更新,但您必须打开即时窗口:在VBA编辑器中-查看->即时窗口(Ctrl+G
)增加0.1秒。Flagged=p最终开始读取代码XD-HUH。所以带
的比较慢。很高兴知道^^^@findwindowo-不,with
更快,但是在第二个选项中,.FillDown
更快(我必须测试这一点:两个解决方案都使用with
,第一个改为使用.Value2=
,每个表中有100万条记录)
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