
エクセル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
マクロ 実行ボタンを押さずに常に実行
Excel(エクセル)
-
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
-
4
Excel VBA 実行しても結果が反映されない
Excel(エクセル)
-
5
セルに入力するたびにマクロを実行する
Visual Basic(VBA)
-
6
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
7
エクセル マクロの実行について
Excel(エクセル)
-
8
Excelでマクロ設定したが反映されない(初心者です)
Excel(エクセル)
-
9
【Excel VBA】セルの値が変更されたらマクロを実行
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
【エクセル】フリーワード検索...
-
エクセルのワークシート(テン...
-
Excelで数字を入れたら対応する...
-
EXCELのダイアログシートって、...
-
エクセルで特定の行だけ行削除...
-
マクロ1があります。 A1のセル...
-
エクセルで複数のシートのクリ...
-
長い時間かかるマクロが実行中...
-
シートではなくBOOK間で重複し...
-
エクセル シート内の一番下のセ...
-
前月分を次月シートに繰越でき...
-
エクセルファイルを開いた回数...
-
エクセル:セル内の文字列の最...
-
任意のセルでマクロを実行させたい
-
セルの一部分だけを太字にする方法
-
Excelでセル内の文字をファイル...
-
excelで画像のハイパーリンクを...
-
複数のテキストデータ(文章)を...
-
excelVBAの実行時エラー'1004'...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで複数のシートのクリ...
-
Excel VBAでのWorksheet_Change...
-
マクロ1があります。 A1のセル...
-
Excelのシート上のShapeにイベ...
-
Excelで数字を入れたら対応する...
-
指定値をマクロで検索&シート移動
-
【エクセル】「実行時エラー’10...
-
【エクセル】フリーワード検索...
-
エクセル シート内の一番下のセ...
-
エクセルファイルを開いた回数...
-
EXCELのダイアログシートって、...
-
長い時間かかるマクロが実行中...
-
エクセルで特定の行だけ行削除...
-
前月分を次月シートに繰越でき...
-
エクセル マクロ 一定時間おき...
-
excel定数の違いについて。xlAu...
-
エクセル:セル内の文字列の最...
-
エクセルVBAで実行中画面を...
-
セルの一部分だけを太字にする方法
-
エクセルVBAコード
おすすめ情報