エクセルVBAでBOOK1のsheet1とsheet2とsheet3とsheet4があり、
sheet1とsheet2とsheet3の全ての情報をsheet4にコピーしてまとめるようにしました。
マクロを実行するには、Visual Basicを開いてF5を押しています。
それをsheet1かsheet2かsheet3の中身の一部分でも変更すると
そのときに自動的にマクロが実行されるようにしたいです。
エクセルを開いたときやsheetをアクティブにしたとき、日時を指定して実行させる
という説明はみつけましたが、sheet内の変更で実行というものはみつかりませんでした。
どのようにすれば良いのでしょうか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
Sheet1,2,3それぞれのコード欄にて
Private Sub Worksheet_Change(ByVal Target As Range)
処理マクロ
End Sub
として実行させるか
Private Sub Worksheet_Change(ByVal Target As Range)
Call 処理マクロ名
End Sub
で別モジュール上のマクロを呼び出して実行してください。
この回答への補足
ありがとうございます。
Sub マクロ()
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
これを↓のように変更しましたが、sheet1やsheet2のセルの内容(文章、色など)を変更してもsheet3に反映されませんでした。
Private Sub Worksheet_Change(ByVal Target As Range)
'ここから下は変更はありません。
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
No.5
- 回答日時:
シートの変更処理の中で再度シート内の変更
Rows(RowCount).Delete
をしてるようなので
以下のように
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
実行したいマクロ
Application.EnableEvents = True
End Sub
と
Application.EnableEvents
の処理を追加してください。
No.4
- 回答日時:
こんにちわ 初心者ですが間違っていたらごめんなさい
スレ主様は、コードを「標準モジュール」記述していませんか?
先に回答している方も書いている通り記述先は「seet1,2,3のコードウィンドウ」のChangeイベントです。
http://oshiete.goo.ne.jp/qa/685091.html
この回答への補足
sheet1とsheet2とsheet3に
Private Sub Worksheet_Change(ByVal Target As Range)
Call マクロ()
End Sub
を入れ、
標準モジュールに
Sub マクロ()
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
をやって、sheet1かsheet2のセルを変更すると
エクセルが固まってしまいます。
デバックでは最初の
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
がよくないようです。
書き方が間違っているのでしょうか?
No.3
- 回答日時:
>sheet内の変更
の「変更」の意味・範囲があいまいです。経験が余りなくて、色んなケースを想像できないのでしょうが。
「セルの値の変更」に限れば、下記が参考になるかも。
セルの属性に限っても、セルの値のほかに表示形式やコメントなど色々あるのを意識してますか?
ーー
勉強する方向は、「イベント」に関することだと思う。シートに限って言えば
(1)各シートでシートの
シートタブで右クリックー「コードの表示」で出て来る画面で
General部でWorksheet Declalation部でChangeを指定して
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
などを使う
(2)プロジェクトエクスプローラー部のThisWorkBookでShhetChange
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
End Sub
を使うことをやってみてください。
ーー
後者の参考
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox Sh.Name & " " & Target.Address
End Sub
シート名をSheet1,Sheet2、Sheet3にVBAコードで限定すれば、その3シートを対象にした変更だけコードが書ける。
ーー
しかしこれで操作的(取り消しなども含めて)に、データ入力的(抹消・挿入なども含めて)に色々やってみて、ニーズを満たすかどうか?
私は疑問を持ちますのですが。
ーー
初心者は即時反応性を望む。本源的にはそれが望ましいが、ウインドウズ以前の昔の時代のコンピュター処理を見てきたものには大変なことだと思うから控えめに考える。
エクセルは、VBA程度だけで、突き詰めて即時反応性を追求するのは、関数を除いて難しいと思う。
必要の都度その時点(でボタンでも押させて)のデータで、VBAで改めて「まとめる」直すのが素直では。
この回答への補足
ありがとうございます。
Sub マクロ()
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
これを↓のように変更しましたが、sheet1やsheet2のセルの内容(文章、色など)を変更してもsheet3に反映されませんでした。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'ここから下は変更はありません。
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
No.2
- 回答日時:
各シートのマクロで
Private Sub Worksheet_Change(ByVal Target As Range)
実行したいマクロ
End Sub
を設定するか
ThsiWorkbookのマクロで
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> "Sheet4" Then
実行したいマクロ
End If
End Sub
といった設定にしてください。
この回答への補足
ありがとうございます。
Sub マクロ()
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
これを↓のように変更しましたが、sheet1やsheet2のセルの内容(文章、色など)を変更してもsheet3に反映されませんでした。
Private Sub Worksheet_Change(ByVal Target As Range)
'ここから下は変更はありません。
Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
Dim UsedCell As Range
Dim Max_Row, RowCount As Integer
Set UsedCell = ActiveSheet.UsedRange
Max_Row = UsedCell.Cells(UsedCell.Count).Row
Application.ScreenUpdating = False
For RowCount = Max_Row To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then
Rows(RowCount).Delete
End If
Next
Application.ScreenUpdating = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) VBAでvlookup関数から、別シート参照するやり方・・・ 2 2022/11/14 18:49
- Visual Basic(VBA) VBA active sheetをPDF化して指定フォルダに保存 1 2022/07/07 11:27
- その他(Microsoft Office) オフィス365のエクセル 3 2023/06/29 13:10
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで複数のシートのクリ...
-
Excelで数字を入れたら対応する...
-
【エクセル】フリーワード検索...
-
Excelのシート上のShapeにイベ...
-
エクセルファイルを開いた回数...
-
行事予定表の作成でご教示下さい
-
EXCELのダイアログシートって、...
-
Excelマクロでブック全体を検索...
-
エクセルで○をつけるマクロ設定
-
エクセルのマクロの実行が途中...
-
セルの一部分だけを太字にする方法
-
Excelでセル内の文字をファイル...
-
Excelでランダムで選んだ行を別...
-
エクセルVBAでOUT LOOKメールに...
-
任意のセルに貼り付けをするマ...
-
車番順に平均値を計算したい
-
エクセルの在庫表をマクロで
-
エクセルでランダムな座席表を...
-
【図(1)】の値を【図(2)】【図(...
-
excel定数の違いについて。xlAu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
フォルダ内にある全ファイルの...
-
Excelのシート上のShapeにイベ...
-
エクセル シート内の一番下のセ...
-
長い時間かかるマクロが実行中...
-
セルの一部分だけを太字にする方法
-
【エクセル】フリーワード検索...
-
エクセルで特定の行だけ行削除...
-
エクセル:セル内の文字列の最...
-
EXCELのダイアログシートって、...
-
【エクセル】「実行時エラー’10...
-
Excelでセル内の文字をファイル...
-
エクセルで○をつけるマクロ設定
-
エクセル マクロ 一定時間おき...
-
前月分を次月シートに繰越でき...
-
エクセルのワークシート(テン...
-
自分の専門分野の仕事。初見で...
おすすめ情報