• ベストアンサー

マクロよ動け

VBA 難民です。 Excel で、左のセルが空白の場合、印刷文字を見えなくするつもりのマクロを作ってみましたが、知らん顔をされます。声の掛け方がまだよくわかってないのです。 こっちを向かせる方法を教えて下さい。よろしくお願いします。 Sub MacroWhiter() Dim a As Variant Dim b As Variant a = ActiveCell.Value b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値 Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける If b = 0 Then 'ゼロの場合 ActiveCell.Font.Color = 2 '文字を白色にする ActiveCell.Offset(1, 0).Activate '下の行に移る End If Exit Do Loop '繰り返す a = ActiveCell.Value

質問者が選んだベストアンサー

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.2

いくつか、問題点がありました 1.Exit Do のためにループが1回しか回らない 2.a,b の取得がループ内に無いので、終了判定が出来ない 3.カラーの設定方法の間違い ------------------ Sub MacroWhiter() Dim a As Variant Dim b As Variant Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける   a = ActiveCell.Value   b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値   If b = 0 Then 'ゼロの場合     ActiveCell.Font.ColorIndex = 2 '文字を白色にする   End If   ActiveCell.Offset(1, 0).Activate '下の行に移る Loop '繰り返す End Sub

awazo
質問者

お礼

ASIMOVさん ありがとうございました。 教えていただいたとおり修正したらうまくいきました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 他のみなさんが、回答してくれるので、あまり重複する内容は避けたいと思いますが、VBAの基礎では、何かの教本などに当てはめるようにして作ったほうがよいです。 それと、私も経験があるのですが、このような実践のレベルから入ると、マクロはさっぱり分かりづらくなるように思います。近道のようで遠回りになります。 なお、Activate と Select の若干のスピードの違いがあるようです。 また、Do ~ Loop も、For i =1 to ● ~ Next を経験された後のほうがよいと思います。 以下の「私のマクロ」のレベルは、VBAの学習を効率よくやって、だいたい2週間過ぎたぐらいです。(「私のマクロ」とも書かないと、とんでもない誤解した人がいますから、あくまでも、私の書いたもののみです。なお、実践では、With ActiveSheet ~ End With で、.Cells(...) という書き方にします。) 'Option Explicit Sub TestMacro() 'Cell's color changes to white color Dim i As Long Dim LastRow As Long 'C列の最後尾の行数を探す LastRow = Range("C65536").End(xlUp).Row '画面の更新をオフにします。 Application.ScreenUpdating = False For i = 1 To LastRow   If Cells(i, 2).Value = 0 Then  'B列(2列目)のセルが0 なら、    Cells(i, 2).Font.ColorIndex = 2 '白に   End If Next i Application.ScreenUpdating = True End Sub

awazo
質問者

お礼

Wendy02さん ありがとうございます。 むずかしいですね。 ScreenUpdatingというのを初めて知りました。

  • bitsu
  • ベストアンサー率34% (39/113)
回答No.1

こんにちわ。 文字色を変えるところの記述がたぶんまずいと思います。 Selection.Font.ColorIndex = 2 '文字を白色にする と書いたら動きませんかね?

awazo
質問者

お礼

bitsuさん ありがとうございます。 ColorIndexプロパティの"Index"が抜けていました。 Font.Color = 2 と書いた参考書もあったのですが。 参考書も2冊比べると全く違うことが書いてあったり、あまりあてになりませんね。

関連するQ&A