2017-09-22 11 views
0

このVBAコードを作成しましたが、必要に応じて各ワークシートをループしません。私はアクティブなワークシート上でタスクを実行します。 誰かが私を助けてくれますか?iループとループごとにジャンプしないでくださいVBAを指定します

Public Sub MvColumns() 

Dim i As Long 

For i = 2 To ThisWorkbook.Worksheets.Count 
     Columns("D:D").Select 
     Selection.Insert Shift:=xlToRight 
     Columns("F:F").Select 
     Selection.Cut Destination:=Columns("D:D") 
     Columns("F:F").Select 
     Selection.Delete Shift:=xlToLeft 
     Columns("G:G").Select 
     Selection.Cut Destination:=Columns("J:J") 
     Columns("H:H").Select 
     Selection.Cut Destination:=Columns("G:G") 
     Columns("H:J").Select 
     Selection.Delete Shift:=xlToLeft 
     Columns("A:A").Select 
     Selection.Delete Shift:=xlToLeft 
     Columns("A:F").Select 
     Columns("A:F").EntireColumn.AutoFit 
     Columns("A:A").Select 
     Selection.ColumnWidth = 18.43 
     Range("C4").Select 
     Range("A2").ClearContents 
Next 


End Sub 
code here 
+0

次のように、コードの不要な部分をクリーンアップし(やや速くします)彼のビデオ:[Excel VBAの紹介第5部 - セル(範囲、セル、アクティブセル、終了、オフセット)の選択](https://www.youtube.com/watch?v=c8reU-H1PKQ&list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5&index=5&t=3128s ) –

答えて

0

あなたのコードは、単にアクティブシートに適用されているため、デフォルト

Columns("D:D").Select 

や他の線によってアクティブシート上のタスクを実行します。

:あなたはそれを行うことができますので、あなたの場合には、この

With ThisWorkbook.Sheets("MyWantedSheet") 
    .Columns("D:D").Select 'the dot link your code with "MyWantedSheet" 
    Selection.Insert Shift:=xlToRight 
    'your entire code 
End With 

のように、あなたはループを使用している「と」使用してコードをプレフィックスする必要が選択したシートにタスクを適用するに

For each sheet in ThisWorkbook.Worksheets ' loop over all sheets 
    With sheet 'select the sheet and apply task on it 
     .Columns("D:D").Select 
     Selection.Insert Shift:=xlToRight 
     'your entire code 
    End With 
Next 
+0

あなたは既に 'For Each ...'を使ってシートへの参照を持っていますが、With ThisWorkBook.Sheets(sheet.name)を使う必要はなく、 'With sheet'を使うだけです。 –

+0

あなたは正しいです。Vincent、ありがとう! – Putxe

+0

ありがとうございます。それは正しい方法であり、うまくいきました。 :) –

0

あなたはこのビデオシリーズを見る必要があります:Excel VBA Introduction - YouTube。これは、ほとんどのrelaventです:Excel VBA Introduction Part 5 - Selecting Cells (Range, Cells, Activecell, End, Offset)

Public Sub MvColumns() 
    Dim i As Long 
    For i = 2 To ThisWorkbook.Worksheets.Count 
     With ThisWorkbook.Worksheets(i) 
      .Columns("D").Insert Shift:=xlToRight 
      .Columns("F").Cut Destination:=Columns("D:D") 
      .Columns("F").Delete Shift:=xlToLeft 
      .Columns("G").Cut Destination:=Columns("J:J") 
      .Columns("H").Cut Destination:=Columns("G:G") 
      .Columns("H:J").Delete Shift:=xlToLeft 
      .Columns("A").Delete Shift:=xlToLeft 
      .Columns("A:F").EntireColumn.AutoFit 
      .Columns("A").ColumnWidth = 18.43 
      .Range("A2").ClearContents 
     End With 
    Next 
End Sub 
0

あなた薄暗いとしてライン用置き換え:あなたが求めているものを達成する必要があり

Dim ws As Worksheet 
For Each ws In ActiveWorkbook.Worksheets 
    ws.Activate 

を - あなたは、可能性がありますが、好きなら

Public Sub MvColumns() 
    Dim ws As Worksheet 
    For Each ws In ActiveWorkbook.Worksheets 
     ws.Columns("D").Insert Shift:=xlToRight 
     ws.Columns("F").Cut Destination:=Columns("D") 
     ws.Columns("F").Delete Shift:=xlToLeft 
     ws.Columns("G").Cut Destination:=Columns("J") 
     ws.Columns("H").Cut Destination:=Columns("G") 
     ws.Columns("H:J").Delete Shift:=xlToLeft 
     ws.Columns("A").Delete Shift:=xlToLeft 
     ws.Columns("A:F").EntireColumn.AutoFit 
     ws.Columns("A").ColumnWidth = 18.43 
     ws.Range("A2").ClearContents 
    Next 
End Sub 
関連する問題