- ベストアンサー
EXCEL VBAによる列番号の取得
a行のx列まである色で塗られている. 色の塗られている範囲で,最終列にあたるセルの 列番号を取得したい. このような場合,どのようにVBAを記述したらよいのでしょうか? どうぞよろしくお願いいたします.
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
一発(VBAコード1行)で求める方法は無いと思う。 データの右端の列は (下記は第1行目の例ですが) Sub test01() i = 1 c = Cells(i, "IV").End(xlToLeft).Column MsgBox c End Sub この列から始めて、1列づつ左方向に聞いていく (下記は第1行目の例ですが) ただし条件付書式で色がついている仕組みのセルには下記はうまく 判別しない。 条件のセルの値そのものに立ち返って、判別するコードを組み込まないといけないでしょう。 下記で言えば、IF-ENDIFの間に、「セルの値が」か「数式が」の式に当たるVBAでのコードを入れることになる。(注) Sub test01() i = 1 c = Cells(i, "IV").End(xlToLeft).Column MsgBox c For j = c To 1 Step -1 If Cells(i, j).Interior.ColorIndex <> xlNone Then MsgBox j End If Next j End Sub ーーー (注) そのセルで条件付書式FormatConditionsが成立しているかどうか、直接聞く方法は、VBAには、なかったように思う。
その他の回答 (3)
- n-jun
- ベストアンサー率33% (959/2873)
色塗りって条件付き書式ではないですよね。
- okormazd
- ベストアンサー率50% (1224/2412)
Sub test() a = 7 'たとえば7列目なら、 x = 1 While ActiveSheet.Cells(a, x).Interior.ColorIndex <> xlNone x = x + 1 Wend x = x - 1 MsgBox x End Sub
お礼
早速のご回答ありがとうございます. 非常に参考になりました.
- xls88
- ベストアンサー率56% (669/1189)
余りスマートではないですが、下記でどうでしょうか。 Sub test() Dim mycc As Range For Each mycc In Rows(1).Cells If mycc.Interior.Pattern = xlSolid Then If mycc.Offset(, 1).Interior.Pattern = xlNone Then MsgBox mycc.Column Exit Sub End If End If Next End Sub
お礼
早速のご回答ありがとうございます. 非常に参考になりました.
お礼
早速のご回答ありがとうございます. 私の行いたかった処理に,imogasi様のご回答が最も合致していたので大変参考になりました. 誠にありがとうございました.