2016-06-21 4 views
0

워크 시트에 100 개의 시트가 있고 모든 시트에서 반복하고 C 열의 셀이 null이 아닌 경우 해당 b 열에 워크 시트 이름을 인쇄한다고 가정 해 봅시다.워크 시트 이름을 여러 시트의 행에 추가합니다.

a | b | c 
123 | null | John 
345 | null | Arya 
678 | null | Sansa 

그리고 그것이 I이 루프 통합 문서의 모든 워크 각 시트의 범위에서 반복 할

a | b  | c 
123 | Sheet1 | John 
345 | Sheet1 | Arya 
678 | Sheet1 | Sansa 

로 변환되어야 할 :

원래 시트도 1은 표준이 아닙니다. 여기에 다양한 글을 읽기에 의해 생성 된 코드는하지만 작동하지 않습니다

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 

I 해요 초보자 ..

내가 보는 것과

답변

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 
+0

매력처럼 작동했습니다! 고마워요! 어리석은 질문을하는 사람들을 완전히 귀찮게하지 말고 나를 완전히 이해하기 위해 나를 조금이라도 분해한다면 어떨까요? –

+0

먼저 Sub에 앞서 Dim LastRow를 사용 했으므로 아무 것도하지 않았습니다. Option Explicit을 사용하면 오류가 발생하지만 그렇지 않은 경우 숫자가 기본값이됩니다. 둘째, 시트는 Workbooks 속성의 컬렉션입니다. 컬렉션을 순환 할 수있을 때 Step을 사용하여 루프를 만들 필요가 없습니다. 컬렉션에 대한 자세한 내용은 매우 유용합니다. 셋째, 셀 주석을 표준 (행 번호, 열 번호)으로 변경했습니다. 어쩌면 다른 어떤 스타일보다 좋을 수도 있지만 좋은 습관입니다. –

0

,이 행의 xlDown 대신 xlUp해야한다 :

LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row 

xlUp은 VBA에 C 열의 맨 끝 (행 1)으로 이동하도록 지시합니다. 그런 다음 행 2에서 1로 반복합니다.

VBA를 오랫동안 사용하지 않았습니다.

희망이 도움이됩니다.

+0

아니, 원래의 방법 (xlUp)이 올바른지 - 그것은 데이터가 포함 된 마지막 행까지가는 다음 마지막 행으로 이동합니다. 마지막 행으로 이동하여 Ctrl + Up을 누르는 것과 같습니다. –

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 
+0

@ Tom 도와 주셔서 감사합니다. 그러나 해결책이 효과가 없습니다. 워크 시트에는 아무 것도하지 않았습니다. –

+0

코드가 제대로 작동합니다. 당신이 찾고있는 정확한 문자열은 무엇입니까? "null"입니까, 셀이 비어 있습니까? –

+0

자, 질문을 잘못 읽었습니다. 지금 잘 작동해야합니다. –

관련 문제