- 締切済み
VBAで条件式について
EXEL(VBA)で例えば、A列のデータが入っている行までの中で数値(x)が x<2 ならばセルに色をぬる。そして空白セルと x>2ならば色をぬらない。 という条件式は、どうしたらいいのですか? Sub InteriorColor() For j= 5 to 21 worksheets(j).activate For i = 1 to 40 '30から40行ぐらい While cells(6+i,6)<>"" If(cells(6+i,6).value<2) Then ’6列7行目から with selection.interior .Colorindex=45 .patern=xlsorid End with Wend End if Next i Next j End sub ということを連続していない列(5列ぐらい)に対してします。 同じ命令文になる部分もあるので簡潔にしたいという希望もあります。 上部の命令では無限ループの可能性があり実行が止まりません。 どのように記述したらいいのですか? また、同じブックのシート25枚のうち5枚目から21枚目に対して処理します。 5から21までのシートの間で関係ないシートが7枚目と10枚目と15枚目にあります。それを省いての処理もあれば教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nishi6
- ベストアンサー率67% (869/1280)
質問の意味を理解している? 質問のコードを少し変えて見ました。 『30から40くらい、連続していない列(5列くらい)』の捉え方が問題ですが、そこにデータが入っていると解釈して書いています。6列目より右、7行目より下を対象にしています。 ご参考に。 Sub InteriorColor2() Dim ws As Worksheet 'ワークシート Dim wsIdx As Integer 'ワークシートのインデックス Dim rw As Long '行カウンタ Dim col As Integer '列カウンタ Dim rwLast As Long '使っている最後の行 Dim colLast As Integer '使っている最後の列 Dim actvSheet As Integer '最初のシート actvSheet = ActiveSheet.Index 'マクロを起動したシート Application.ScreenUpdating = False '画面更新を止める For wsIdx = 5 To 21 '必要なシートだったら色を塗る処理を行う If Not (wsIdx = 7 Or wsIdx = 10 Or wsIdx = 15) Then Set ws = Worksheets(wsIdx) 'ワークシートを定義 '色を塗るシートをアクティブにする ws.Activate '使っている最後の行 rwLast = ws.Cells.SpecialCells(xlCellTypeLastCell).Row '使っている最後の列 colLast = ws.Cells.SpecialCells(xlCellTypeLastCell).Column For rw = 7 To rwLast '7行目から使っている最後の行まで For col = 6 To colLast '6列目から使っている最後の列まで 'セルの内容が数字だったら If IsNumeric(Cells(rw, col)) = True Then '入力があって2未満だったら If Cells(rw, col) <> "" And Cells(rw, col) < 2 Then Cells(rw, col).Interior.ColorIndex = 45 Cells(rw, col).Interior.Pattern = xlSolid End If End If Next Next End If Next Worksheets(actvSheet).Select 'マクロを起動したシートに戻す Application.ScreenUpdating = True '画面更新を戻す End Sub
お礼
参考になりました。ありがとうございました。