web-dev-qa-db-ja.com

複数のワークシートにわたるVBAマクロ

複数のワークシートで機能を実行する単一のマクロを実行しようとしています。ワークシート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

動作しますが、特定の機能を実行するために適切なワークシートを使用している場合にのみ動作します。

10
kmiao91

selectselectionactivesheetを削除することにより、このシートを独立させることができます。

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
15
nutsch

あなたは素晴らしいスタートを切りました。もう少し洗練されて、あなたはそれを手に入れるでしょう。

基本的に、少なくともこの場合、範囲(シート、ワークブックなど)を.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
5
Scott Holtzman

sheet( "name1")。range( "B29:B30")。copy Destination:= sheets( "name2")。range( "C29")

シート名がname1およびname2であると仮定して、あるシートから別のシートにコピーします

0
jstiene