こんにちは、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