- ベストアンサー
エクセルでのセル範囲取得
- エクセルのVBAでセルの選択範囲を取得する方法について質問があります。
- 選択範囲の行数は`Selection.Cells.Count`で取得できますが、選択範囲の終了行を取得する方法を知りたいです。
- 選択範囲の行数ではなく、選択範囲の終了の行位置を取得する方法があるかどうか知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
範囲の取得はSelection.Addressです。 Sub xxx() MsgBox Selection.Address End Sub 例えば $A$1:$B$10 なら$B$10が最後なので分かると思います。
その他の回答 (2)
- ja7awu
- ベストアンサー率62% (292/464)
質問は、Address のことではないと思いますが・・・ こんな感じ。 MsgBox "選択範囲の最下行は " & Selection.Row + Selection.Rows.Count - 1 > 選択開始行は「ActiveCell.Row」で取得出来ますが うっ? 「選択開始行」って最上行のことであれば違うと思いますが・・・ ActiveCellは、選択範囲内の何処でも有り得ますから・・・ まぁ、後半を見るとご存知のようですが・・・
お礼
2行、10列(行で結合したセルも存在)が関連したデータなので、 どうしても行(最終行)が取得出来ないと範囲削除などの処理が出来なくなるのです。 Selection.Row と Selection.Rows.Count の組み合わせで最下行を取得出来るのは試しています。 ただ、セルの範囲を下から上方向に選択(マウスでドラッグ、シフトキー+矢印キー)した時、 必ず最初のセルがアクティブセルになります。 そうすると、アクティブセルから上方向なのか下方向なのか判断出来ないのです。 >うっ? 「選択開始行」って最上行のことであれば違うと思いますが・・・ あくまで、最初にアクティブセルが決まりますので、「選択開始行=アクティブセル」になるのではないかと・・・ やはり、Visual BasicとVBAは違いますね。 参考にさせて頂きます。 ありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>「Selection.Cells.Count」を使用して、選択範囲の行数が返って来るのは分かっています。 行数ではなくて、選択範囲のセルの数です。 '左上 MsgBox Selection.Cells(1).Address '右下 MsgBox Selection.Cells(Selection.Cells.Count).Address
お礼
>行数ではなくて、選択範囲のセルの数です。 書き方が悪かったようです。 「セル数」なのは分かっているのですが、 開始行が分かるのに終了行が分からないのはおかしい気がします(そう感じるのは自分だけ?) >Selection.Cells(1).Address >Selection.Cells(Selection.Cells.Count).Address 試してみましたが、やはり駄目でした。 どうしても逆に範囲指定するとIFでも処理しきれなくなってしまいます。 参考にさせて頂きます。 ありがとうございました。
お礼
Selection.Addressで範囲指定の方向に関係なく、セル範囲(行)が取れる事を確認しました。 ただ、絶対参照で返ってくるので、行の位置(数値)を取り出す方法を考えました。 駄作ですが、下記の様になりました。 '************************************************************* セル範囲 = Selection.Cells.Address '開始行 '開始行と終了行の参照値から「:」より前を取得 St = Left(セル範囲, InStr(セル範囲, ":") - 1) '最初の文字「$」を切り取り St_c = Mid(St, 2, Len(St)) '「$」の文字より後ろを数値として取得 開始行 = CInt(Mid(St_c, InStr(St_c, "$") + 1, Len(St_c))) '終了行 '開始行と終了行の参照値から「:」より後ろを取得 En = Right(セル範囲, Len(セル範囲) - InStr(セル範囲, ":")) '最初の文字「$」を切り取り En_c = Mid(En, 2, Len(En)) '「$」の文字より後ろを数値として取得 終了行 = CInt(Mid(En_c, InStr(En_c, "$") + 1, Len(En_c))) '************************************************************* 最初の文字「$」を切り取っているのは、 2つ「$」がありますので、「$」文字2つ目以降の文字取得処理が面倒だったので、 「$」を1つにしているだけです。 また、選択列によっても参照値(列)が変わりますので、 これも面倒だったので、無理矢理ですが切り取りなどで取得出来るように考えてみました。 今のところ動作に問題は無いようです。 基本だけですが、まだまだ追加修正が必要です。 でも、Visual Basicの知識が役に立つとは思いもしませんでした。 まぁ、似た様な言語ですから当たり前なのかも? でも違うんですよねぇ。 ありがとうございました。