目次

目的

Excel VBA で、現在のワークシートの指定範囲をループして、セルに入力されている値の取得、セルに入力する新しい値を設定したい。

以下のリンクのページとほとんど同じ内容ですが、今回は繰り返し処理の制御構造に、 For Each ... Next ステートメントというものを使用しています。

ワークシートの指定範囲をループしてセルの値を取得・設定する。
https://pulogu.net/blog/020-computer/excel-vba/worksheet-specified-range-loop/

ループするセルの範囲は、現在のワークシートの A1:A5 で試してみます。

ワークシートの A1:A5 の範囲を VBA でループする。
ワークシートの A1:A5 の範囲を VBA でループする。

目次まで戻る

取得

セルに入力されている値を VBA で取得する場合は、 Range オブジェクト » Value プロパティを使用するようです。

Excel VBA のコード :

Sub vba_001770_001() ' 1770 は当投稿の投稿 ID ですので、決まりではありません。
For Each rng In Range("A1:A5") ' rng は Range の略です。
Debug.Print rng.Value ' rng に Range オブジェクトがセットされるので、 Range の Value プロパティを取得できるようです。
Next
End Sub
' https://pulogu.net/blog/020-computer/excel-vba/worksheet-specified-range-loop-use-foreach/
' この URL 記載は、コピーライト的な意味ではなくて、このサンプルはどこのページに載っていたんだったか ? 。となった時の忘れた時のためです。私の場合、数が増えてくるとありますので。実際は End Sub まであれば動きます。

上の VBA のコードの中で、私が自由に変えているところは、以下の背景色を緑色に着色した部分です。その他の文字は、 VBA を組み立てる時の部品として決まっている文字のようです。上のコードの、シングルクオート( ' の記号)から始まる緑色の文字はコメントというもので、コードの中に書くことのできるメモ書きのようなものですので、動作に影響がありません。

Sub vba_001770_001()
For Each rng In Range("A1:A5")
Debug.Print rng.Value
Next
End Sub

2 行目の

For Each rng In Range("A1:A5")

の部分で、ループするセルの範囲を指定しています。 "A1:A5" だと、 A1 から A5 まで順にループします。 "A5:A10" だと、 A5 から A10 までループします。

ループのつど、 rng 変数に Range オブジェクトがセットされていくようです。ローカルウィンドウで確認してみますと、Range の文字があります。ローカルウィンドウは、変数の中身を確認できる便利な情報画面です。

rng 変数に Variant/Object/Range が設定されています。
rng 変数に Variant/Object/Range が設定されています。

rng 変数( = Range オブジェクト)の中の Value プロパティを見れば、セルに入力されている値を取得することができます。 Value プロパティを見てみましょう。

Value2 プロパティがあって、 Value プロパティが見当たりません。
Value2 プロパティがあって、 Value プロパティが見当たりません。

どうしてか、 Value プロパティがありません。 Value2 プロパティはあるのですが。いままで、 Value プロパティを、と連呼していたのが間違っていたのかもしれません。しかし、 Value プロパティで "A" という値を取得することはできました。この Value プロパティが入っていない理由は、わからないままです。

3 行目の

Debug.Print rng.Value

の部分で、イミディエイト ウィンドウという、一時的にテキストを出力できる場所に結果を出力しています。この結果は、 Excel を閉じるとなくなってしまいます。

イミディエイト ウィンドウに出力した結果は、以下のようになりました。

イミディエイトウィンドウに出力した結果。
イミディエイトウィンドウに出力した結果。
イミディエイトウィンドウに出力した結果。

イミディエイト ウィンドウに出力された結果 :

A
B
C
D
E

目次まで戻る

設定

セルに入力されている値を、新しい値に変更する場合は、 Range オブジェクト » Value プロパティに新しい値を設定するようです。読み取り専用のプロパティもあるようですが、 Value プロパティは、値の読み書きができるプロパティのようです。

Excel VBA のコード :

Sub vba_001770_002()
For Each rng In Range("A1:A5")
rng.Value = "X" '新しい値として X を設定しました。
Next
End Sub
' https://pulogu.net/blog/020-computer/excel-vba/worksheet-specified-range-loop-use-foreach/
' この URL 記載は、コピーライト的な意味ではなくて、このサンプルはどこのページに載っていたんだったか ? 。となった時の忘れた時のためです。私の場合、数が増えてくるとありますので。実際は End Sub まであれば動きます。

ワークシートの結果を確認してみると、以下の画像のようになりました。 A1:A5 の値が全て X に変更されています。

セルに新しい値を設定することができました。
セルに新しい値を設定することができました。

目次まで戻る

テスト環境

  • Windows 10
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

コメントを残す

  • わかる範囲でしかお答えできませんが、質問も大歓迎です。
  • * のついた項目は必須になります。
  • お名前が未入力の場合は「匿名」という名前で送信されます。
  • 投稿していただいたコメントは、当ブログ管理者の承認後に表示されます。全体的には、以下の流れになります。
    1. コメントを送信。
    2. このページに自動で戻ってきて何の変化もない状態です。
    3. 都度、管理者承認。
    4. コメントが表示されます。
*
コメント欄では、次の HTML タグと属性を使用することができます。 : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

同じカテゴリの投稿( Excel VBA )

前後の投稿