パソコン活用研究5番街(Visual Basic、Excel(VBA)、BASIC プログラミング研究)
セル関連基本マクロpart2
1 セルの表示形式
2 文字のフォントと色
3 セルに色をつける
4 セル、行、列の削除
5 セルの内容の削除
6 セルの内容のコピー
7 特定のセルのみ選択して処理
1 セルの表示形式
セルのプロパティで値を表すValue と並んでよく使うのは、セルの書式(表示形式)を表す
NumberFormatプロパティでしょう。
EXCELのメニューを[書式]−[セル]とたどると書式設定のダイアログがでてきますが、表示形式タブの
分類ボックスから[ユーザー定義]を選択した時に「種類」ボックスに表示される文字列が、このプロパティ
です。たぶん「G/標準」とか「yy/mm/dd」とか表示されていると思います。
表示形式の設定例
Worksheets("sheet1").Cells(1,1).NumberFormat="G/標準"
Workseets("sheet1").Range("C5").NumberFormat="hh:mm:ss" '時刻の表示形式
アクティブセルの表示形式をメッセージボックスに表示するマクロ
Sub ShowFormat()
MsgBox "Format" + ActiveCell.NumberFormat
End Sub
このNumberFormatプロパティを、よく使うと先に書きましたが、後述のセルの内容のコピーで
むしろ重要になります。
2 文字のフォントと色
本当にValue と並んでよく使うのは、おじさん個人的には、文字のフォント変更や色を指定するプロパティ
です。
あるデータ目立たせたいなら、文字を太字にしたり、下線をつけたり、色をつけたりするのが一番ですから、
これらのプロパティは利用頻度が高いものばかりです。
<主なプロパティ>
プロパティ | 機能 | 使用例 |
Font.Bold | 太字で表示 | Activecell.Font.Bold = True |
Font.Color | 文字に色をつける | Activecell.Font.Color = RGB(255,0,0) |
Font.Italic | 斜体で表示 | Activecell.Font.Italiv = True |
Font.Name | フォントの種類 | Activecell.Font.Name ="MS 明朝" |
Font.Size | フォントサイズ | Activecell.Font.Size = 12 |
Font.UnderLine | 下線をつける | Activecell.Font.UnderLine = xlSingle |
RGBによる色の指定
色の指定の方法はいくつかありますが、RGB関数を使用する場合は以下のように指定します。
RGB(赤、緑、青) それぞれの色の引数は0から255を指定します
ちなみに代表的な色は下記のとおり
黒 RGB(0,0,0)
黄色 RGB(255,255,0)
灰色 RGB(127,127,127)
白 RGB(255,255,255)
また、色の指定にはColorIndexプロパティもあります。1から56までを指定します。
Activecell.ColorIndex = 1
UnderLineプロパティで下線は xlSingle、 二重下線は xlDouble です
なお、複数のプロパティを変更する時はWith
・・・・ End
With を使った構文にすると簡単に記述できます。
アクティブセルのフォントサイズ14、太字で、文字色は赤にする。
With Activecell.Font
.Size = 14
.Bold = True
.Color = RGB(255,0,0)
End With
3 セルに色をつける
セルの内部を表すオブジェクト(Interiorオブジェクト)を表すには、Interiorプロパティ を使います。
セル内部にいろをつける(赤)
Activecell.Interior.Color= RGB(255,0,0)
セルの枠線を表すオブジェクト(Borderオブジェクト)を表すにはBordersメソッドを使います。
セルの枠線を赤にします
Activecell.Borders.Color = RGB(255,0,0)
ある範囲のセル(A1からC3)までに色をつける(赤)
Worksetts("sheet1").Range(Cells(1,1),Cells(3,3)).Interior.Color
= RGB(255,0,0)
ついでにBASIC流
For i=1 to 3
For k=1 to 3
Workseets("sheet1").Cells(i,k).Interior.Color =
RGB(255,0,0)
Next k
Next i
4 セル、行、列の削除,挿入
オブジェクトの削除、挿入を行うメソッドは、Delete, Insert です。
簡単なので、例を見てください。
なお、セルの削除(Delete)では、削除後に、他のセルをどうつめるか、方向を指定(xlToLeft,xlUp)で
きます。
方向の指定はDeleteの後に引数として記述します。
同じくセルの挿入(Insert)では挿入後、他のセルをどの方向に移動するか(xlToRight,xlDown)指定
できます。引数の記述はDeleteと同様
Sheet1の行3の前に新しい行を挿入
Worksheets("sheet1").Rows(3).Insert
Sheet1のB5セルを削除し、右側のセル(C5)を左にシフトしてつめる
Worksheets("sheet1").Range("C5").Delete
xlToLeft
5 セルの内容の消去(クリア)
セルの内容の消去には以下の3つのメソッドがあります
セルのデータと書式をともにクリアする Clear
セルのデータだけクリアする ClearContents
セルの書式だけクリアする ClearFormats
アクティブセルの内容をクリアする
Activecell.Clear
6 セルのコピー
(1) 代入によるコピー
セルA2にセルA1の内容をコピーするには
Worksheets("sheet1").Range("A2").Value
= Worksheets("sheet1").Range("A1").Value
のようにすれば、O.K.です。
ただし、ひとつ忘れてならないのは、これはセルの値(Value)をセルA2に代入しているだけなので、
書式はコピーされていません。セルA1とA2に違う書式が設定されていたら、実際の表示は違ったもの
になってしまいます。
書式もいっしょにコピーしたいなら、前述のNumberFormatプロパティを使います。
書式をコピーします
Worksheets("sheet1").Range("A2").NumberFormat
= Worksheets("sheet1").Range_
("A1").NumberFormat
(2) COPYメソッド
COPYメソッドを使うとセルの内容も書式もいっしょに、コピーできます。
コピー先の指定には 引数として destination:= と記述します。
destination を省略すると、クリップボードへコピーされます。
Sheet1のセル範囲A1:B2をSheet2のE5に(E5:F6の範囲に)コピーするマクロ
Sub rcopy()
Worksheets("sheet1").Range("A1:b2").Copy
destination:=Worksheets("sheet2").Range("e5")
End Sub
7 特定のセルのみ選択
ある特定のセルのみ選択して、処理をしたい場合があります。
ある特定のセルだけを選択して処理するというのは、表計算ソフトであるEXCELで一番必要とされる
機能ではないでしょうか。それだけに、「ある特定」という選択のための条件は、千人千色、いろんな条件
が考えられます。
全てを語りつくすことは、到底できないことですので、基本的な所だけ例をあげてみます。
(1) 一般的なやり方
A列の終端セルをチェックし、その間で空白のセルに”**Null**”を入力するマクロ
Sub isNull()
x% =
Worksheets("sheet1").Range("A65536").End(xlUp).Row
For i = 1 To x%
If Worksheets("sheet1").Cells(i, 1).Value =
"" Then Worksheets("sheet1").Cells(i,
1).Value =_
"**Null**"
Next
End Sub
A列の終端セルをチェックし、その間のセル10以上の数値のセルは赤字で表示する
(ただし、このマクロはセルに数値以外のものが入力されているとエラーになります)
Sub red()
x% =
Worksheets("sheet1").Range("A10000").End(xlUp).Row
For i = 1 To x%
If Worksheets("sheet1").Cells(i, 1).Value >=10 Then
Worksheets("sheet1").Cells(i, 1).Font._
Color = RGB(255,0,0)
Next
End Sub
(2) Specialcellsの使用
空のセル、数値の入力されているセル、数式の入力されているセルだけを選択したい、というような時に
重宝するのが、Specialcellsメソッドです。
機能を言葉で表現すると、「指定した条件を満たす全てのオブジェクトを返すメソッド」ということになります
EXCELのVBAに慣れていないと、なんのことかわかりにくいと思いますので、実例を見てください
構文 | RangeObject.Specialcells(Type,Value) Typeの指定文字列 xlConstants 数値、文字列などの定数 xlFormulas 数式 xlBlanks 空白セル xlVisible 可視セル xlLastCell 使用された最後のセル Valueの指定文字列 xlNumbers 数値 xlTextValues 文字列 xlLogical 論理値(True,False) xlErrors エラー値 ただし、ValueはTypeでXlConstantsかxlFormulasが指定された時のみ使います |
A列の終端セルを取得し、その行数をメッセージボックスに表示した後、その間のすべての空白セルを
赤にするマクロ
Sub blank2red()
x% =
Worksheets("sheet1").Columns(1).SpecialCells(xlLastCell).Row '---(1)
MsgBox "LastRow" + Str(x%)
Worksheets("sheet1").Columns(1).SpecialCells(xlBlanks).Interior.Color
= RGB(255, 0, 0) '-(2)
End Sub
このマクロを実行すると下のような感じです。空白セルは赤で表示されます。
A | B | |
1 | 1 | |
2 | 2 | |
3 | 3 | |
4 | ||
5 | 5 | |
6 | ||
7 | 7 | |
8 | ||
9 |
(1)のSpecialcellsでは最後に使われたセルを取得しています。
SpecilaCells(xlLastCell)はEndメソッドと似ていますが、正確に言うと、終端セルではなく、最後に使用
されたセルを返す点が異なります。下の例を見て下さい
A | B | |
1 | 1 | |
2 | 2 | |
3 | 3 | |
4 | 4 | |
5 | 5 | |
6 | 6 | |
7 | 7 |
ここで、A6,A7セルの内容を削除します。この状態で、A列にSpecialCells(xlLastCell)とEndメソッドを
使用すると、SpecilaCells(xlLastCell)はA7を返し、EndはA5を返します。すなわち、
SpecialCells(xlLastCell)を使うと、削除されていても、一度でも使用されたセルはチェックされるという
ことです。この両メソッドはうまく使いわけて下さい。もちろん、削除されたセルがなければ、両メソッド
は同じような働きをします
A | B | |
1 | 1 | |
2 | 2 | |
3 | 3 | |
4 | 4 | |
5 | 5 | <−−Endが指すセル |
6 | ||
7 | <−−SpecialCellsが指すセル |
(2)はA列の空白セルのセル内部の色を赤にしています。
同じように、Type,Valueをそれぞれ設定すれば、数式の入っているセルだけ色をつけるとか、
いろいろできるわけです。
また、上の例ではColumns(1)としてA列のセルをチェックしましたが、
Cellsというオブジェクトを使えば、そのシートのセル全部をチェックすることができます。
Sheet1の全セルで空白セルのセル内部の色を赤にする
Worksheets("sheet1").Columns(1).SpecialCells(xlBlanks).Interior.Color
= RGB(255, 0, 0)
さて、またまたずいぶん盛りだくさんの内容となってしまいました。
非常に実用的なところでは、ある列の終端セルを調べ、その列で空白セルの行は削除するというような
マクロがあります。これについては、「実戦編/セル関連マクロ」で取り上げたいと思います
TopPage > Visual BasIc&Excel活用研究目次