• 締切済み

VBA Do Until ~ Loop 内にif

Excel VBAマクロにて、C列のセルのうちOKと書かれたセルのみ塗りつぶすコードを作成したつもりなのですが、動いてくれません。エラー表示も出ません。間違いを指摘して下さる方、あるいは別の書き方があるという方、教えていただけないでしょうか。 下記私が作成したものです。C列にAと書かれたセルが現れるまで処理をするようにしています。 Sub sample() Dim i As Long i = 1 Do Until Cells(i, "C").Value = ”A" If Cells(i, "C").Value = "OK" Then Cells(i, "C").Interior.ColorIndex = 5 End If i = i + 1 Loop End Sub

みんなの回答

  • NuboChan
  • ベストアンサー率47% (785/1650)
回答No.6

sample、参考だけです。 Option Explicit Sub ColorCells() Dim cell As Range For Each cell In Range("C:C") If cell.Value = "OK" Then cell.Interior.ColorIndex = 5 '青色 End If Next End Sub Sub ColorCells2() 'ExcelのVBAマクロにて、C列のセルで文字列中にOKと言う文字列が含まれたセルのみ黄色で塗りつぶすコード Dim cell As Range For Each cell In Range("C1:C" & Cells(Rows.Count, "C").End(xlUp).Row) If InStr(cell.Value, "OK") > 0 Then cell.Interior.ColorIndex = 6 End If Next cell End Sub Sub ColorCell3() 'ExcelのVBAマクロにて、C列のセルで文字列中にOK又はokと言う文字列が含まれたセルのみピンクで塗りつぶすコード Dim lastRow As Long Dim i As Long lastRow = Cells(Rows.Count, "C").End(xlUp).Row For i = 1 To lastRow If InStr(1, UCase(Cells(i, "C")), "OK") > 0 Then Cells(i, "C").Interior.ColorIndex = 7 'ピンク End If Next i End Sub

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

勉強のためなら、質問に目的をまず明記すべきだ。 例えば While文の使い方、 セルに条件で色を付ける、 ターゲットの値が同類が複数ある対処(OK,oKなど)など。 のどれかなどを。 小生なら、コード上で、繰り返しを極力少なくするコードの勉強をする。For Next、While、Loopuntil、If文、Case文などステートメントのブロックになるやり方は少なくする。 エクセルVBAなら機能(本件では条件付き書式)の勉強を中心にする。 内容は、セル集団に対しての繰り返しやIFの要素が背景にあるが、両者はコード上は隠されていてでてこない。これがアプリ(エクセルなど)のスクリプトの最大の利点です。 ーー 例えば、下記のようなのを考えてみた。 Sub test01() Set fnd = Range("A:A").Find("A") ’A列で、Aの値のセルを見つける If Not fnd Is Nothing Then   ’存在すれば Set fc = Range(Cells(1, "A"), fnd).FormatConditions.Add(xlCellValue, xlEqual, "OK") ’条件付き書式を設定 fc.Interior.ColorIndex = 5 End If End Sub 小生なら、ColorIndex = 5は、色が濃くて地が見えにくい。淡いyellowやpinkなどを考える。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

No.2の追加です。 Aの所がおかしいと、最後にエラーになる(もしくは永遠に終わらない)と思いますので間違いは無いと思いますが、念のためにAのところもOKと同じように考えてください。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

No.2の追加です。 もし、OKが含まれているでしたら以下で試してみてください。 If Trim(StrConv(Cells(i, "C").Value, vbNarrow Or vbUpperCase)) Like "*OK*" Then

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

セルにOKだけがありそれが半角でしたらセルの色は変わりました。 半角でもOkとかoKとかokだと駄目ですし、前後に空白スペースがあっても駄目です。 とりあえずコードに書かれているOKをC列のセルに入れて試してみて変わるようでしたら セルの値を「半角の大文字にし、前後のスペースを除いたもの」とOKを比較するようにした以下で試してみてください。 If Trim(StrConv(Cells(i, "C").Value, vbNarrow Or vbUpperCase)) = "OK" Then StrConvについては以下のサイトを参考にしてください。 VBA StrConv 関数:全角と半角を変換する https://www.tipsfound.com/vba/05strconv また、そのコードが、たとえばSheet1のシートモジュールに書かれていて、Sheet2を見ているのでしたらSheet2では何もおこりません。 標準モジュールに書かれていれば見ているシートが変化します。

  • kon555
  • ベストアンサー率51% (1842/3559)
回答No.1

『動いてくれません。』とは具体的にはどのような挙動になりますか?  ループが終わらないのか、すぐに終了するのか、ループ自体は想定通り回っているけれどその先が処理されないのか、どれでしょうか。  まずはそれを切り分けましょう。  ステップインで1行ずつ確認し、『何が失敗しているのか』を明らかにしてみて下さい。 https://haginote.com/vba-step-in-over-out