エクセルVBAでBOOK1のsheet1とsheet2とsheet3があり、
sheet1とsheet2の全ての情報をsheet3にコピーしてまとめるようにしました。
マクロを実行するには、Visual Basicを開いてF5を押しています。
それをsheet1かsheet2の中身の一部分でも変更すると
そのときに自動的にマクロが実行されるようにしたいです。
sheet1とsheet2(sheet3は空白のまま)に
Private Sub Worksheet_Change(ByVal Target As Range)
Call マクロ()
End Sub
を入れ、
次に、標準モジュールに
Sub マクロ()
'下記よりsheet1とsheet2の内容をsheet3にコピーする
Worksheets("sheet1").Range("C1:BE50").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50")
Worksheets("sheet2").Range("C1:BE100").Copy _
Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150")
'下記より上記sheet3の状態から余分な空白行を削除する
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のセルを変更すると
エクセルが固まってしまいます。
デバックでは
Rows(RowCount).Delete
がよくないようです。
書き方が間違っているのでしょうか?
No.3ベストアンサー
- 回答日時:
同じ事を何度も言うのは全く気が引けるのですが,このままではマルで先に進みません。
具体的な確認のポイントは,既に沢山の行数を費やしてご説明済みですが,まるっきりスルーされてしまいました。
「ダメでした」じゃ,いったい何をどう確認してどこがどうダメだったのか,全然情報がありませんので説明のとっかかりもありません。
再掲:
「正しく動く」姿を理解するため,まず次の通りに手を動かしてください。
1.まっさらのブックを一つ用意する
2.「シートあ」と「シートい」「シートう」のシートモジュールにマクロを登録する
3.標準モジュールを追加しマクロを登録する
4.シートあ,い,うに何かサンプルでデータ(数字や文字)を記入する
5.データを記入した行が,空白行を省いて「実行シート」に自動でコピーされる様子を確認する。
特に手順の4および5が確認できていないと推測されます。
あなたの実際のエクセルが,上述で動作確認したサンプルと何がどうちがうのかよく観察し,必要に応じて必要な箇所を(シートの内容を?マクロの記述を?適切に)修正してください。
次に。
あなたが試した「動かないエクセル」で「シートあ」のシートモジュールのマクロを次の通りに変更します
Private Sub worksheet_change(ByVal Target As Excel.Range)
stop
Call macro1
End Sub
「シートあ」に何か文字か数字を記入します
特にこの手順を行っていない可能性が推測されます
VBE画面でStop命令が自動で黄色反転したら,F8キーを連打してマクロを「ステップ実行」します
正しくmacro1に自動で実行が移り,さらに一行ずつ進行していくか確認します
以上の手順もちゃんと実行したのかどうなのか,さっぱり不明です。
No.2
- 回答日時:
>マクロを実行しても何も起きません。
>マクロは有効にしてあります。
動かない原因はさまざま考えつくので,今の乏しいご説明だけで「それならこれが原因だからこうしましょう」と特定する事はできません。
●シート1,シート2の具体的な姿について説明されていないのが原因かもしれません
●「マクロを実行する」方法が間違っているのかもしれません
●そもそもマクロを登録するところから何か判りませんが問題を起こしているのかも?しれません
「正しく動く」姿を理解するため,まず次の通りに手を動かしてください。
1.まっさらのブックを一つ用意する
2.Sheet1とSheet2のシートモジュールに先に回答したマクロを登録する
3.標準モジュールを追加し先に回答したマクロを登録する
4.シート1,シート2に何かサンプルでデータ(数字や文字)を記入する
5.データを記入した行が,空白行を省いてシート3に自動でコピーされる様子を確認する。
あなたの実際のエクセルが,上述で動作確認したサンプルと何がどうちがうのかよく観察し,必要に応じて必要な箇所を(シートの内容を?マクロの記述を?適切に)修正してください。
次に。
あなたが試した「動かないエクセル」でシート1のシートモジュールのマクロを次の通りに変更します
Private Sub worksheet_change(ByVal Target As Excel.Range)
stop
Call macro1
End Sub
シート1に何か文字か数字を記入します
VBE画面でStop命令が自動で黄色反転したら,F8キーを連打してマクロを「ステップ実行」します
正しくmacro1に自動で実行が移り,さらに一行ずつ進行していくか確認します
#こういう動作確認を「デバッグ」と言います。
漫然とマクロを実行して「うごいたーとまったー」と一喜一憂するのではなく,いま動かしているマクロが一行ずつ正しく進行しているか,意図しない結果に終わったときはどこで道を間違えているのか,ご自分の手を動かして確認を必ず実行してください。
正しくmacro1が実行され終了し,なおかつ「意図した結果」が起こらないときは,シート1,2の具体的な姿や「実際の使い方」がご質問で正しく情報提供できていないのが原因です。
シート1や2で「具体的に何をしたとき」「どの行はコピーされる必要があり」「どの行はコピーされて欲しくない」のか,その具体的な理由と判断基準を「具体的なエクセルの姿によって」説明してください。その情報を使い,正しいマクロをイチから作り直す必要があります。
この回答への補足
詳しくアドバイスして頂き、ありがとうございます。
いろいろ試してみましたが、やはりダメでした。
↓その作業画面を画像にして、アップロードしました。
http://blog-imgs-17.fc2.com/s/k/s/sksfiosjdijf34 …
No.1
- 回答日時:
間違いのその1:
今のマクロは,changeイベントが走った時点でのactivesheetに対して諸々処理をするマクロになってしまっています。少なくともそうじゃなく,Sheet3に対して削除なりをするように直す必要がありますね。
付随しての間違いのその2:
上述の結果,シート1/2の空行を削除してしまっています。するとそのアクションがまたchangeイベントをトリガします。結果してchangeイベントから「マクロ」マクロの呼び出しが多重で発生し,場合によってはスタックオーバーフローで停止します。
で。こんなカンジですかね。
シート1とシート2のシートモジュールに:
private sub worksheet_change(byval Target as excel.range)
call macro1
end sub
標準モジュールに:
sub macro1()
with worksheets("Sheet3")
.cells.clearcontents
on error resume next
worksheets("Sheet1").range("C1:BE50").specialcells(xlcelltypeconstants).entirerow.copy _
destination:=.range("A1")
worksheets("Sheet2").range("C1:BE100").specialcells(xlcelltypeconstants).entirerow.copy _
destination:=.range("A" & .usedrange.rows.count + 1)
end with
end sub
この回答への補足
ありがとうございます。
sheet1とsheet2の全ての情報をsheet3にコピーしてまとめ、
sheet1とsheet2の間にある空白行を削除する件ですが、
アドバイスをいただいたコードをそのままコピペしましたが
マクロを実行しても何も起きません。
マクロは有効にしてあります。
コピペしたコードの貼付場所はMicrosoft Excel Objectsのsheet1とsheet2に
Private Sub worksheet_change(ByVal Target As Excel.Range)
Call macro1
End Sub
といれ、
標準モジュールのModule1に
Sub macro1()
With Worksheets("Sheet3")
.Cells.ClearContents
On Error Resume Next
Worksheets("Sheet1").Range("C1:BE50").SpecialCells(xlCellTypeConstants).EntireRow.Copy _
Destination:=.Range("A1")
Worksheets("Sheet2").Range("C1:BE100").SpecialCells(xlCellTypeConstants).EntireRow.Copy _
Destination:=.Range("A" & .UsedRange.Rows.Count + 1)
End With
End Sub
を入れました。原因は何でしょうか・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA リスト表示していますが 3 2023/05/18 12:12
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
エクセルで複数のシートのクリ...
-
フォルダ内にある全ファイルの...
-
エクセル シート内の一番下のセ...
-
Excelで数字を入れたら対応する...
-
EXCELのダイアログシートって、...
-
エクセルのマクロでコマンドボ...
-
エクセルのマクロ実行後にカー...
-
エクセル:セル内の文字列の最...
-
3つのマクロを連続実行の中で...
-
記録したマクロを他のシートに...
-
セルの一部分だけを太字にする方法
-
長い時間かかるマクロが実行中...
-
【エクセル】フリーワード検索...
-
【エクセル】「実行時エラー’10...
-
EXCEL マクロの記録で並べ替え...
-
前月分を次月シートに繰越でき...
-
エクセルで○をつけるマクロ設定
-
Excelでセル内の文字をファイル...
-
エクセル マクロ 一定時間おき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでのWorksheet_Change...
-
Excelで数字を入れたら対応する...
-
エクセルで複数のシートのクリ...
-
エクセルファイルを開いた回数...
-
Excelのシート上のShapeにイベ...
-
エクセルで特定の行だけ行削除...
-
長い時間かかるマクロが実行中...
-
エクセル シート内の一番下のセ...
-
【エクセル】フリーワード検索...
-
Excelでセル内の文字をファイル...
-
【エクセル】「実行時エラー’10...
-
シートではなくBOOK間で重複し...
-
フォルダ内にある全ファイルの...
-
EXCELのダイアログシートって、...
-
エクセル:セル内の文字列の最...
-
自分の専門分野の仕事。初見で...
-
セルの一部分だけを太字にする方法
-
エクセルで○をつけるマクロ設定
-
エクセル マクロ 一定時間おき...
-
Excelにて、同じ画像を複数のセ...
おすすめ情報