VBAでセルのデータを取得する方法を説明します。
セルのデータを取得する場合は、取得方法は基本的に一緒ですが、取得したデータをどの様に扱うかで、書き方が変わります。
それぞれの扱い方法について説明します。
その他のセルの操作方法については下記記事をご覧ください。
データの取得方法
セルのデータを取得するには、RangeプロパティもしくはCellsプロパティを使用します。
取得した値を変数に入れて使う、セルを指定して値を直接使う、アクティブなセルの値を使う、選択しているセルの値を使う、などいくつか方法があります。
順番に説明します。
値を変数に入れて使う
使用頻度としては、このパターンが一番高い気がします。
この時注意する事は、変数の宣言で指定したデータ型と、取得しようとした型が一致しなかった場合、エラーになります。
数値は文字列として扱う事は出来ますが、その逆は出来ないため、Longなどの数値を扱うデータ型を指定した時に、文字列を取得した場合エラーになります。
Variantだとエラーになりません。
文字列の取得
Sample1、2はどちらもA1に入力されている文字列を取得して、変数へ格納しメッセージボックスに表示させます。
Sub Sample1()
Dim myStr As String '文字列のデータ型
myStr = Range("A1") 'セルA1の値を代入
MsgBox myStr 'ダイアログボックスに表示
End Sub
Sub Sample2()
Dim myStr As String
myStr = Cells(1, 1)
MsgBox myStr
End Sub
数字の取得と計算
取得したデータが数値であれば、変数に代入した後に計算にも使えます。
次のSampleは取得した数字を変数に格納して、掛け算の計算結果を出力します。
Sub Sample3()
Dim myInt1 As Long '整数のデータ型
Dim myInt2 As Long
myInt1 = Range("A1") 'セルA1の値を代入
myInt2 = Range("B1") 'セルB1の値を代入
Range("C1") = myInt1 * myInt2
End Sub
Sub Sample4()
Dim myInt1 As Long'整数のデータ型
Dim myInt2 As Long
myInt1 = Cells(1, 1)
myInt2 = Cells(1, 2)
Cells(1, 3) = myInt1 * myInt2
End Sub
データ型のエラー
変数のデータ型を間違えるとこの様にエラーになります。
整数型のLongに文字列を入れた場合のエラーです。
Sub Sample5()
Dim myStr As Long '整数のデータ型
myStr = Range("A1") 'セルA1の「あいうえお」という文字をを代入
MsgBox myStr 'ダイアログボックスに表示
End Sub
直接セルのデータを使う
変数に代入せず、そのまま指定したセルのデータを使用する事も出来ます。
「セルの値×セルの値」のように名計算も直接セルに出力などが出来ます。
もちろん計算結果を変数に入れてから、セルに出力も可能です。
A1とA2に「10」と「20」を入力してSample6と7を順番に行うと図の様になります。
Sub Sample6()
Range("B1") = Range("A1") 'セルA1の値10をB1に代入
Cells(2, 2) = Cells(2, 1) 'セルA2の値20をB2に代入
End Sub
Sub Sample7()
Range("C1") = Range("A1") * Range("B1") 'セルA1とB1を計算してC1に出力
Cells(2, 3) = Cells(2, 1) * Cells(2, 2) 'セルA2とB2を計算してC2に出力
End Sub
アクティブセルのデータを使う
アクティブなセルを取得するには、ActiveCellを使用します。
B2に「あおうえお」と入力しておき、B2をアクティブな状態で次のSampleを実行すると、B2に入力された文字列が表示されます。
Sub Sample8()
MsgBox ActiveCell
End Sub
選択中のセルのデータを使う
選択中のセルの指定方法は、Selectionを使用します。
図はActiveCellと同じ結果です。
Sub Sample8()
MsgBox Selection
End Sub
複数セルのデータを取得する
複数のセルのデータを一括で取得する場合、配列という概念が必要となるため、少し難しいかもしれません。
配列にセルのデータを格納すると、単一セルでも1列の範囲でも、複数セルでも2次元配列として扱われます。
配列に格納したデータを扱うには、格納されている要素の番号を指定する事で、取得出来ます。
Sub Sample9()
Dim myRange As Variant
myRange = Range("A1:B5") 'A1~B5を配列(2次元配列)として格納
MsgBox myRange(3, 2) '2次元配列の中のB3を指定
End Sub
格納された2次元配列は「配列名(行番号、列番号)」で指定できます。
まとめ
基本的に単一セルを扱う場合は、難しくありません。
変数を使う際には、型の不一致に気をつけましょう。
複数セルを扱う場合は、二次元配列を扱うことになるため、配列を扱うための知識が必要になります。
今回使用したコードはコピーして頂けますと、ご自身の環境に合わせて使用出来るとは思います。