MOS VBAエキスパート対策 | セルの操作 | MOS Excel VBAエキスパート対策です



最終更新日:2018-03-02

セルの操作


・RangeとCells
・セルにデータを入力する
・セルのデータを取得する
・セルの書式設定


【ここでのポイント】

1つのセルまたはセル範囲を指定する方法は何通りもあります。

セルはExcelの基本中の基本ですので、VBAではいろいろな指定方法が用意されています。


複数の指定方法があるために覚える事を難しくしている面もあります。

しかし、セルをしっかりと理解せずにVBAを理解することはできません。

セルのいろいろな指定方法と、良く使われるプロパティ・メソッドを覚えて下さい。

ここの内容は、実に多くの内容を含んでいるため、試験勉強レベルで覚えきれるものではありません。
逆に考えれば、あまり細かいことは出題しづらいとも言えます。
公式テキストおよび以下で説明している部分を重点的に覚えるようにして下さい。


RangeとCells

セルはVBAではRangeオブジェクトです。

Rangeオブジェクトは、セルのオブジェクトであり、セルの集合体でコレクションでもあります。

ワークシートは、その数を増減できます。
1つのワークシートを表すオブジェクトとしてWorkSheetオブジェクトがあり、
集合体としてのコレクションがWorkSheetsコレクションとして用意されています。

対してセルはどうでしょうか。
シートのセルの数を増減させることはできません、行数も列数も一定です。
Rangeオブジェクトは、シート全体のセルの集合としてのコレクションになります。
そして、シート内の位置を指定することで、1つのセルや複数のセルを表すことができるようになっています。

シート内の、1つまたは複数のセル範囲を指定する方法がいくつも用意されています。

Range ・・・ 主に固定位置のセル範囲を指定する時に使います
Cells ・・・ 行、列を数値で指定できるので、変数でセル位置を変化させる時に使います
ActiveCell ・・・ アクティブセルです、ワークシートに1つのみ
Rows ・・・ 行全体
Columns ・・・ 列全体
UsedRange ・・・ ワークシートで使用されているセル範囲

RangeとCellsが最も良く使われるものなので、この2つはしっかり覚えて下さい。
その他は、使用頻度は低いのですが、どのセルを指定しているものかは覚えておく必要があります。


Range ・・・ 主に固定位置のセル範囲を指定する時に使います
1つのセルを指定
セル番地を"ダブルクォーテーションで囲んで指定します。

Range("A1")

セル範囲(複数のセル)を指定
:(コロン)で区切って、始点と終点を指定
Range("A1:C5")
A1からC5のセル範囲

,(カンマ)で区切って、始点と終点を指定
Range(始点セル, 終点セル)
Range("A1","C5")
A1からC5のセル範囲

"(ダブルクォーテーション)の中で、,(カンマ)で区切って飛び飛びのセルを指定
Range("A1,C5")
A1セルとC5セルになります。

行全体を指定
Range("1:1")
1行目全体

Range("1:5")
1から5行全体

Range("1:1","5:5")
1から5行全体

Range("1:1,5:5")
1行目全体と5行目全体

下の2つの指定は、普通は使う事はありません。
ですが、Rangeの指定方法を理解する意味で、いろいろなパターンを見ておいてください。

列全体を指定
Range("A:C")
AからC列全体

Range("A:A","C:C")
AからC列全体

Range("A:A,C:C")
A列全体とC列全体

名前定義で指定
Range("名前定義の名前")
名前定義で定義されたセル範囲

Cells
・・・ 行、列を数値で指定できるので、変数でセル位置を変化させる時に使います
行、列を数値で指定することで、1つのセルを指定します。

Cells(行, 列)

行は、縦の行位置です、1行目は1、10行目は10です。

列は、横の列位置です、A列は1、J列は10です。

列の指定については、"A"とか"J"とかの指定も可能です。

Cells(1, 1)
Cells(1, "A")

これは、A1セルになります。

Cells(5, 3)
Cells(5, "C")

これは、C5セルになります。
Range("C5")と比べると、行列の指定順序が逆になっています。

