重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Microsoft Office Excel 2003を用いて簡単なデータ管理表を作っています。
その中で特定列の各セルに格納された値が一定の条件を満たした際に
そのセルの設定を変更するマクロを実装したいと考えています。

ちょっと分かりづらいかもしれないので具体例を挙げます。
例えばB列の各セルに数値データが格納されているとします。
その数値データが100以上ならばそのセルの背景色を青に、-1以下ならば背景色を赤に変更する。
といった感じです。

全データ数(行数)は不定で必要があれば増やせるようにしたいです。
1データは複数行にまたがっており、判定する項目(列)はセルの結合を行っています。
また、一定行間隔で項目の見出しを記した行が挿入されています。
そのせいか、自分なりに組んでみたマクロはセルの走査がうまくいかず、オーバーフロウを起こしてしまいました。

結合セルでも問題なくデータ入力されている最後のセルまで順に検索していく方法はありますか?
どなたか御存知の方いらっしゃいましたら、ご教授お願いします。

また、ネットで調べるのにも少し限界があるようなので
逆引き事典的に扱える、良いVBAの書籍がありましたら教えて頂けるとありがたいです。

A 回答 (1件)

こんにちは。



>自分なりに組んでみたマクロはセルの走査がうまくいかず、オーバーフロウ
なぜ、そのオーバーフロー(英語では、フロウと発音しますが)するのか、コードをみないと分かりませんね。

オーソドックスな書き方なら、こんなコードになりますね。

'なるべく標準モジュール
'------------------------------------------------
Sub TestMacro1()
  Dim c As Range
  Application.ScreenUpdating = False
  For Each c In Range("A1", Range("A65536").End(xlUp))
    '値が数字であることを限定とする
    If VarType(c.MergeArea.Item(1)) = vbDouble Then
      If c.MergeArea.Item(1).Value > 99 Then
        c.MergeArea.Interior.ColorIndex = 5 '青
      ElseIf c.MergeArea.Item(1).Value < 0 Then
        c.MergeArea.Interior.ColorIndex = 3 '赤
      Else
        c.MergeArea.Interior.ColorIndex = xlNone '色戻し
      End If
    End If
  Next c
  Application.ScreenUpdating = True
End Sub

>逆引き事典的に扱える、良いVBAの書籍がありましたら教えて頂けるとありがたいです。

事典として扱えるものですと、単に、『Excel VBA逆引き大全集』というような書名になっているものしか思いつきません。ただ、VBAは、VBEditor 自身が教えてくれるようなものだと思います。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
実行してみたところ、正常に動作しました。

なるほど、MergeAreaプロパティで結合セル範囲を取得して
そのセル範囲の最上段のセルをItemプロパティで取得するということですよね。
色々と応用が利きそうなプロパティですね。参考になります。

>ただ、VBAは、VBEditor 自身が教えてくれるようなものだと思います。
分かりました。もうちょっとヘルプと睨めっこしながら色々やってみようと思います。

お礼日時:2008/02/06 00:58

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