セルとシートの操作(Excel VBA入門)
音声
目次
セルの値の読み書き(Value、Text、Value2の違い)
今回できるようになることとして、セルから値を取り出して書き戻す基本操作と、Value・Text・Value2の使い分けが理解できるようになります。最小マクロ:以下はワークシートのA1に値を書き、B1の表示(文字列)を読み取る例です。貼り付け場所:標準モジュールに入れてください。
Sub 最小マクロ_値の読み書き()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
ws.Range("A1").Value = 123 ' 値を書き込む(Valueは型変換あり)
ws.Range("A2").Value2 = 123.0 ' Value2は日付の特殊扱いがない高速な値
ws.Range("B1").Value = "テキスト"
MsgBox "B1の表示: " & ws.Range("B1").Text ' Textは表示形式での文字列
End Sub
Valueはセルの「値」を返し、表示形式に影響されて自動で型変換される場合があります。Textは画面に見えている文字列(セルが編集モードでないと正しく取得)を返し、Value2は日付の特殊扱い(Variant/Dateの差)を避けたい時に使います。
実行方法は、VBEでマクロを選んでF5、またはボタンに割り当てて実行できます。確認方法は、A1/A2/B1の中身と表示が期待どおりかを見るか、MsgBoxで確認してください。
使い分けの基準は、計算に使う数値はValueまたはValue2を選び、Value2は日付に関わる不具合を避けたい時に向いています。表示そのまま取りたい時はTextを選びます。
セルの書式設定(Font、Interior、Borders)
セルの見た目はVBAからFont(フォント)、Interior(塗りつぶし)、Borders(罫線)で操作できます。
書式は値そのものではなく見た目を変えるため、値の処理と分けて考えることが大事です。
例えば太字・色・背景・罫線を設定する簡単な例を次に示します。
Sub 書式設定_例()
With ThisWorkbook.Sheets(1).Range("C1")
.Value = "見出し"
.Font.Bold = True
.Font.Size = 12
.Interior.Color = RGB(230, 230, 250) ' 背景色
.Borders(xlEdgeBottom).LineStyle = xlContinuous
End With
End Sub
セル全体や個別プロパティを指定することで、業務で見やすい表にできます。
書式設定は目に見えるため、作業後に印刷やPDF化したときの見栄えも確認してください。
よくあるミスとして、セルを書式だけ変えたいつもりが.Valueで値を書き換えてしまうことがあります。
元の値が消えるため、Value操作は慎重に行ってください(直し方は一つ前の保存ファイルからリロードするか、Undoが使えるうちに戻します)。
行・列の挿入と削除
行・列の追加や削除は、RangeのInsert/Deleteメソッドで行います。
行を挿入すると下のデータが下にずれるため、参照先の固定(Named Rangeやテーブル)を使うと安心です。例として2行目を挿入し、見出しを入れるコードを示します。
Sub 挿入削除_例()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
ws.Rows(2).Insert Shift:=xlDown
ws.Rows(2).Range("A1").Value = "新しい行"
' 列の削除は ws.Columns(3).Delete のようにします
End Sub
行列操作は他のシートや外部参照に影響するので、実行前に保存(.xlsmで保存)してから行うことをおすすめします。
- 実行方法は、マクロ実行やボタン割り当てで行えます。
- 確認方法は、挿入後に行番号とデータの移動を確認してください。
セルのコピー・貼り付け(Copy、PasteSpecial)
コピーはCopyメソッド、貼り付けの細かな制御はPasteSpecialで行います。値のみ、書式のみ、列幅のみ、数式付きなどを選べます。次は値のみを別の範囲に貼り付ける例です。
Sub コピー貼付け_値のみ()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
ws.Range("D1:D10").Copy
ws.Range("E1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
CopyとPasteSpecialはクリップボードを使うため、途中でユーザーのコピー操作が入ると期待どおり動かないことがあります。可能であれば、配列で値を取得してから代入する方法も検討すると、高速で安定します。
貼り付け場所は、コード内のRangeで指定するか、ActiveSheetに貼るかを明示してください。使い分けの基準は、単純な値移動はPaste:=xlPasteValuesを使い、書式も含めて移したいときはxlPasteAllを使います。
セルのクリア(Clear、ClearContents、ClearFormats)
セルの消去にはClear(値・書式・コメントを全部消す)、ClearContents(値だけ消す)、ClearFormats(書式だけ消す)があります。用途に合わせて使い分けるとデータを誤って消さずに済みます。例を示します。
Sub クリア_例()
Dim r As Range
Set r = ThisWorkbook.Sheets(1).Range("F1:F5")
r.ClearContents ' 値だけ消す
ThisWorkbook.Sheets(1).Range("G1:G5").ClearFormats ' 書式だけ消す
ThisWorkbook.Sheets(1).Range("H1:H5").Clear ' 全部消す
End Sub
操作前に保存を促すメッセージや確認ダイアログを出すと安全です。
実行方法はマクロ実行、ショートカット、ボタンのいずれでも使えます。
保存形式はマクロを含むので必ず.xlsmで保存し、開くときに「コンテンツの有効化」をして実行してください。
注意(ここだけ)
- マクロを含むブックは.xlsmで保存し、開く際にリボンの「コンテンツの有効化」を必ず行ってください。