Rows
・・・ 行全体
数値で行数を指定することで、行全体を指定します。

Rows(行)

Rows(5)

これで、5行目の全体になります。

Rows("1:5")

と指定すれば、1〜5行の5行になります。

数値が1つだけの時は、"(ダブルクォーテーション)が不要です。

Columns
・・・ 列全体
数値またた列記号で指定することで、列全体を指定します。

Columns(列)

Columns(3)

これで、3列目、つまりC列の全体になります。

Cellsと同様に、

Columns("C")

でも指定できます。

複数列範囲の指定も可能です。

Columns("A:C")

これで、A列〜C列の3列の指定になります。

Rangeと他の組み合わせ
Rangeに、Cells、Rows、Columnsを組み合わせて使えます。

Range(始点セル, 終点セル)

この始点セル、終点セルに、
Cells、Rows、Columns
これらを使ってセル範囲を指定できます。

Range(Cells(1, 1), Cells(3, 5))
A1からE3セルになります。

Range(Rows(1), Rows(3))
1から3行め全体になります。

Rows(Columns(1),Columns(3))
AからC列全体になります。

ワークシートの指定

Range、Cells、Rows、Columns
これらだけの指定では、どのワークシートなのかの記述が省略されています。

本来は、ワークシートを指定して、
WorkSheets("Sheet2").Cells(2, 2)
このようにワークシートを指定するようにします。

複数ブックを扱う場合は、さらにブックも指定して、
WorkBooks("Book1.xlsm").WorkSheets("Sheet2").Cells(2, 2)

ワークシートを指定せずに、
Range、Cells、Rows、Columns
これらだけを指定した場合、どのシートのセルになるかがモジュールによって違ってきます。

標準モジュールでは、アクティブシートになります。
シートモジュールでは、記述したシートになります。


セルにデータを入力する

セルに値を入れる
セルに文字を入れる場合は、

Range("セルの番地") = "入れる文字"

文字は、"ダブルクォーテーションで囲みます。
数値は、そのまま記述します。

Range("B2") = "こんにちは"
Range("B3") = 123

これで、
B2セルに、「こんにちは」
B3セルに、「123
」と入ります。

セルは、色々な側面を持っています。
表示する文字、文字の大きさ、文字の色、背景色、罫線等々
セルの何を、どのようにしたいのか・・・
ここでは、セルの値に、文字を入れています。
値はValueであり、本来は、

Range("セル番地").Value = "文字"
 ↑           ↑     ↑
セル        の 値 に 文字を入れる。


のように書きます。

ただし、.Valueは、書かなくても良いのです。
つまり、Valueは省略時の既定のプロパティだということです。

値以外を扱う場合、例えば、文字の大きさを指定する時は、
Range("セルの番地").Font.Size = 11
このように、プロパティの指定が必要です。

セルはオブジェクト、Valueはプロパティです。

オブジェクト   のプロパティに値を入れる。
 ↓           ↓     ↓
Range("セル番地").Value = "文字"
 ↑           ↑     ↑
セル       の  値 に 文字を入れる。


RangeオブジェクトのValueプロパティに文字を入れています。

オブジェクト.プロパティ = 値

オブジェクト式の、プロパティの値の設定になります。

セルに数式を入れる
セルに値ではなく、数式(計算式)を入れることが出来ます。

数式を設定できるプロパティ
.Value
.Formula
.FormulaLocal
.FormulaR1C1
.FormulaR1C1Local

.Value
文字・数値をセルに入れる場合に使用してきましたが、
計算式も入れる事が出来ます。

A1セル = B1セル + C1セル

Range("A1").Value = "=B1+C1"

シートで入力する時と同様に、
先頭に=を付けて計算式を指定すれば良いです。

関数でも同じです。

A1セル = B1〜B10セルの合計

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

.Formula
.FormulaLocal
指定方法は、.Valueと同じです。

.FormulaR1C1
.FormulaR1C1Local
これが解りづらいかもしれません。

計算式をR1C1参照形式で指定します。

