【VBA】セル操作(選択/色/クリア/コピー/値を代入など)

こんにちは、Ryoです。
VBAと言えば何は無くともセル操作が必ず発生しますので、文字色を変えたい/塗りたい/
クリアしたい/位置を選択したい/コピーしたい/値を入れたい。。。などが主にやりたい
こととして出てくるのではないでしょうか。

今回はそのセル操作に対して、主に使用頻度が高いと思われる基本的な内容を例を交えて
ご紹介したいと思います。



1.セルを選択する

◆Cells

セルの位置をVBAで指定する場合、主に使われるのは

Cells(Rows , Columns).Select

Rowは「行」番号、Columnは「列」番号を指定します。
基本的にセルを単体で指定する場合やVBAで処理上、位置を変えていきたい時も
この「Cells」を使うことが多いです。

この図で選択している「D8」セルを選択する場合は、Cells(8,4).Select と指定します。
A列から1,2…と数えていきますので、Dは4番目ということです。
又はCells(8 , “D”).SelectでもOKですので、用途に応じて使い分ければ良いと思います。

◆Range

このRangeもCellsと同様の使い方を出来るので、Cellsの例で「D8」を選択する場合、

  Range(”D8").Select

これでD8セルを選択してくれます。

Rangeは言葉通り「範囲」を選択する目的で使用することが多いので、例えばB3からC8を
選択したい場合に

  Range("B3 : C8").Select

このように指定します。
ただ、VBAで処理する場合にセルを指定して選択するというよりは、変数を使って
指定しますのでRangeのみを使うと

 Range("B" & i & ":" & "C" & j ).Select '・・・iとjは変数

こんな形になり使いにくいのと、見ての通り「美しくない」ですよね。
それに対しCellsを使うと、

  Range(Cells(i , "B"),Cells(j , "C")).Select

この通りスッキリしますので、変数を使って処理する上ではCellsを使うと良いと思います。

2.セルの色、文字の色を変える

◆セルの色

例えば合否判定などの処理を行った際に、OKは青でNGは赤のようにセルを塗りつぶしたい
場合は以下の様に指定します。

  Cells(1,1).Interior.Color = RGB(0, 0, 255)  'A1を青色

  Cells(2,1).Interior.Color = RGB(255, 0, 0)  'A2を赤色

セルに色を塗る場合はRGB関数を使い、Cells(*,*)の後ろに.Interior.Colorで指定します。
他にはInterior.ColorIndexを使う方法もありますが、私は色の調整がしやすいRGBを
使うことが多いです。

   Cells(1,1).Interior.ColorIndex = 5  '青色

   Cells(2,1).Interior.ColorIndex = 3 '赤色

これはExcelで持つ「色パレット」に準じた番号なので、赤3緑4青5」「黒1白2
これだけ覚えとけば良いんじゃないかなーと個人的には思います。
その他の色はRGBで調整しながら自身納得のカラーで(笑)

ちなみに上で紹介したRangeで範囲指定して同じように色指定すれば、その範囲を塗ります。

◆文字の色

文字の色を変える場合もセル同様RGB関数、又はFont.ColorIndexを使います。

  Cells(1,1).Font.Color = RGB(0, 0, 255) 'セルA1の文字を青色

  Cells(2,1).Font.Color = RGB(255, 0, 0) 'セルA2の文字を赤色

Font.ColorIndexでは、

  Cells(1,1).Font.ColorIndex = 5 '文字を青色

  Cells(2,1).Font.ColorIndex = 3 '文字を赤色

このように指定します。
色パレットはセルと同様ですので、赤3緑4青5」「黒1白2を覚えていれば
良いかと思います。

参考までに「太字」にしたい時は.Font.Bold = Trueなので、色指定とは別に

  Cells(1,1).Font.Bold = True

こうすれば太字になります。

3.セルのクリア

主に使うものとして以下4点ですね。

Clear ・・・ 全クリア

ClearContents・・・数式、文字列のクリア

ClearFormats・・・書式のクリア

ClearComments・・・コメントのクリア

基本的な使い方は、これまで同様でCells(*,*).Clearの様になります。

  Cells(1,1).Clear 'セルA1のクリア

  Cells(2,1).ClearContents 'セルA2の数式、文字列クリア

  Range(Cells(1,1),Cells(2,1)).ClearFormats  'セルA1~A2の書式クリア

  Cells.ClearComments ’アクティブシートの全セルに対しコメントをクリア

ちなみにClearを使って消してしまったらアンドゥ機能は使えませんので、ご注意を!
Cells.Clearのような指定をすると、その時に開いているSheet(アクティブシート)の
全範囲を対象としますから便利ですが、間違うと「…….」となりますから。。。

4.セルのコピー

セルをコピーして貼り付ける場合は以下の通りになります。

  Cells(1,1).Copy Destination:=Cells(2,1) 'セルA1をセルA2にコピー

  Range(Cells(1,1),Cells(2,1).Copy Destination:=Cells(5,1) 'セルA1~A2をA5に

このように単独セルや範囲に.Copy Destination:=コピー先と指定します。
コピー元は範囲を指定しますが、コピー先は手動でやる場合と同様で開始位置の指定です。
このDestination:=は省略も可なので、

  Cells(1,1).Copy Cells(2,1)

でもOKですが、あまり省略して書くことは無いですね。
何故なら、なんとなくかっこ悪いからという個人的な理由です(笑)

5.セルに値を代入

セルに値を代入する場合もこれまで同様でCellsやRangeを使います。
例えばセルA1に999の数字を入れるなら

  Cells(1,1).Value = 999

これでOKですが、.Valueは省略しても特に問題ないです。
文字であればダブルクォーテーションで囲むので、文字がABCなら

  Cells(1,1) = "ABC"

このようになります。

Rangeを使って範囲を指定すると、指定した範囲全てに指定したデータを代入します。

  Range(”A1:A5") = 123

こうするとA1からA5までのセルに123の数字が入力されます。
場合によっては123という数字を0123の様にしたいこともあるかと思います。
この場合にCells(1,1) = Format(123,”0000″)としても、結果は123のままになるので、

  Cells(1, 1).NumberFormatLocal = "0000"

  Cells(1, 1) = 123

このように記述すると、セルA1に0123という書式で数値が入力されます。




以上がセル操作色々になりますが、基本的な部分なのでそれほど難しくありませんし
すぐに活用できると思います。
今回の記事はここまで!何かの参考になれば幸いです。

Ryo

スポンサーリンク
スポンサーリンク

楽天トラベル

シェアする

フォローする

スポンサーリンク

楽天トラベル