見出し画像

Excel VBAベーシック受験に向けて⑨セルの操作、Valueプロパティ


オブジェクト式で対象を指定する際、一般的にコレクションを使う。
たとえば、ブックはWorkbookオブジェクトであるため、ブックの指定はWorkbooksコレクションを使い「Workbooks("Book1.xlsx")」などのように記述する。

しかし、対象にセルを指定するときは、コレクションは使わない。
セルを指定するときは、RnageCellなどのように特別な単語を使う。

Range

Rangeは文字列を使って、セルを指定する。文字列は計算できないので、Rangeはマクロ作成時に対象のセルが決まっているときなどに使う。

Rangeの書式

括弧の中に指定したいセルのアドレスを文字列形式で記述する。

Range("A1") セルA1
Range("A1:B3") セル範囲A1:B3
Range("A1,B3") セルA1とセルB3

Cells

Cellsは、セルの位置を数値で指定できる。
何らかの計算をするときなどはCellsを使う。

Cellsの書式

Cellsでは、指定するセルの行位置と列位置を指定する。

Cells(行, 列)
Cells(3, 2) セルB3
Cells(2, 4) セルD2

列を指定する引数には、列文字(アルファベット)も指定できる。
列文字を指定するときは、必ずダブルクォーテーションで囲む。

Cells(3, "B") セルB3
Cells(2, "D") セルD2

大きい表を操作するとき、Cells(2, 50)と書くと50が何列目を指しているかが分かりにくい。そいうった場合にCells(2, "AX")と列文字を指定する。

メモ📒COLUM関数

COLUM関数で任意の列が、何列目にあたるかという数値を調べることができる。

セルにCOLUM関数を入力する

Valueプロパティ

Valueプロパティは、セルの中にどんな値が入っているかを表すプロパティ。
「=」を使ってセルに値を代入することもできる。

例1

Sub Macro1()
Range("A1").Value = 100
Range("A2").Value = 200
Range("A3").Value = Range("A1").Value + Range("A2").Value
End Sub
Macro1を実行するとセルA1,A2,A3に数値が代入された

例2

Sub Macro2()
   Dim A As Long
   A = Range("C1").Value
   MsgBox A
End Sub
Macro2を実行するとセルC1に入っている値が表示された

例3

Sub Macro3()
Dim A As String
A = InputBox("名前は?")
Range("B1").Value = A
End Sub
マクロを実行すると名前を入力を求めるダイアログボックスが出た
鈴木と入れてみる
セルB1に鈴木と代入された

例4

Sub Macro4()
    MsgBox "名前は" & Cells(1, 2).Value & "です"
End Sub
セルB1に入ってる値を取得し「名前は鈴木です」と表示された

例5

Valueプロパティは「セルの中に入っている値」を表すプロパティである。
セルの中に計算式が入っている場合は計算結果を表します。

セルA4に「=SUM(A1:A3)」という計算式が入っていたとする。
このとき、Range("A4").Valueは、計算式の「=SUM(A1:A3)」ではなく計算式の計算結果を表す。

Sub Macro5()
    MsgBox Range("A4").Value
End Sub
この「600」は計算結果を表しており、セルA4に入っている計算式を表してはいない

次のコードを実行すると、セルB4に、セルA4の計算結果である「600」が代入される。

Sub Macro6()
    Range("B4").Value = Range("A4").Value
End Sub
計算式ではなく計算結果が代入されたことが分かる

Valueプロパティの省略

オブジェクト式の基本形は「オブジェクト.プロパティ」、「オブジェクト.メソッド」で、いずれにしても最低2つの単語が必要だが、オブジェクトがセル(Rangeオブジェクト)の時だけは、「.プロパティ」「.メソッド」のいずれも記述しない書き方が許されている。

オブジェクトだけを指定し、プロパティやメソッドを記述しなかった場合、セル(Rangeオブジェクト)のValueプロパティを指定したものとみなされる。

Range("A1") =100 は Range("A1").Value = 100 と同じ

Cells(3, 1) = Cells(2, 1) + Cells(1, 1) は Cells(3, 1).Value = Cells(2, 1).Value + Cells(1, 1).Value と同じ

Valueプロパティを省略すると可読性が高まる一方で、省略しなで記述すれば「ここはValueプロパティを操作している」と明示することができるため、ケースに応じて使い分けるようにする。