R1C1参照形式
セルの相対位置、つまり、計算式を設定しようとしているセルからの移動量を、
行位置をRに続けて記述し、列位置をCに続けて記述します。

R ・・・ Rの後に何も記述しない場合は同一行
C ・・・ Cの後に何も記述しない場合は同一列
R1 ・・・ Rの後に数値のみ記述した場合はその絶対行数
C1 ・・・ Cの後に数値のみ記述した場合はその絶対列数
R[1]・・・ Rに続けて[数値]とした場合は、数値行数分、行位置をづらした行
C[1]・・・ Cに続けて[数値]とした場合は、数値列数分、列位置をづらした列

これらを組み合わせて、計算式を設定するセルからの位置を指定します。

試験範囲として入っているのかどうか不明確です。
公式テキストには書かれていません。
少なくとも、ベーシックでは出題されないとは思いますが、
VBAをやっていく上では、いずれは覚えた方が良いものです。

例.C5セルに計算式を設定する場合

RC1 ・・・ A5セル
R1C ・・・ C1セル
R[1]C[2] ・・・ E6セル
RC[-1] ・・・ B5セル

Localについて
Localと付くものは、PC環境に依存する設定を有効にする場合です。

計算式ではそんなに多くはないですが、あるにはあります。

例えば、JIS関数を設定するなら、Localを使わないとエラーとなります。

それぞれの違い(Localは除く)
Range("A1").Value = "=B1+C1"
Range("A2").Formula = "=B1+C1"
Range("A3").FormulaR1C1 = "=B1+C1"
Range("A4").Value = "=RC[1]"
Range("A5").Formula = "=RC[1]"
Range("A6").FormulaR1C1 = "=RC[1]"

上記では、A3セルのみ正しく設定されません。
R1C1の場合は、R1C1参照形式で設定する必要がある訳ですが、当然ですね。

何故、こんなに多くのプロパティが存在しているのか
それは、設定する時ではなく、その設定された計算式を参照する時に使うからです。

以下の設定をした場合、
Range("A1").Value = "=B1+C1"

設定後に、それぞれのプロパティを参照すると、
Range("A1").Value ・・・ 計算結果の値
Range("A1").Formula ・・・ =B1+C1
Range("A1").FormulaR1C1 ・・・ =RC[1]

のように、参照結果が違ってきます。


セルのデータを取得する

セルのデータには、いくつかの側面があります。

セルに12345
と入れても、
表示形式によって、見た目は、
12,345
12345
千単位にしていれば、
12
という事もあります。

また、日付を入れた場合、
2018/2/20
見た目は、
2018/2/20
2018/02/20
2018年2月20日
等々、表示形式によって見た目はかなり違ってきます。
さらに、表示形式が標準や数値の場合には、
43151
と表示されている場合もあります。

さらに、上で説明したように、計算式を取得することもできます。

データを取得するプロパティ
セルのデータ(値)を取得するプロパティとして、以下の3つがあります。
Value
Value2
Text

ValueとValue2の違いは、
Value2プロパティでは、通貨型 (Currency) および日付型 (Date) のデータ型を使用しない点のみが、Value プロパティと異なります。
値を、倍精度浮動小数点型 (Double) をで返します。

Textは、
セルの見た目を文字列として返します。
Textプロパティは、読み取り専用です。

表示形式が"m"月"d"日"のセルに
2018/2/20
と入っている場合、

Valueは、2018/2/20 ・・・ 日付型として取得されます。
Value2は、43251 ・・・ 倍精度浮動小数点型 (Double) で取得されます。
Textは、2月20日 ・・・ 文字列型で取得されます。


セルの書式設定

セルの書式には、
・表示形式
・配置
・フォント
・塗りつぶし
・罫線

これらがあります。



それぞれに複数のプロパティがありますので、
全てのプロパティとその設定値を覚えることはかなり大変なことです。
ですが、全てを覚えることはありませんが、一通りどのようなものがあるかくらいは見ておきましょう。

