2017-06-05 13 views
0

1から離れてブック内のすべてのシートをループし、3つの他の連結である列を追加するコードを記述しようとしています。これは、1つのワークシートのすべての行をループするようだが、本コードは行と同様にシートをループしません

Sub addConcats() 
    Dim sh As Worksheet 
    Dim rw As Range 
    Dim RowCount As Integer 

    'Run through worksheets 
    Dim x As Long 
    Sheet1.Select 
    For x = 2 To ThisWorkbook.Sheets.Count 
    If Sheets(x).Name <> "VAT Transaction Report" Then Sheets(x).Select 
    Replace:=False 
    Dim LastRow As Long 
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count 

    For y = 2 To LastRow 
     'Concat 
     ActiveSheet.Cells(y, 20).Value = ActiveSheet.Cells(y, 7).Value & 
ActiveSheet.Cells(y, 9).Value & ActiveSheet.Cells(y, 12).Value 
    Next y 
    Next x 
End Sub 
+0

あなたがActiveSheetを参照しているあなたのyループ内:次のことを試してみてください

完全に選択シートを避け、単にワークシートオブジェクト(SH変数)に対して動作することをお勧めします。このため、1枚のシートのみを更新しています。 –

+1

@BrianMStafford 'x'ループで' Sheets(x).Select'がシートを変更しました。まだ非効率です – Dave

+0

@Daveあなたは正しいです。私はそのコード行を見逃しました! –

答えて

1

ではない他の人が考慮すべきあなたのForループのために、以下のコードを試してみてくださいSheets(x)あなたは更新しようとしている。

Dim LastRow As Long 

For x = 2 To ThisWorkbook.Sheets.Count 
    If Sheets(x).Name <> "VAT Transaction Report" Then 
     With Sheets(x)        
      LastRow = .UsedRange.Row - 1 + .UsedRange.Rows.Count    
      For y = 2 To LastRow 
       'Concat 
       .Cells(y, 20).Value = .Cells(y, 7).Value & .Cells(y, 9).Value & .Cells(y, 12).Value 
      Next y 
     End With 
    End If 
Next x 
1

このために各ワークシートを選択する必要はなく、xとyを使用して実行する必要もありません。

Sub addConcats() 

Dim sh As Worksheet 
Dim LastRow As Long 
For Each sh in ThisWorkbook.Worksheets 
    If sh.Name <> "VAT Transaction Report" Then 
     LastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp) 
     For y = 2 To LastRow 
      'Concat 
      sh.Cells(y, 20).Value = sh.Cells(y, 7).Value & sh.Cells(y, 9).Value & sh.Cells(y, 12).Value 
     Next y 
    End If 
Next 
End Sub 
+0

ありがとうございます。これはうまく機能しています – jabezs09

0

問題は、シートを選択してもSheet.Activateを使用しないことです。次に、ActiveSheetを使用します。

Sub addConcats() 

Dim sh As Worksheet 
Dim x As Integer 
Dim y As Integer 
Dim LastRow As Long 

For x = 1 To ThisWorkbook.Sheets.Count 
    Set sh = Sheets(x) 
    If sh.Name <> "VAT Transaction Report" Then 
     LastRow = sh.UsedRange.Rows.Count 
     For y = 2 To LastRow 
     'Concat 
      sh.Cells(y, 20).Value = sh.Cells(y, 7).Value & sh.Cells(y, 9).Value & sh.Cells(y, 12).Value 
     Next y 
    End If 
Next x 

End Sub 
関連する問題