Excel VBA セルにデータを入力する

ExcelVBA-基礎編

セルにデータを入力する方法をご説明します。

また、セルに入力する時の注意点も併せてご説明します。

その他のセルの操作方法については下記の記事をご覧ください。

1.セルの指定方法

セルの指定方法

VBAでセルを指定する方法は、基本的には以下の2つのプロパティを使います。

Rangeプロパティ

Cellsプロパティ

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プロパティの方が圧倒的に使いやすいです。

個人的には特に理由がなければ9割Cellsを利用しています。

2.セルへのデータ入力方法

セルの指定方法がわかったので、次はセルへデータを入力する方法です。

基本的にRangeプロパティもCellsプロパティも同じで「Range(“A1”)=データ」、「Cells(1,1)=データ」の様に書きます。

SampleコードにはValueが記載されていますが、こちらは省略可能です。

文字列

Range
Option Explicit

Sub Sample1()

    Range("A1").Value = "あいうえお"

End Sub
Cells
Sub Sample2()

    Cells(1, 1).Value = "あいうえお"

End Sub

Sample1も2どちらも、A1に「あいうえお」と入力するコードです。

文字列は”(ダブルクォーテーション)で囲います。

数値

Option Explicit

Sub Sample3()

    Range("A1").Value = 12345

End Sub
Sub Sample4()

    Cells(1, 1).Value = 12345

End Sub

Sample3と4も同様に、A1に「12345」という数値を入力するコードです。

文字列と違う点は「””」で囲いません。

変数に入れた内容も入力できます。

変数に代入したデータを入力

Range
Option Explicit

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

数式を入力

Range
Option Explicit

Sub Sample7()
    
    Range("A1").Value = "=1+1"

End Sub
Cells
Sub Sample8()
    
    Cells(1, 1).Value = "=1+1"
    
End Sub

数式は「Range(“A1”).Value = “=B1+C1”」の様にセルを指定することもできます。

複数のセルに一括入力方法

Option Explicit

Sub Sample7()
    
    Range("A1:A10").Value = "あいうえお"
    Range("B1:B10").Value = 12345
    
    Range(Cells(1, 3), Cells(10, 3)) = "あいうえお"
    Range(Cells(1, 4), Cells(10, 4)) = 12345
    
End Sub

Cellsプロパティで複数セルを指定する場合は、「Range(Cells(行,列),Cells(行,列))=」と書きます。

範囲の一番左上と範囲の一番右下をそれぞれ行列で指定します。

3.セルにデータ入力時の注意点

セルにデータを入力する際に、気を付けないといけない事があります。

それは、VBA上では数値を文字列として扱っていても、セルに入力する際に、数値と認識されるデータは自動的に数値に変換されてしまいます

変数の書式設定よりもセルの書式設定の方が優先されるということです。

またセルの表示設定によって、値の表示形式が変わります。

例えばSample3や4を実行した時に、A1の表示設定が日付に設定されていた場合表示結果は以下の様になります。

また、Sample1の文字列を、「01234」の様な数字を文字列として扱っている場合は、A1の表示設定が標準だったり、数値だった場合に最初の0が消えてしまいます。

直接セルに入力しても、型を指定した変数に入力したあとに、セルにデータを入力にしても肝心の入力するセルの表示設定次第で、入力したデータが変わってしまいます。

4.表示設定を操作する

このように、VBA上で扱っていたデータと入力したデータが変わってしまう現象を回避するには、事前にセルの表示設定を指定します。

この表示形式もたくさんあるため、簡単な3つ程度覚えておくくらいで良いかと思います。

「セル.NumberFormatLocal=表示形式」で記載します。

事前に指定することで意図しない変更を回避することが出来ます。

Sub Sample8()
    
    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

また、もっと簡易的に文字列としてデータを扱うには、最初に「’」を付ける事で、そのデータは文字列扱いされます。

※膨大なセルの表示形式を変更する場合は処理時間が長くなる可能性があります。

タイトルとURLをコピーしました