第31回.セルの書式(表示形式,NumberFormatLocal)
第32回.セルの書式(配置,Alignment)
第33回.セルの書式(フォント,Font)
第34回.セルの書式(塗りつぶし,Interior)
第35回.セルの書式(罫線,Border)

試験対策としては、
表示形式、フォント、塗りつぶし
このあたりの、良く使われる基本的な設定くらいで良いのではないかと思います。

必須として覚えておくこと
Range("A1").NumberFormat = "#,###"
Range("A1").NumberFormat = "#,##0"
Range("A1").NumberFormat = "yyyy/mm/dd"
Range("A1").NumberFormat = "@"

Range("A1").Font.Size = 14
Range("A1").Font.Bold = True
Range("A1").Font.Color = vbRed

Range("A1").Interior.Color = vbRed

このくらいが、先に書いたページを参考に理解できていれば十分だと思います。


Rangeオブジェクトの、その他のプロパティ、メソッド

Rangeオブジェクトには、多数のプロパティ、メソッドがあります。
Rangeのプロパティ一覧
Rangeのメソッド一覧

とても、全てをおぼえられるものではありません。
以下では、良く使われるもの、試験に出る可能性のあるものを選びました。
詳細説明は、マクロVBA入門の各ページをお読みください。

Addressプロパティ

Offsetプロパティ

Resizeプロパティ

Activateメソッド
Selectメソッド

Clearメソッド
ClearContentsメソッド

Copyメソッド
Cutメソッド

Deleteメソッド
Insertメソッド

上記以外にも、多くの重要なプロパティ、メソッドが多数ありますが、試験に出る可能性は低いと思います。


【業務改善の実務】

業務改善の実務では、最も重要な部分と言っても良いでしょう。

Rangeオブジェクトのプロパティ、メソッドをいかに使いこなせるかにかかっていると言っても良いでしょう。
しかし、だからこそ奥が深く難しいという事になります。
VBAを一通り覚えた後は、
Rangeオブジェクトのプロパティ、メソッドをすこしずつ増やしていくことで、VBAスキルアップをしていってください。

先にも書きましたが、試験対策としては出題されそうな部分を重点的に覚えれば良いのですが、
実務としては、どのような事ができるかを広く知っておくことのが重要です。
実務は試験ではないので、分からないことは必要な時に調べれば良いのです。
しかし、そもそも何が出来るかを知らなければ調べようともしなくなってしまいます。

VBAでは、手作業で出来ることは全てできます。
従って、そもそものExcelの操作全般をしっかり覚えることが最優先です。
操作できるのなら、自動記録でVBAコードは調べることが出来るからです。


【本サイト内の関連ページ】





同じテーマ「MOS VBAエキスパート対策」の記事

マクロの記録
VBAの構文
変数と定数
セルの操作
ステートメント
ブックの操作
シートの操作
デバッグデの基礎
マクロの実行
VBAベーシック試験対策まとめ
プロシージャ

新着記事 ・・・新着記事一覧を見る

エクセルVBAでのシート指定方法|VBA技術解説(9月8日)
VBAのクラスとは(Class,Property,Get,Let,Set)|VBA技術解説(8月28日)
VBAこれだけは覚えておきたい必須基本例文10|VBA技術解説(8月22日)
VBAの省略可能な記述について|ExcelマクロVBA技術解説(8月11日)
複数条件判定を行う時のコツ|ExcelマクロVBA技術解説(7月11日)
For Next の使い方いろいろ|VBA技術解説(6月14日)
VBAを定型文で覚えよう|ExcelマクロVBA技術解説(3月26日)
VBAスタンダード試験対策まとめ|MOS VBAエキスパート対策(3月16日)
ユーザーフォームとメニューの操作|MOS VBAエキスパート対策(3月14日)
ファイルの操作|MOS VBAエキスパート対策(3月14日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数とデータ型(Dim)|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.定数と型宣言文字(Const)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.とにかく書いて見よう(Sub,End Sub)|VBA入門
9.繰り返し処理(For Next)|ExcelマクロVBA入門
10.ひらがな⇔カタカナの変換|エクセル基本操作




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。





このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

本文下部へ

↑ PAGE TOP