- ベストアンサー
VBAのオートフィルについて
ワークシートイベント内で、 セルの値に応じて行色を変更する処理をしているのですが、 オートフィルをした場合、 範囲内のセル全てに処理が適応されません 何か解決策はありますでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 > 何か解決策はありますでしょうか? "範囲内のセル全てに処理が適応され"るように書き直せばいいです。 具体的な説明が何もないので、 汎用的なサンプルと、仮の処理例でお応えします。 要は Targetの中で処理が必要なセルを篩に掛けることと、 Targetの中で処理が必要なセルすべてを総当たりで処理することと、 それぞれのセルについて条件分岐をすることと、 条件分岐に副ってセルの色を変えること、 の4つのポイントを考えればいいです。 以下の記述の応用としては、 ★で示した部分で「処理対象範囲」を指定することと、 「条件分岐と処理の一例」として、こちらが勝手に書いている部分を そちらのやりたいように書換えること、だけで済むように書いています。 以下の記述を新しいシートのシートモジュ-ルにコピペしたら、 「テスト壱」「テスト弐」を実行して動作を確認してみてください。 ' ' /// Private Sub Worksheet_Change(ByVal Target As Range) Const 処理対象範囲 = "A1:B100" ' ←★運用に合わせて★←要指定★ ' ' 関係ないセルの値変更なら処理を中止して Exit Sub If Intersect(Target, Range(処理対象範囲)) Is Nothing Then Exit Sub ' ' 値変更されたセルの内、処理対象範囲に含まれるセルだけを、総当たりで処理 Dim c As Range For Each c In Intersect(Target, Range(処理対象範囲)) ' ' ======================= ' ' 以下、各セル c に対する、条件分岐と処理の一例 If c.Value = "" Or Not IsNumeric(c.Value) Then c.Interior.ColorIndex = xlColorIndexNone Else Select Case c.Value Mod 5 Case 0: c.Interior.Color = vbRed Or &HAAAAAA Case 1: c.Interior.Color = vbBlue Or &HAAAAAA Case 2: c.Interior.Color = vbMagenta Or &HAAAAAA Case 3: c.Interior.Color = vbGreen Or &HAAAAAA Case 4: c.Interior.Color = vbYellow Or &HAAAAAA End Select End If ' ' ======================= Next End Sub Sub テスト壱() ' 数値オンリー Cells.Clear Cells(1, 1) = 1 Cells(2, 1) = 2 MsgBox "オートフィルします" Range("A1:A2").AutoFill Destination:=Range("A1:A30") End Sub Sub テスト弐() ' 数値と文字列 Cells.Clear Cells(1, 1) = 1 Cells(2, 1) = "履歴-1" MsgBox "オートフィルします" Range("A1:A2").AutoFill Destination:=Range("A1:A30") End Sub
その他の回答 (1)
- cj_mover
- ベストアンサー率76% (292/381)
> 2000行くらいのデータ数なので、ループを使うと重くなります。 > フォルダ検索を再帰処理で行っているため、これ以上速度を落とすことはできません。 失礼な話ですね。 補足、ということは、これを読んでどうにかして欲しい、ということなのでしょうけれど、 文句を言う前に何をやりたいのか具体的に示したらどうですか? > 2000行 その程度で重くなるのは、設計の問題ですから、そちらで見直してください。 > フォルダ検索を再帰処理で行っているため その処理が遅くて困っている、ということと、件の質問と どのような関係があって、何を訊きたいのですか? 2000行程度で、"重く"なる状態、ということは、 少なくともExcel2007以降のバージョンだということは想像できます。 でも、想像をどれだけ膨らませても、あなたの望むものを書くことは出来ません。 具体的な条件に合わせて"重くならないよう"手当てすることは出来ますが、 漠然と汎用的な万能薬のようなものを期待されているのでしたら、 残念ながら、そのようなものはありません。 強いて言えば、オートフィルそのものが遅いのですから、 設計も見直しから始めることになるのでしょう。 > オートフィルをした場合、 > 範囲内のセル全てに処理が適応されません という質問に対する応えとしては、#1の内容以上に書くことはありません。 条件を後出しにして、わざわざ解決を遠避けて楽しんでおられるのでしたら、 或いは、ご自分の置かれた状況や抱えている問題を説明することが出来ないのでしたら、 質問するより先に調べてみてはいかがですか? このサイト内でも、関連していそうなQAは多数あると思いますよ。 そういうスレを読むことで、あなたが必要とする解決策を手に入れる為には、 どのように質問を組み立てていけばいいのか、とか、 どうすればご自身のなさりたいことを伝えることができるのか、とか、 探ってみるなり、既存の質問・回答を参考にご自身で応用するなり、 何れにしても、もう少し考えてから 仕切り直したほうがよいのではないかと思います。 具体的な回答を付けるのに必要十分な補足でもあれば、解決へのお手伝いはします。 しかし、対話的でなく、尚、挑発的なやりとりしか出来ないのでしたら、 私には引き受けられることはありませんので、退席することになるでしょう。 尚も解決を望まれるようでしたら、ちゃんとした補足をしてください。
補足
2000行くらいのデータ数なので、ループを使うと重くなります。 フォルダ検索を再帰処理で行っているため、これ以上速度を落とすことはできません。