パソコン活用研究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

このマクロを実行すると下のような感じです。空白セルは赤で表示されます。

 
    1     
    2  
    3  
      
    5  
      
    7  
   
   


(1)のSpecialcellsでは最後に使われたセルを取得しています。
SpecilaCells(xlLastCell)はEndメソッドと似ていますが、正確に言うと、終端セルではなく、最後に使用
されたセルを返す点が異なります。下の例を見て下さい

 
    1     
    2  
    3  
    4  
    5  
    6  
    7  

ここで、A6,A7セルの内容を削除します。この状態で、A列にSpecialCells(xlLastCell)とEndメソッドを
使用すると、SpecilaCells(xlLastCell)はA7を返し、EndはA5を返します。すなわち、
SpecialCells(xlLastCell)を使うと、削除されていても、一度でも使用されたセルはチェックされるという
ことです。この両メソッドはうまく使いわけて下さい。もちろん、削除されたセルがなければ、両メソッド
は同じような働きをします

 
    1     
    2  
    3  
    4  
    5 <−−Endが指すセル
      
     <−−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活用研究目次