トップページ >
Excel >
VBA >
講座:セルの操作 >
データの取得
データの取得
セルにどんなデータが入力されているかを調べるには、データの入力と同じようにRangeオブジェクトの
Valueプロパティを参照します。次のコードは、セルA2に入力されているデータを画面に表示します。
Sub Sample1()
MsgBox Range("A2").Value
End Sub
もちろん、データを入力するときと同じようにValueプロパティを省略することもできます。
では、データの入力と同じように、複数のセルに入力されているデータを同時に取得することもできるのでしょうか。もちろんできます。しかし、データの入力ほど簡単ではありません。次のコードは、セル範囲A2:A5に入力されているデータを配列bufに取り込みます。
Sub Sample2()
Dim buf As Variant, n As Long
buf = Range("A2:A5").Value
n = InputBox("何番目のセル?(1〜4)")
MsgBox buf(n, 1)
End Sub
要素数の不明な配列を使用するときはバリアント型で宣言すると便利です。Sample2は、変数bufにセル範囲A2:A5のValueプロパティを配列として格納し、InputBoxで指定された番号の要素を画面に表示しています。MsgBoxの引数でわかるように、セルまたはセルのデータを配列に格納すると、その配列は2次元配列になります。取り込んだ範囲が1列(A2:A5)でも2次元配列になるので注意してください。
上の説明を理解できない方は、複数セルのデータを一気に取得しようなどと思わないことです。そんな無茶をしないで、セルのデータを1つずつ取得したとしても、VBAは十分高速です。
■取得したデータを変数に入れる
マクロでセルのデータを取得する場合、その取得したデータを後で使うケースがほとんどです。したがって、セルのデータは一度変数に入れられます。そんなときは、使用する
変数の型に留意してください。
セルA2に「123」という数値データが入力されているとします。次のコードは、セルA2のデータを画面に表示します。
Sub Sample3()
Dim buf As Long
buf = Range("A2")
MsgBox buf
End Sub
セルA2のデータは数値でした。そこで変数bufを長整数型で宣言して、数値を格納しています。これは何も問題ありません。では、変数bufを文字列型(String)で宣言するとどうなるでしょう。
Sub Sample4()
Dim buf As String
buf = Range("A2")
MsgBox buf
End Sub
こちらも問題なく動作します。文字列型で宣言された変数bufに数値データを格納しようとすると、Excelが自動的に型変換してくれるのです。な〜んだ…ぢゃ心配ないや(^_^) と喜ぶのは早計です。セルに「田中」のような
文字列が入力されていた場合、次のように文字列→数値への
型変換は行われません。
Sub Sample5()
Dim buf As Long
buf = Range("A2") ''←「田中」
MsgBox buf
End Sub
安全なマクロを望むなら、セルに入力されているデータのタイプを調べてから変数に格納しましょう。
セルのデータが数値かどうかを判定するには、
IsNumeric関数を使います。
Sub Sample6()
Dim buf As Long
If IsNumeric(Range("A2")) = True Then
buf = Range("A2")
Else
MsgBox "セルA2は数値が入力されていません"
End If
End Sub
ほかにも、
ワークシート関数を使う手もありますね。
Sub Sample7()
Dim buf As Long
If WorksheetFunction.IsText(Range("A2")) = True Then
MsgBox "セルA2は文字列です"
Else
buf = Range("A2")
End If
End Sub
セルのデータを取得することは難しくありません。しかし実際のマクロでは、取得したデータを変数に入れたり、計算を行ったりと、取得だけでは終わりません。そうした処理こそが、実は難しいのです。
[データの入力]戻る← | →進む[計算式の入力]