セルにデータを入力する方法をご説明します。
また、セルに入力する時の注意点も併せてご説明します。
その他のセルの操作方法については下記の記事をご覧ください。
セルの指定方法
セルの指定方法
VBAでセルを指定する方法は、基本的には以下の2つのプロパティを使います。
Rangeプロパティ、Cellsプロパティの2つです。
RangeとCellsの違い
RangeプロパティとCellsプロパティの違いについてです。
Rangeプロパティは「Range(“A1”)」と、普段Excelを操作する際に目にする、A1やB1の様なアドレスを指定します。
Cellsプロパティは「Cells(行番号,列番号)」と指定します。
セルの行と列は、行は上から順番に1行目、2行目、列は左から順番に1列目、2列目と番号で表すことが出来ます。
A1だとCells(1,1)、A2だとCells(2,1)、B3はCells(3,2)となります。
Rangeプロパティは直感的にわかりやすく、Cellsプロパティは数字に置き換えるため、ループなどで使用しやすいです。
Cellsプロパティは非常に便利で、慣れるととても使い勝手の良いプロパティだと思います。
プログラムはアルファベットの操作より数字の操作の方が得意で、記述も簡単だからです。
ループ処理をする際には、行、列を数値で指定するためCellsプロパティの方が圧倒的に使いやすいです。
特に理由がなければ基本的にはCellsを利用して良いと思います。
文字列の入力
記述方法
セルへデータを入力する方法です。
基本的にRangeプロパティもCellsプロパティも同じで「Range(“A1”)=データ」、「Cells(1,1)=データ」の様に書きます。
SampleコードにはValueが記載されていますが、こちらは省略可能です。
Sample1も2どちらも、A1に「あいうえお」と入力するコードです。
文字列は“(ダブルクォーテーション)で囲います。
サンプルコード
Range
Sub Sample1()
Range("A1").Value = "あいうえお"
End Sub
Cells
Sub Sample2()
Cells(1, 1).Value = "あいうえお"
End Sub
結果
A1に「あいうえお」と入力されました。
数値の入力
記述方法
数値は文字列と違い”(ダブルクォーテーション)で囲う必要はありません。
Sample3と4も同様に、A1に「12345」という数値を入力するコードです。
文字列と違う点は「””」で囲いません。
サンプルコード
Range
Sub Sample3()
Range("A1").Value = 12345
End Sub
Cells
Sub Sample4()
Cells(1, 1).Value = 12345
End Sub
結果
A1に数字の「12345」が入力されました。
変数に代入したデータの入力
記述方法
変数に入れた内容も入力できます。
変数を宣言して、変数に文字列や数字を格納してからセルへデータを入力することもできます。
以下Sampleは2つの変数に文字列と数字を格納してからA1とB1に入力するコードです。
サンプルコード
Range
Sub Sample5()
Dim myStr As String
Dim myInt As Long
myStr = "あいうえお"
myInt = 12345
Range("A1").Value = myStr
Range("B1").Value = myInt
End Sub
Cells
Sub Sample6()
Dim myStr As String
Dim myInt As Long
myStr = "あいうえお"
myInt = 12345
Cells(1, 1).Value = myStr
Cells(1, 2).Value = myInt
End Sub
結果
A1にあいうえお、B1に12345と入力されました。
数式の入力
記述方法
セルに数式を入力するのと同様に、VBAでも文字列や数字だけはなく、数式を入力することが出来ます。
数式も文字列同様に“(ダブルクォーテーション)で囲います。
数式バーには入力した数式が反映され、以下Sampleでは「=1+1」と入力されます。
また、数式は「Range(“A1”).Value = “=B1+C1”」の様にセルを指定することもできます。
サンプルコード
次のSampleはA1とB1に数式を入力しますが、数式とみなされるためA1に「2」、B1に「4」が表示されます。
Range
Sub Sample7()
Range("A1").Value = "=1+1"
Range("B1").Value = "=A1+A1"
End Sub
Cells
Sub Sample8()
Cells(1, 1).Value = "=1+1"
Cells(1, 2).Value = "=A1+A1"
End Sub
結果
A1に「=1+1」の計算結果の2が入力されて、B1に「=A1+A1」の計算結果の4が入力されました。
数式バーには数式が反映されています。
複数のセルに一括で入力
記述方法
複数の範囲に一括で入力することもでき、Rangeプロパティ、Cellsプロパティどちらでも可能です。
範囲の一番左上と範囲の一番右下をそれぞれ行列で指定します。
Rangeプロパティは「Range(“A1:A10”)=」のように記述します。
Cellsプロパティで複数セルを指定する場合は、「Range(Cells(行,列),Cells(行,列))=」と記述します。
サンプルコード
Range
Sub Sample9()
Range("A1:A10").Value = "あいうえお"
Range("B1:B10").Value = 12345
End Sub
Cells
Sub Sample10()
Range(Cells(1, 3), Cells(10, 3)) = "あいうえお"
Range(Cells(1, 4), Cells(10, 4)) = 12345
End Sub
結果
Sample9と10を実行した結果です。
各範囲に「あいうえお」「12345」が入力されました。
セルにデータ入力時の注意点
セルにデータを入力する際に、気を付けないといけない事があります。
それは、VBA上では数値を文字列として扱っていても、セルに入力する際に、数値と認識されるデータは自動的に数値に変換されてしまいます。
変数の書式設定よりもセルの書式設定の方が優先されるということです。
またセルの表示設定によって、値の表示形式が変わります。
例えばSample3や4を実行した時に、A1の表示設定が日付に設定されていた場合表示結果は以下の様になります。
また、Sample1の文字列を、「01234」の様な数字を文字列として扱っている場合は、A1の表示設定が標準だったり、数値だった場合に最初の0が消えてしまいます。
直接セルに入力しても、型を指定した変数に入力したあとに、セルにデータを入力にしても肝心の入力するセルの表示設定次第で、入力したデータが変わってしまいます。
表示設定を操作する
このように、VBA上で扱っていたデータと入力したデータが変わってしまう現象を回避するには、事前にセルの表示設定を指定します。
この表示形式もたくさんあるため、簡単な3つ程度覚えておくくらいで良いかと思います。
「セル.NumberFormatLocal=表示形式」で記載します。
事前に指定することで意図しない変更を回避することが出来ます。
Sub Sample11()
Range("A1").NumberFormatLocal = "G/標準"
Range("A2").NumberFormatLocal = "yyyy/m/d"
Range("A3").NumberFormatLocal = "@" '文字列
Cells(1, 2).NumberFormatLocal = "G/標準"
Cells(2, 2).NumberFormatLocal = "yyyy/m/d"
Cells(3, 2).NumberFormatLocal = "@" '文字列
End Sub
また、もっと簡易的に文字列としてデータを扱うには、最初に「’」を付ける事で、そのデータは文字列扱いされます。
※膨大なセルの表示形式を変更する場合は処理時間が長くなる可能性があります。