【VBA入門】ワークシート上の選択データ範囲に対しアドレス取得したり値をセットをする方法

【VBA入門】ワークシート上の選択データ範囲に対しアドレス取得したり値をセットをする方法


Excel実務を効率化する仕様要望は多岐にわたります。

「任意にセル選択したデータ範囲に対して、値を出力したい」そんなことって簡単にできるの?

みなさん、こんにちは。セルネッツ竹本です。

今回は、「任意のデータ範囲に対してできること」をテーマに、解説をしたいと思います。

◆まず、VBAでできることは何か。解説します。


ワークシートに対して、任意のデータ範囲を選択した状態から、
「できること」、「得られる情報は何か」という観点でいうと、おおむね以下の5つです。

1.任意に選択したデータ範囲の始点、終点がわかる

2.任意に選択したデータ範囲のセルの個数がわかる

3.任意に選択したデータ範囲の始点の行番号列番号がわかる

4.任意に選択したデータ範囲の終点の行番号列番号がわかる

5.任意に選択したデータ範囲に値を一括出力できる

Excelワークシートは、二次元座標そのままなので、始点と終点さえ取得できれば、全セル判定もできるということです。

今回は連続データ範囲ですが、「飛び飛び選択」だって可能です。

この場合も考え方は全く同じで、始点(一番左上のセル)、終点(一番右下のセル)はどこ?

これを取得できるので、全セルを判定すれば空欄セルは一目瞭然ですね。

◆サンプルModule

”————————————————————–
‘Private Sub B_連続するセルRange範囲を取得_Click()
”————————————————————–

Dim SO_範囲 As Range
Dim S_取得Adr As String
Dim S_Fr行, S_Fr列, S_To行, S_To列 As Long
Dim S_Cell個数 As Long

'★選択データ範囲をSet
Set SO_範囲 = Selection

'★例)A1:B10をGet
S_取得Adr = SO_範囲.Address

'★セル個数
S_Cell個数 = SO_範囲.Count

'★始点 Cells(1, 1)の列を省略
S_Fr行 = SO_範囲.Cells(1).Row
S_Fr列 = SO_範囲.Cells(1).Column

'★終点 Cells(1, 1)の列を省略
S_To行 = SO_範囲.Cells(SO_範囲.Count).Row
S_To列 = SO_範囲.Cells(SO_範囲.Count).Column

'★選択範囲に任意値セット
O_11.Range(O_11.Cells(S_Fr行, S_Fr列), O_11.Cells(S_To行, S_To列)) = "A"

Debug.Print “DBG検証” & vbCrLf & _
“S_Cell個数= ” & S_Cell個数 & vbCrLf & _
“——————–” & vbCrLf & _
“S_Fr行= ” & S_Fr行 & vbCrLf & _
“S_Fr列= ” & S_Fr列 & vbCrLf & _
“S_To行= ” & S_To行 & vbCrLf & _
“S_To列= ” & S_To列

End Sub

最後の5番目、ですが、始点と終点がわかるので、値の一括セットも簡単ですね。

◆事例として、どんなケースで使うのか

実はけっこう要望が多いのです。

これまでの事例では、「Excelアドイン開発」が多いです。

アドインのメリットとして、「シート名やシート数など関係なく」ユーザが選択したシートの任意のデータ範囲にのみ、入力値の妥当性チェックをしたい、また、調べたい範囲に規則性はなく、ユーザによってまちまちなので、自由にデータ範囲を指定したい。


ついでに、任意に選択したデータ範囲に対して、連続した数字や日付、ランダムな値をテストデータとして出力したい、など。


こうなると、コストパフォーマンスからして、ExcelVBAは優位性を発揮する開発言語という感じですね。

そして、自由度が高く、できることを理解いただくと、いろんな要望があがるのが特徴です。

今回のテーマは、「任意のデータ範囲に対してできること」について、解説を行いました。

本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。


全国対応!お気軽にお問い合わせください