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実務の効率化において、ご参考お役立てになれば幸いです。