[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロで条件付きデータ抽出&作成』(マクロでGo)
マクロで条件付きデータ抽出&作成
仕事場に顧客ファイルがあちこちに存在してして大変なことになっているので、マクロを勉強しています。
Aファイルの中にある複数のシートのうち、A・Bシートから条件に合ったデータを集約して1シートする(データ作成用ファイル)
集約した1シートを読み込んでレイアウトを整えているBファイルでデータを参照する(職場の人が見るデータファイル)
単に集約して別シートに出力する処理はうまくいったのですが、出来るだけ自動化させたいので、
「あるシートのセルの範囲が更新された場合、実行する」という処理を付け加えてました。
コンパイルは通りましたが結果が思わしくなく処理を追いかけてみたのですが、データの集約処理に入ってすぐに抜けてしまうみたいです。
まだ処理の追いかけ方やヘルプの使い方があまりわかっていないので修正が中々進みません。
「このシートが変更されたら」という処理を追加するためにはどういった書き方をすればいいでしょうか?
※ ネットで検索したり、YAHOOで質問したりして下記コードを作成しました。
時間はかかりますがコードを追うことはできるので、よろしくお願いします。
'------------------------------------------
'(Workbookに記述)
''Aシート・Bシートのに変更があった場合にデータの集約処理が実行される
'------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Aシート" Or Sh.Name = "Bシート" Then If ((Target.Row >= 2 And Target.Row <= 100) And (Target.Column >= 18 And Target.Column <= 24)) Then MsgBox "シート 修正" Call marge_Proc End If End If End Sub
'------------------------------------------
'(標準モジュールに記述)
'データの集約処理
'------------------------------------------
Sub marge_Proc()
Dim iWS As Worksheet 'コピー元シート
Dim oWS As Worksheet 'コピー先シート
Dim i As Long
Dim j As Long
Dim LastRow As Integer '最終行取得
Dim Sh As Worksheet 'シート名の取得
j = 2 '出力データ位置(1行目は見出しの為、2行目から書き始める)
Set oWS = Worksheets("AllData")
'マクロからはシート保護をしていても実行できる
Worksheets("AllData").Protect UserInterfaceOnly:=True
'AllDataシートのデータ内容をクリア(1行目の見出しを除く)
Worksheets("AllData").Range("A2:H150").Clear
For Each Sh In Worksheets
If Sh.Name = "Aシート" Or Sh.Name = "Bシート" Then LastRow = Sh.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow If Sh.Range("R" & i) <> "" Then '抽出データの判定 If Sh.Name = "Aシート" Then Sheets("AllData").Range("A" & j) = Sh.Range("C" & i) Sheets("AllData").Range("B" & j) = Sh.Range("T" & i) Else Sheets("AllData").Range("A" & j) = Sh.Range("B" & i) Sheets("AllData").Range("B" & j) = Sh.Range("S" & i) End If j = j + 1 End If Next End If Next End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
ステップインとブレークポイントを使用していますか? イベントコードの If Sh.Name = "Aシート" Or Sh.Name = "Bシート" Then にカーソルを合わせF9でブレークポイントを設定すると、イベント発生時に一旦処理が止まります。 その後はF8キーでマクロを一行ずつ実行してみてください。 どこで問題が発生しているのかが明確になるはずです。 (Jera) 2014/04/24(木) 13:32
(マクロでGo) 2014/04/30(水) 11:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.