- 指定のセルを取得
- 指定したセルから値を取り出す
- 指定したセルに値を代入
- 指定したセルの値をクリア
- 指定したセルの値、文字色、背景色、枠線をクリア
まずは特定のセルを取得する
具体的な方法
セルから値や色、書式などの情報を取得するためには
「セルを取得」する必要があります。

例えば、A2セルを取得する方法です
セルを取得する方法は下記のいずれか
- 【ブック名.シート名.】Range (“A2”)
- 【ブック名.シート名.】Cells(2, 1)
- 【ブック名.シート名.】Cells(2, “A”)
【ブック名】【シート名】は省略可
ただし、推奨はしません
実際にコーディングしてみましょう。
A2セルの値を取り出しています。
Sub test()
Debug.Print ThisWorkbook.Worksheets(1).Cells(2, 1).Value
'>>リンゴ
End Sub
説明
Debug.Printについて
イミディエイトウインドウという
プログラムの途中経過を確認するための場所があるのですが、
そのウインドウに表示させるためのプログラムです。
Thisworkbook
このプログラムを書いているブックのことを指します。
WorkSheets(1)
指定したブックのうちのシートの一番目のことです。
Cells(2, 1).Value
A2のセルを指定し、 「.Value」でA2の値を取得しています。
注意
ブック⇒シート⇒セルという順番で指定していきます。
ブックとシートは省略できます。
省略すると直前まで操作をしていたブックやシートを自動で指定してくれます。
意外にこれを言っているブログや書籍は少ないのですが(個人的にはかなり不思議)、
かなり大事です。
体験談
私も最初はブック、シートを指定せずにコードを書いていました。
しかし、大きなシステム、
例えばシート間やブック間で処理のやり取りをしだすと
予期せぬエラーが多発するようになり、収集が効かなくなりました。
狙っていたシートのセルではなく、
別のシートのセルを取得していたのです。
それからは必ずブックとシートは指定するようにしています。
書くのが面倒だと思いますので
ブックやシートは変数に入れる
With文をうまく使う
などで効率的にコーディングすることをお勧めします。
複数のセルを取得するには

例えば、A1~D6まで
表の範囲全部を取得したい場合
- Range (“A1:D6”)
- Range(Cells(1, 1), Cells(6, 1))
- Range(Cells(1, “A”), Cells(6, “D”))
【ブック名.シート名.】は省略可
A1~D6までの値を全て
“変更”に変えてみます。
※ブック名、シート名は省略しないことを推奨しています。
ただし、そうすると非常に長くなるので
With文を使ってすっきりさせて書いてみます。
Sub test2()
'Rangeを使う場合
With ThisWorkbook.Worksheets(1)
.Range("A1:D6").Value = "変更"
End With
'Cellを使う場合はこんな感じ
With ThisWorkbook.Worksheets(1)
.Range(.Cells(1, 1), .Cells(6, 4)).Value = "変更"
End With
End Sub

特にcellsを入れて使う場合は冗長になりますね。
指定されたセルの値
セルの値の取得
指定したセル.Value

例えばA2(リンゴと入力されている)の値を取得するためには
Sub test()
Debug.Print ThisWorkbook.Worksheets(1).Cells(2, 1).Value
'>>リンゴ
End Sub
注意:複数一気に取得はできない
基本的にはセルの値は単一のセルからしか取得できません。
複数のセルを取得するためには
最低限For文の知識が必要になります。
最後に応用編として
複数のセルの値を取得する方法をご紹介しますので、
見てみてください。
セルに値を代入(単一のセル、複数範囲のセル)
指定したセル.Value = 「値」
Sub test3()
'単一のセルに値を入れる場合は、単一のセルを指定
ThisWorkbook.Worksheets(1).Cells(10, 1).Value = "ここはA1"
'複数のセルに入れるには複数のセルを指定するだけ
With ThisWorkbook.Worksheets(1)
.Range(.Cells(12, 1), .Cells(15, 3)).Value = "A12~C15"
End With
End Sub

セルの値を削除・クリア(単一、複数範囲)
セルの値だけをクリア
色や背景色、枠線は消えさず、セルの値だけをクリアしたい場合です。
指定したセル.ClearContents

Sub test4()
'単一の場合
ThisWorkbook.Worksheets(1).Cells(2, "A").ClearContents
'複数の場合
With ThisWorkbook.Worksheets(1)
.Range(.Cells(5, "A"), .Cells(8, "B")).ClearContents
End With
End Sub
文字だけ消せました

