- ベストアンサー
EXCEL 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
お礼
早速のご回答ありがとうございます. 非常に参考になりました.
関連するQ&A
- エクセル VBA で列番号を足す方法は?
こんにちは。大変お世話になっています。 Set btd = Range("d2:z2").Find(bmd) といったVBAを使用し、あるセル番地を抜き出しました。 そのセルの列番号のみを抜き出して、そこから列番号を右へいくつか動かしたいのですが、その方法がわかりません。 別の定義で出した行をgとして Cells(g, btd.Column)でセルの指定をしました。 このセルがa1だとします。 次の作業として、b1のセルを指定したいのですが、その方法がわからないのです。 b=Cells(g, btd.Column) と定義して、 b.Offset(0, 1).Value などと書いてもエラーになってしまいます。 行番号なら数字を足したり引いたりすればできたのですが、アルファベットの列番号の場合はどうしたら良いのでしょうか? すみませんがよろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel VBA Cells 絶対参照 書き方
Excel VBAにてお尋ねいたします。 Excel VBAにてCellsを使用してセル範囲を指定させていただく際に、絶対参照($A$1:$E$10など)を使用する場合はどのように記述すればよろしいでしょうか? Cellsを使用するのは、セル範囲が毎回異なるため、範囲指定に変数を使用しているためです。 相対参照でしたら、Range(Cells(1,1),Cells(Rows<行番号の変数>,Cols<列番号の変数>))といった記述かと思いますが、絶対参照の場合はどのように記述すればよろしいでしょうか?
- ベストアンサー
- Visual Basic
- ExcelのVBAにおけるLastRowという言葉
ExcelのVBAにおいて、「最終行」即ち「(その列において)データが存在しているセルの中で最も下にあるセルの行番号」を取得する必要が生じる事が良くあります。 その様な場合には、Cells(Rows.Count,列番号).End(xlUp).Row か Range(列番号 & Rows.Count).End(xlUp).Row を用いて取得するのが主流ですが、多くの場合、最終行の行番号のデータが必要になるたびに取得しなおすのではなく、最初に取得した最終行の行番号を変数に格納しておき、最終行の行番号のデータが必要な場合はその変数を使って最終行の行番号を指定するのが普通です。 その様な最終行の値を格納する変数を使用する場合、私個人の場合は「何に使用するための変数であるのかという事を解りやすい変数名を用いる」という観点から、「LastRow」という変数名を好んで用いております。 この「LastRow」という変数名はあくまでそのVBAマクロ内だけで使用されるその場限りのものに過ぎない筈です。 しかし、このサイトのExcelのVBAに関する質問を眺めていると、例えば Range(”○○")からLastRowまで ○○セルからLastRowまで といった具合に、「LastRow」という言葉があたかも「『最終行の行番号』や『最終行のセル』を表す"一般名詞"」であるかの様に使用されている質問を時々見かける事があります。 これが「last row」であれば「最後の行」という意味の英語の言葉になりますから間違いとは言えません。 それに対し「LastRow」という単語は少なくとも英語には存在しません。 それにもかかわらず、「LastRow」という言葉が前述の様な一般名詞として使われているという事は、ExcelのVBAにおいて「LastRow」という言葉は、Excelのワークシートを使った処理における「作業列」などと同様のテクニカルタームになっているという事なのでしょうか?
- 締切済み
- Excel(エクセル)
- エクセルVBAで範囲内での位置取得(行&列)
Sub test() Set Rng = Range("B2:E7") Rng.Cells(2, 2).Select End Sub これで、範囲Rng内では2行/2列目となるC3セルが選択されます。 では、C3セルが、範囲Rng内で何行/何列目であるかを取得するにはどのように記述すればよいのでしょうか? Rng.Cells(2, 2).Rowは、当たり前ですが、3になってしまいます。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAで列の選択
VBAで通常は、Columns("D").Select でD列が選択されるはずですが、途中にセルが結合している個所があると、選択範囲の列が、すべての行で広がってしまいます。 手動で列番号をクリックするとD列だけの選択ができるのにVBAではなぜ出来ないのでしょう? どうコードを変えればいいのでしょうか? エクセル2000です。
- ベストアンサー
- オフィス系ソフト
- 【VBA】該当する文字列がある列を削除したい。
指定した文字列を検索して、そのセルのある列削除したいです。 例えば2行目に、表の項目として「社名、フリガナ、住所、電話番号、備考、・・・」 と、あるときに、フリガナと電話番号の列を削除させたいのです。 シートによって項目の位置が若干変わる為、列番号を指定して削除するようなことは出来ません。 項目の名前が変わることはありません。 vbaでどのようにすればよいのでしょうか。 また、2行目の範囲で文字列を検索して、該当する文字列があるセルの位置情報を 取得したい場合はどうすれば良いでしょうか? 宜しくお願いします。
- 締切済み
- オフィス系ソフト
- 文字の場合でもA列の最終行の行番号を取得するには
A列の最終行の行番号を、 =MATCH(10^10,A:A) を使えば取得できますが、 これはA列にの最終行が数値の時だけで、文字列が最終行の場合は無視されるようです。 文字列でも取得する方法はありますか? 10^10の部分を変更すればいいと思いますが、どうすればいいですか?
- ベストアンサー
- オフィス系ソフト
- Excel VBAでセル番号の取得の仕方を教えて下さい。
Excel VBAのFunction procedureで選択したファイルセルのセルの番地を列と行を表示するものを作りたいのですが、 記述を教えて下さい。 何卒よろしくお願い致します。
- ベストアンサー
- Visual Basic
- エクセルVBAで最終行取得方法
エクセルVBAで最終行を取得する良い方法を教えて下さい。 VBA初心者でいきづまっていまして、、、 内容はボタンを押した時にF列に対して最終行を取得して、 その最終行の下のセルにボタンの内容が繁栄させるようにしたくて Private Sub CommandButton202_Click() Dim lastRow As Long lastRow = Cells(Rows.Count, 6).End(xlUp).Row + 1 Cells(lastRow, 6).Value = CommandButton202.Caption End Sub と作ってみたのですが、F17より下に文字がはいっているため、 検索範囲を「F列」ではなく、「F2:F16」のように範囲を指定したいのですがどうしたらよいでしょうか、、、。 結構色々調べてはみたのですができなくて、、、
- 締切済み
- 財務・会計・経理
お礼
早速のご回答ありがとうございます. 私の行いたかった処理に,imogasi様のご回答が最も合致していたので大変参考になりました. 誠にありがとうございました.