複数のワークシートで機能を実行する単一のマクロを実行しようとしています。ワークシート4にマクロボタンを割り当てたとしましょう。ステップごとに実行する機能をリストしました。
1)ワークシート4の特定のセルを選択し、ワークシート4の隣接するセルにコピーします。
2)ワークシート3のセル範囲を削除します。
3)ワークシート2のセル範囲をカットしてから、このセル範囲をワークシート3に貼り付けます。
4)別のワークブックからセルの範囲を取り出してワークシート2にコピーします(ワークブックが自動的に発行されるため、これはまったく異なる問題であることがわかります。2つをリンクする方法を見つける必要があります)。
5)ワークシート4およびワークシート3内にあるピボットテーブルを更新します。
この最初の3つの機能に関するヘルプが必要です。以下に現在のコードを貼り付けました。
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Select
Selection.Copy
sh4.Range("C29").Select
ActiveSheet.Paste
sh3.Range("A4:AC1000").Select
Selection.Delete
sh2.Range("A4:AC1000").Select
Selection.Copy
sh3.Range("A4").Select
ActiveSheet.Paste
End Sub
動作しますが、特定の機能を実行するために適切なワークシートを使用している場合にのみ動作します。
select
、selection
、activesheet
を削除することにより、このシートを独立させることができます。
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
sh3.Range("A4:AC1000").Delete
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End Sub
あなたは素晴らしいスタートを切りました。もう少し洗練されて、あなたはそれを手に入れるでしょう。
基本的に、少なくともこの場合、範囲(シート、ワークブックなど)を.Select
する必要はありません。それらを直接操作し、Copy
を使用して、コピー先を指定できます。
以下のコードを参照してください:
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim wkb As Workbook
Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object
With wkb '-> now we can work with this object directly and succinctly
Set sh1 = .Sheets("Brand")
Set sh2 = .Sheets("CurrentWeek")
Set sh3 = .Sheets("PriorWeek")
Set sh4 = .Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End With
End Sub
sheet( "name1")。range( "B29:B30")。copy Destination:= sheets( "name2")。range( "C29")
シート名がname1およびname2であると仮定して、あるシートから別のシートにコピーします