假设我有一张100张工作簿,我想在每张工作表中进行迭代,而C列的单元格不为null,以便在相应的b列上打印工作表名称。
原始工作表1是:
a | b | c
123 | null | John
345 | null | Arya
678 | null | Sansa
我想将它转换为
a | b | c
123 | Sheet1 | John
345 | Sheet1 | Arya
678 | Sheet1 | Sansa
我希望此循环在工作簿的每个工作表中进行迭代,并且每个工作表中的范围不是标准的。这是我通过阅读各种帖子创建的代码,但它不起作用
Dim LastRow As Long
Sub Correction()
Application.ScreenUpdating = False
Dim i As Long
Dim j As Integer
x = Sheets.Count
For j = x To 1 Step -1
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row
For i = 2 To LastRow
ActiveSheet.Cells("B", i) = ActiveSheet.Name
Next i
Next j
Application.ScreenUpdating = True
End Sub
我是新手..
答案 0 :(得分:0)
从我看到的内容,此行中应该是xlDown
而不是xlUp
:
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row
xlUp
会告诉VBA转到C列的最末端(这将是第1行)。然后你从第2行迭代到1。
虽然不确定,但是很久没有使用过VBA了。
希望这有帮助!
答案 1 :(得分:0)
试试这个:
Sub Correction()
Dim i, j, lastRow As Long
Application.ScreenUpdating = False
For Each ws in Worksheets
With ws
lastRow = .UsedRange.Rows.Count
For i = 2 to lastRow
If .Cells(i,3) <> "null" Then .Cells(i,2) = ws.Name
Next
End With
Next
Application.ScreenUpdating = True
End Sub
答案 2 :(得分:0)
Sub Correction()
Application.ScreenUpdating = False
Dim i, LastRow As Integer
Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Sheets
LastRow = Sht.Cells(Sht.Rows.Count, 3).End(xlUp).Row
For i = 2 To LastRow
Sht.Cells(i, 2) = Sht.Name
Next i
Next Sht
Application.ScreenUpdating = True
End Sub