なお、複数のセルを操作するような場合、Valueプロパティを必ず記述しなければならないケースもある。


Valueプロパティを必ず記述しなければならないケースについて、Copilotさんの回答は次のとおり。

VBA (Visual Basic for Applications) では、`Value` プロパティを省略できる場合が多いですが、明示的に `Value` プロパティを記述しないといけないケースも存在します。以下はその一部です:

  1. オブジェクトの型に依存する場合:
    特定のオブジェクトが `Value` プロパティを持っており、かつ他のプロパティやメソッドも同時に存在する場合、VBAは何を参照しているのか不明になることがあります。この場合、明示的に `Value` プロパティを指定することで、意図を明確に示します。

  2. セルの範囲を操作する場合:
    `Range` オブジェクトを使用する際には、多くの場合 `Value` プロパティが自動的に推測されますが、特定の条件下では明示的に指定することでコードの可読性や正確性が向上します。

  3. 値の代入:
    値を代入する際に、特定のシートやセルに対して `Value` プロパティを明示的に指定することで、正確に値を設定することができます。

例:

Dim cell As Range
Set cell = ThisWorkbook.Sheets("Sheet1").Range("A1")

'明示的にValueを指定
cell.Value = 10

'省略可能な場合
cell = 10

これらのケースでは、`Value` プロパティを明示的に記述することで、コードの明瞭さと正確さを保つことができます。


ChatGPTさんの回答は次のとおり。

VBA(Visual Basic for Applications)において、Value プロパティを必ず記述しなければならないケースは、主に以下のような状況で見られます:

1. セルや範囲の値の取得・設定

Excel VBAでセルや範囲の値を取得または設定する際には、Value プロパティを使用します。Value プロパティを指定しないと、セルや範囲の値を直接操作することができません。

  • セルの値を設定する場合: Value プロパティを使用して、セルに値を設定する必要があります。

    1. Range("A1").Value = 100

  • セルの値を取得する場合: セルの値を取得する場合にも、Value プロパティを使用します。

    1. Dim cellValue As Variant cellValue = Range("A1").Value

Value を省略した場合、セルの値を参照しようとしても、基本的に Value が暗黙的に使用されるため、動作は通常通りです。しかし、明示的に Value を指定することで、より意図が明確になります。

2. フォームコントロールの値の取得・設定

VBAでユーザーフォーム(UserForm)のコントロール(例: TextBox, ComboBox, ListBox など)から値を取得したり、値を設定したりする場合、Value プロパティが必要になります。

  • TextBoxの値を取得する場合:

    1. Dim txtValue As String txtValue = TextBox1.Value

  • TextBoxの値を設定する場合:

    1. TextBox1.Value = "新しい値"

  • ComboBoxの値を取得する場合:

    1. Dim selectedValue As String selectedValue = ComboBox1.Value

  • ComboBoxの値を設定する場合:

    1. ComboBox1.Value = "選択肢1"

3. Rangeオブジェクトと数式

Value プロパティは、セルの値だけでなく、数式を設定する際にも使用されます。例えば、数式をセルに設定する場合、Value を使って数式をセットできます。

  • セルに数式を設定する場合:

    1. Range("A1").Value = "=SUM(B1:B10)"

4. セルの値に依存する処理を行う場合

VBAで値をチェックしたり、値に基づいて計算や条件分岐を行う場合にも、Value プロパティを使ってセルの内容を取得する必要があります。

If Range("A1").Value > 100 Then
    MsgBox "値が100を超えています"
End If

5. 値の設定に特定の形式が必要な場合

特定の形式(例えば、日付や文字列)で値を設定したい場合にも、Value プロパティが必要です。値の設定を行わないと、エラーが発生したり、期待する結果が得られない場合があります。

Range("A1").Value = CDate("2025/01/11")

6. Valueプロパティを使うことで効率的にコードを記述できるケース

Value プロパティを使うと、Excelのセルや範囲から複数の値を一度に取得したり、設定したりすることができます。例えば、範囲を一度に取得して処理する場合です。

Dim data As Variant
data = Range("A1:B10").Value

まとめると、VBAで Value プロパティを使う場面は、セルの値やフォームコントロールの値を設定・取得する場合が主ですが、明示的に Value プロパティを使用することで、より明確で誤解のないコードを記述できます。

いいなと思ったら応援しよう!