アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの範囲の指定方法について教えていただきたいです。

下記画像のような場合
C5のセルに各都道府県をプルダウンで入力できます。

都道府県を入力後”表作成”ボタンを実行するとD7~G7・・・・と7行目に各都道府県の市町村が入力されます。

おききしたい点は表を作成したあと
B8から・・・列の範囲の指定の仕方です。
都道府県によって列が変わるという点が難しいです・・・
この範囲内に空欄があったらポップアップだすように指定のですが
範囲の指定方法がわからずです。

「範囲指定方法 VBA」の質問画像

A 回答 (4件)

こんにちは


なさりたい事が少しわからないので、基本的なセル範囲の書き方です。
下記は一例です。書き方は色々ありますのであくまでよく使われる
コードの形として覚えるのが良いと思います。

私的には、覚える為の最善は実験してみる事と思います。
本来はマクロの自動記録を活用してください。(今回はコードを示します)

実験用として新規ブックの標準モジュールに下記をコピペして
シートとVBEの画面がモニターに映るようにしてください
下記のプロシージャにカーソルを置き F8キーでステップ実行を繰り返し行いシート上の選択セルの動きと実行されたコードの内容を確認しましょう。
実行されたコードは止まっている1行上のコード(命令文)です

Sub Test1()
Range("D5").Select
Range("D5").Value = "TEST" '準備
Selection.End(xlToLeft).Select '値が無いと1列目が選択される
Range("D5").Select
Selection.End(xlToRight).Select '値が無いと最後の列が選択される
Selection.End(xlToLeft).Select '最後の列で下記を実行すると値のあるD5が選択される
Selection.End(xlUp).Select '値が無いと1行目が選択される
Range("D5").Select
Selection.End(xlDown).Select '値が無いと最後の行が選択される
Selection.End(xlUp).Select '最後の行で下記を実行すると値のあるD5が選択される
End Sub

今度は同様にTest2をステップ実行してみましょう
このコードは同じ範囲を繰り返し選択します。
Sub Test2()

Range("D5, F7").Value = "TEST2" '準備

Range("D5:F7").Select '記録など
Range("D5").Select

Range("D5", "F7").Select '上記変形
Range("D5").Select

Range("D5", Cells(7, 6)).Select '変形応用A1形式とR1C1形式
Range("D5").Select

'TEST1の応用
Range("D5", Cells(7, Columns.Count).End(xlToLeft)).Select
Range("D5").Select

Range(Cells(Rows.Count, "D").End(xlUp), "F7").Select
Range("D5").Select

Range(Cells(Rows.Count, "D").End(xlUp), Cells(7, Columns.Count).End(xlToLeft)).Select

Range("D5").Select

Range("D5, F7").Select 'ちなみにこれはD5とF7が選択されます
Range("D5").Select

End Sub

D5からF7としていますがD5から ?5までに変えるのは簡単ではないかと

補:>この範囲内に空欄があったらポップアップだす
範囲に空白と言う事は
起点セルからEnd(xlToRight)やEnd(xlDown)は正しく処理できないと言う事になります。Test1でセルの途中に値を入れて試してみましょう。

長文になりました参考まで
    • good
    • 0

単に列範囲を指定したいので有れば


Range(Columns(4), Columns(Cells(1, Columns.Count).End(xlToLeft).Column)).Select

です。

D列(4列目)~最終列までの全てのセルが選択されますが・・・・。
    • good
    • 0

こんにちは



>実行するとD7~G7・・・・と7行目に各都道府県の市町村が入力されます
>B8から・・・列の範囲の指定の仕方です。
何の「列」なんでしょうね。
市町村の列なら、7行目のD:G列なのでは??
あるいは、画像の表(らしきもの)の範囲なら、B7:C17のようだし・・・

>都道府県によって列が変わるという点が難しいです・・・
都道府県はC5に固定みたいだし、その値が変わっても、市町村は(説明文によると)D7:G7固定なのでは??

>範囲の指定方法がわからずです。
ご質問文からは、範囲そのものがまったくわからないので、具体的な回答はできません。
一般的にはセル範囲はRangeで得られるので、文字列の"A1:C10"などで直接指定するか、両端(左上、右下)を示すRangeオブジェクトを用いるなどで指定します。
https://docs.microsoft.com/ja-jp/office/vba/api/ …

あるいは、起点となるセル(範囲)からOffsetメソッドやResizeメソッドを利用して、目的とするセル範囲を取得することも可能です。
    • good
    • 0

よく分からないのですが。


表を作成するときに、空白行がないようにすれば、よいだけの話じゃないのですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!