- ベストアンサー
エクセルのマクロで処理を簡単に、早くする方法
- エクセルのマクロを使用して処理を自動化する方法について教えてください。
- また、マクロの実行速度が低下している場合は、改善方法も教えてください。
- 具体的なマクロの記述例や注意点もお教えいただけると嬉しいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
私に誤解があるようです。 m(_ _)m 直してみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim JobCount As Integer For JobCount = 1 To 48 If ((Target.Row <> (JobCount - 1) * 68 + 5) Or _ (Target.Column >= 7) Or _ (Target.Column <= 8)) Then Call 処理メイン(JobCount) End If Next JobCount End Sub Sub 処理メイン(JobNum As Integer) ActiveSheet.ListObjects("テーブル" & Format(JobNum, "0")).AutoFilter.ApplyFilter End Sub
その他の回答 (2)
- tsubu-yuki
- ベストアンサー率46% (179/386)
直接の回答ではないのですが・・ > If Target.Address = "$G$5:$H$5" Then > Else: Call 処理1 > End If Else で処理1ってことは、 「$G$5:$H$5じゃなかったら」処理1・・ってことでいいんですか? 「だったら」で考えるなら、No1さまと似たような感じですが Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("G:H")) Is Nothing Then Exit Sub ElseIf Target.Row Mod 68 = 5 Then Call 処理(Int(Selection.Row / 68) + 1) End If End Sub Sub 処理(myNum As Integer) ActiveSheet.ListObjects("テーブル" & myNum).AutoFilter.ApplyFilter End Sub こんな書き方もできます。 先に Int するか、後で Format するかの違いくらいですね。 失礼しました。 No1さまは謙遜して早くならないとおっしゃっていますが、 If が48個並んでいるよりは間違いなく早いですよ。 「処理1」が適用されても「処理48」のIf まで律義に見に行きますから。 ま、計測はしていないですけれど。 質問文通りの「じゃなかったら」なのであれば No1さまのご回答を参考に Private Sub Worksheet_Change(ByVal Target As Range) With Selection If ((.Row Mod 68 = 5) And ((.Column = 6) Or (.Column = 7))) Then Exit Sub Else Call 処理(Int(.Row / 68) + 1) End If End With End Sub こんな感じになるでしょうね。
お礼
回答いただきありがとうございます。 HohoPapaさんの回答をベストアンサーにさせていただきましたが tsubu-yukiさんの回答もとても勉強になりました。 本当にありがとうございました。
- HohoPapa
- ベストアンサー率65% (455/693)
Private Sub Worksheet_Change(ByVal Target As Range) If ((Target.Row Mod 68 = 5) And (Target.Column = 7)) Then 処理メイン (Target.Row \ 68) + 1 End If End Sub Sub 処理メイン(JobNum As Integer) ActiveSheet.ListObjects("テーブル" & Format(JobNum, "0")).AutoFilter.ApplyFilter End Sub こんな感じに書き換えができます。 ソースコードは少なくなりますが 早くはならないです。 m(_ _)m
補足
素早い回答ありがとうございます、試してみます。 すみません、補足します。 処理1~48は順番に行うのではなく 指定のセルを変更したら対応するテーブル内だけ オートフィルタをかけていったん処理を終了し、 また違う指定のセルを変更したら対応するテーブル内の オートフィルタをかけるという感じにしたいのですが どのように書けばよいのかわかりません。 良い方法があれば教えてほしいです、よろしくお願いします。
お礼
思い通りの動きになりました、とても嬉しいです。 先に回答してくださったのでベストアンサーとさせていただきます。 本当にありがとうございました。