セルの文字色、背景色、枠線、値をクリア
セルの値だけでなく、文字の色や背景色をクリアしたい場合
指定したセル.Clear

Sub test5()
'単一の場合
ThisWorkbook.Worksheets(1).Cells(2, "A").Clear
'複数の場合
With ThisWorkbook.Worksheets(1)
.Range(.Cells(5, "A"), .Cells(8, "B")).Clear
End With
End Sub
文字も色も、枠線も消えました。

応用
指定した複数のセルの値をFor文を使って取得する
複数のセルの値を一発で取得する方法はありません
取得するためにはFor文を使ってセル一つずつ値を取得していきます。
Sub test7()
'プログラムが複雑になったら積極的に変数を使いましょう
'圧倒的にコードが分かりやすくなります。
Dim r As Range
Dim Rng As Range
Set Rng = ThisWorkbook.Worksheets(2).Range("A2:A6")
'For文を使いセル一つずつ値を取り出す
'これが基本
For Each r In Rng
Debug.Print r.Value
Next
End Sub

プログラミングの基本的な考えで
一つの処理ができるようになったら、
同じ処理をちょっとずつ条件を変えて処理をする
というものがあります。
今回もセルの値を取得することはできたので
セルを一つずつ代えて同じ処理をしていけば
目的のセルの値全てを取得することができます。
配列に格納してみる
ちなみにですが、上記のコードだと
ただ、イミディエイトウインドウに表示させただけです。
本来取得した値は何か別の目的(例えば別シートに転記とか)
に使うと思います。
そこで配列に格納して使いやすい形にしてみましょう。
Sub test7()
'プログラムが複雑になったら積極的に変数を使いましょう
'圧倒的にコードが分かりやすくなります。
Dim r As Range
Dim Rng As Range
Set Rng = ThisWorkbook.Worksheets(2).Range("A2:A6")
'まとめて何かに使用する場合は配列に格納させる
'配列は少し不親切なので当サイトで作ったオリジナル関数を使って分かりやすくしてます。
Dim arrs As Variant
For Each r In Rng
Call add_Elm(arrs, r.Value)
Next
End Sub

上記のコードを動かすためには
当サイトで紹介しているオリジナル関数の
add_Elm関数とIs_correct_array関数が必要です。
なぜ関数を作っているかというと
VBAの配列はかなり不親切なつくりになっているからです。
コードはこんな感じです。
Function add_Elm(ByRef arrs As Variant, ByVal elm As Variant)
Dim num As Long
'Is_correct_array関数で配列がエラーを起こす空の状態かどうか判定
'エラーを起こす空の状態
If Not Is_correct_array(arrs) Then
'要素数が一つ=「0」で宣言
ReDim arrs(0)
arrs(0) = elm
'エラーを起こす空の状態ではない
Else
num = UBound(arrs)
ReDim Preserve arrs(num + 1)
arrs(num + 1) = elm
End If
End Function
Function Is_correct_array(ByVal arrs As Variant)
Dim a As Long
'なんでもいいが、エラーを生じさせる
On Error GoTo err
a = UBound(arrs)
'エラーが生じたときエラー番号で9か13の場合はFalse
err:
If err.number = 9 Or err.number = 13 Then
Is_correct_array = False
Else
Is_correct_array = True
End If
End Function
add_Elm関数の使い方はこちら
Is_Correct_array関数の使い方はこちらです。
他にも配列を便利に使いやすくする関数を作っています。
まとめ
いかがでしょうか。
- セルを指定する方法
【ブック名.シート名.】Range (“A2”)
【ブック名.シート名.】Cells(2, 1)
【ブック名.シート名.】Cells(2, “A”) - セルを指定する際はブックとシートは極力省略しない
- セルの値を取得
指定したセル.Value - セルに値を代入
指定したセル.Value = 「値」 - セルの値だけをクリア
指定したセル.ClearContents - セルの文字色、背景色、枠線、値をクリア
指定したセル.Clear
VBAの学習方法をまとめました。

VBAを高コスパで、短期間で学ぶにはUdemyがおすすめです。
Udemyは良質の学習プラットフォームですが、
動画数が多すぎてどれを見ればよいか迷います。
おすすめの講師をまとめました。

ブログ村ランキング参加中です。よかったらフォローお願いします!!
