将工作表名称添加到多个工作表中的行

时间:2016-06-21 12:53:41

标签: excel-vba vba excel

假设我有一张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

我是新手..

3 个答案:

答案 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