「覚え間違い」を教えてください!

ワークシートイベント内で、
セルの値に応じて行色を変更する処理をしているのですが、
オートフィルをした場合、
範囲内のセル全てに処理が適応されません
何か解決策はありますでしょうか?

A 回答 (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

この回答への補足

2000行くらいのデータ数なので、ループを使うと重くなります。
フォルダ検索を再帰処理で行っているため、これ以上速度を落とすことはできません。

補足日時:2014/10/05 17:16
    • good
    • 0

> 2000行くらいのデータ数なので、ループを使うと重くなります。


> フォルダ検索を再帰処理で行っているため、これ以上速度を落とすことはできません。

失礼な話ですね。
補足、ということは、これを読んでどうにかして欲しい、ということなのでしょうけれど、
文句を言う前に何をやりたいのか具体的に示したらどうですか?
> 2000行
その程度で重くなるのは、設計の問題ですから、そちらで見直してください。
> フォルダ検索を再帰処理で行っているため
その処理が遅くて困っている、ということと、件の質問と
どのような関係があって、何を訊きたいのですか?

2000行程度で、"重く"なる状態、ということは、
少なくともExcel2007以降のバージョンだということは想像できます。
でも、想像をどれだけ膨らませても、あなたの望むものを書くことは出来ません。
具体的な条件に合わせて"重くならないよう"手当てすることは出来ますが、
漠然と汎用的な万能薬のようなものを期待されているのでしたら、
残念ながら、そのようなものはありません。
強いて言えば、オートフィルそのものが遅いのですから、
設計も見直しから始めることになるのでしょう。

> オートフィルをした場合、
> 範囲内のセル全てに処理が適応されません
という質問に対する応えとしては、#1の内容以上に書くことはありません。

条件を後出しにして、わざわざ解決を遠避けて楽しんでおられるのでしたら、
或いは、ご自分の置かれた状況や抱えている問題を説明することが出来ないのでしたら、
質問するより先に調べてみてはいかがですか?
このサイト内でも、関連していそうなQAは多数あると思いますよ。
そういうスレを読むことで、あなたが必要とする解決策を手に入れる為には、
どのように質問を組み立てていけばいいのか、とか、
どうすればご自身のなさりたいことを伝えることができるのか、とか、
探ってみるなり、既存の質問・回答を参考にご自身で応用するなり、
何れにしても、もう少し考えてから
仕切り直したほうがよいのではないかと思います。

具体的な回答を付けるのに必要十分な補足でもあれば、解決へのお手伝いはします。
しかし、対話的でなく、尚、挑発的なやりとりしか出来ないのでしたら、
私には引き受けられることはありませんので、退席することになるでしょう。
尚も解決を望まれるようでしたら、ちゃんとした補足をしてください。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報