- 2021.4.1 移転しました...
-
- このページの旧URLは
http://www10.plala.or.jp/palm84/excel_vba.html
- このページの旧URLは
- 内容古いです!
-
最終更新日は 2007.5.30、ご注意。
むちゃくちゃ初歩的なことばっかです。ぼちぽちほちと更新して行きます...。
- INDEX
参考リンク
いっぱい勉強させて頂きましたー。ありがとうございます。
- Excel VBA モーグ即効テクニック集
- VBAestに学べ ExcelVBA上級テクニック モーグスキルアップ講座
- Excel エクセルの使い方-マクロ/VBA - インストラクターのネタ帳
- やさしく学ぶExcelVBA:日経パソコン オンライン
- Office TANAKA - トップページ
- ExcelVBAメニュー - Shun's Page
- Excel全開VBA
- ☆ Excelでお仕事!(Excel全般の解説サイト) ☆
- Excel VBA 入門講座
- VBA - エクセルマクロめも。 - 634 - めざせへなちょこ
- Excel VBA入門
- ★ Let's Excel VBA ★
- Excel(エクセル)VBAメモ:目次 - よねさんのWordとExcelの小部屋
- Excel VBAを使い始めた人から - SETO HOME
- エクセル講座目次 - ゆうゆうくらぶ
- 犬でもわかるExcelVBA講座
参照(オブジェクト)
ワークブック(ファイル)参照
※省略可能
Workbook オブジェクトは、Workbooks
プロパティ、ActiveWorkbook
プロパティ、ThisWorkbook
プロパティから取得可能。
Application.Workbooks
- Applicationオブジェクトは省略可能WorkBooks("Book1")
- ファイル名で指定Workbooks.Open filename:="abc.xls"
- abc.xls を開く
ワークシート参照
※省略可能
Worksheet オブジェクトは、Worksheets
プロパティ、ActiveSheet
プロパティから取得可能。
ActiveSheet
プロパティ - アクティブシートActiveSheet.Previous
- 前のシートActiveSheet.Next
- 後のシート
Worksheets("Sheet1")
- シート名で指定Worksheets(1)
- 1枚目のワークシートActiveCell.Worksheet
セル参照
Selection
プロパティ - 選択領域(全体)Selection.EntireRow
- 選択セルを含む行Selection.EntireColumn
- 選択セルを含む列
ActiveCell
プロパティ - アクティブなセル(複数選択の場合など)ActiveCell.Offset(1,0)
- 下ActiveCell.Offset(-1,0)
- 上ActiveCell.Offset(0,1)
- 右ActiveCell.Offset(0,-1)
- 左ActiveCell.EntireRow
- アクティブセルを含む行ActiveCell.EntireColumn
- アクティブセルを含む列
Range
プロパティ - セル番地 / 行 / 列 を指定Range("A1")
-Range("A1,B5")
- とびとび指定(A1がアクティブ)Range("A1:C5")
- 範囲指定Range("A1", "C5")
- 範囲指定Range("A:A")
- 列A全体Range("A:A,C:C")
- 列Aと列CRange("20:20")
- 行20全体Range("20:20,25:25")
- 行20と行25
Cells
プロパティ - 行/列を番号で指定Cells
- シート全体Cells(2, 1)
- 行/列番号を指定Range(Cells(1,1),Cells(5,3))
- 範囲指定
Rows
プロパティ - 行Rows(2)
- 行2Rows("2:2")
- 行2Rows(ActiveCell.Row)
- アクティブセルの行Rows("2:4")
- 行2から行4
Columns
プロパティ - 列Columns(2)
- 列BColumns("A:A")
- 列AColumns("A:B")
- 列Aから列BColumns(ActiveCell.Column)
- アクティブセルの列
UsedRange
プロパティ - 使用済みセル領域選択ActiveSheet.UsedRange.Select
- Excel(エクセル)VBAメモ:セル範囲の指定方法
CurrentRegion
- プロパティアクティブセル領域を選択-
Range("A1").CurrentRegion.Select
- アクティブセル領域を選択する-CurrentRegionプロパティ:Excel エクセルの使い方-マクロ/VBA
SpecialCells
プロパティSpecialCells(xlCellTypeBlanks)
- 空SpecialCells(xlCellTypeConstants)
- 定数(値)のあるセルSpecialCells(xlCellTypeFormulas)
- 数式が含まれるセルSpecialCells(xlCellTypeLastCell)
- 使われた最後のセルSpecialCells(xlCellTypeVisible)
- すべての可視セルSpecialCells(xlCellTypeNotes)
- コメントが含まれるセルSpecialCells()
-
- 数式のあるセルを選択
Cells.SpecialCells(xlCellTypeFormulas).Select
- 数式の結果がエラーとなっているセルを選択
Cells.SpecialCells(xlCellTypeFormulas, xlErrors).Select
プロパティ / 定数
下記のように記述
対象.プロパティ(.プロパティ) = 定数/値/数式など
セルの設定
- 入力
Value
- 値(文字/数値/定数など)を入力(※省略可能)Formula
- 数式を入力FormulaR1C1
- R1C1形式で数式を入力R[0]C[-1]
はRC[-1]
と同じ
- セルに数式を入力/取得する(Formula/FormulaR1C1プロパティ) - Excel VBA モーグ即効テクニック集
- フォント -
Font
Font.Name = "MS ゴシック"
- フォント名Font.Size = 14
- フォントサイズFont.ColorIndex = 3
- フォントカラー(赤)Font.Bold = True
- 太字Font.Italic = True
- 斜体Font.Underline = True
- 下線Font.Strikethrough = True
- 取り消し線- Excel(エクセル)VBAメモ:セルのフォント・塗りつぶし・罫線を設定する
- Excel VBA Reference ★文字色とセルの塗りつぶし設定★
- Excel VBA Reference ★セルのフォント書式設定★
- 表示形式 -
NumberFormatLocal
NumberFormatLocal = "yyyy/mm/dd"
- 日付NumberFormatLocal = "@"
- 文字列NumberFormat = "#,##0.00"
- 小数点以下2桁- Excel(エクセル)VBAメモ:セルの表示形式・表示位置など
- 配置
HorizontalAlignment = xlHAlignCenter
- 横位置を中央揃えVerticalAlignment = xlVAlignTop
- 縦位置を上詰めOrientation = xlVertical
- 文字方向を垂直にWrapText = True
- 折り返して全体を表示するShrinkToFit = True
- 縮小して全体を表示するMergeCells = True
- セルを結合する- 文字の配置を設定する - Excel VBA モーグ即効テクニック集
- Excel(エクセル)VBAメモ:セルの表示形式・表示位置など
- 罫線
Borders.LineStyle = True
- セル四方Borders.Weight = xlThick
- 太線を指定(セル四方)Borders(xlEdgeBottom).LineStyle = xlDouble
- 選択セル底部に二重線- Excel(エクセル)VBAメモ:セルのフォント・塗りつぶし・罫線を設定する
- 塗りつぶし / パターン
Interior.ColorIndex = 3
- 赤色で塗りつぶしInterior.Pattern = xlChecker
- チェック模様パターン- Excel(エクセル)VBAメモ:セルのフォント・塗りつぶし・罫線を設定する
- パターンを設定する - Excel VBA モーグ即効テクニック集
列 / 行 の調整
ColumnWidth
- 列の幅を標準フォント文字数で設定Columns("A:C").ColumnWidth = 15
- 列Aから列CRange("A2:C5").ColumnWidth = 10
- A2からC5が含まれる列(= 列Aから列C)Range("A2,E5").ColumnWidth = 10
- A2とE5が含まれる列(= 列Aと列E)Selection.ColumnWidth = 20
- 選択領域が含まれる列
RowHeight
- 行の高さをポイント(1p = 0.35mm)で設定Rows("3").RowHeight = 30
- 行3Range("A2:C5").RowHeight = 30
- A2からC5が含まれる行(= 行2から行3)Range("A2,E5").RowHeight = 30
- A2とE5が含まれる行(= 行2と行5)Selection.RowHeight = 30
- 選択領域含まれる行
その他
- カラーパレットで色を設定 -
ColorIndex
Interior.ColorIndex = 3
- セルを赤で塗りつぶしFont.ColorIndex = 5
- セルのフォントを青に- カラーパレットで色を設定する(ColorIndexプロパティ) - Excel VBA モーグ即効テクニック集
- ColorIndexプロパティ値一覧:Excel エクセルの使い方-マクロ/VBA
Name
- 対象の名前を指定対象.name = 値
- 領域(テーブル)の名前定義も可能
Count
- セル(行/列)を数えるRange("A1:B5").Count
- 選択セルの数Range("A1:B5").Rows.Count
- 選択行の数Range("A1:B5").Columns.Count
- 選択列の数
対象.Row
- 行番号を取得対象.Column
- 列番号を取得
Application.DisplayAlerts = False
- 警告画面を出さない
メソッド
下記のように記述
対象.メソッド(引数:=対象/定数
)
Activate
- 対象をアクティブにするSelect
- 選択する
- 消去
Clear
- すべてクリアClearContents
- 値 / 数式をクリアClearFormats
- 書式をクリア
Copy
- コピー&貼り付けSelection.Copy Destination:=Range("F10")
- 選択セルをF10へコピー&貼り付け
Cut
- 切り取り&貼り付けSelection.Cut Destination:=Range("F10")
- 選択セルをF10へ切り取り&貼り付け
Paste
- クリップボードから貼り付けActiveSheet.Paste
- 選択領域へ貼り付けActiveSheet.Paste Destination:=Range("B1")
- 貼り付け先を指定
Application.CutCopyMode = False
- コピー / 切り取りモードをオフにする
Insert
- セル(行/列)の挿入- Excel VBA 入門講座 セルの挿入
Range("B2:E3").Insert
- B2:E3に挿入、下(行)方向にシフト(範囲は横長)Range("B2:C3").Insert
- B2:C3に挿入、下(行)方向にシフト(範囲は正方)Range("B2:C4").Insert
- B2:C4に挿入、右(列)方向にシフト(範囲は縦長)ActiveCell.EntireRow.Insert
- アクティブセルのある行から1行挿入Range("B2:E3").EntireRow.Insert
- 2行目から2行挿入ActiveCell.EntireColumn.Insert
- アクティブセルのある列から1列挿入Range("B2:E3").EntireColumn.Insert
- 列Bから4列挿入Range("B2").Insert Shift:=xlShiftToRight
- シフト方向を右に指定Range("B2").Insert Shift:=xlShiftDown
- シフト方向を下に指定
Delete
- セル(行/列)の削除- Excel VBA 入門講座 セルの削除
Range("B1:D4").Delete
- 左(列)方向にシフト((範囲横長)Range("C3:D4").Delete
- 上(行)方向にシフト(範囲は正方)Range("B2:C4").EntireRow.Delete
- 上(行)方向にシフト(範囲縦長)Range("C3:D5").EntireRow.Delete
- 行3から行5を削除Range("C3:D4").EntireColumn.Delete
- 列Cから列Dを削除Range("B2:C4").Delete Shift:=xlShiftToLeft
- シフト方向を左に指定Range("B2").Delete.Shift:=xlShiftUp
- シフト方向を上に指定
形式を選択して貼り付け
対象.PasteSpecial 引数:=定数, 引数:=真偽値, ...
※引数は省略可能
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False
- 引数
Paste
- 貼り付け内容Paste:=xlValues
- 値Paste:=xlPasteFormulas
- 数式Paste:=xlPasteFormats
- 書式Paste:=xlPasteComments
- コメントPaste:=xlDataValidation
- 入力規則Paste:=xlPasteAllExceptBorders
- 罫線を除く全て
- 引数
Operation
- 演算Operation:=xlNone
- 設定しない(既定)Operation:=xlAdd
- 加算Operation:=xlSubtract
- 引算
- 引数
SkipBlanks
- 空白セルの処理SkipBlanks:=False
- 空白セルとして処理する(既定)SkipBlanks:=True
- 空白セルを無視する
- 引数
Transpose
- 行列の入替Transpose:=False
- しない(既定)Transpose:=True
- する
列 / 行 の最適化
AutoFit
- 列幅をセルの内容に合わせるColumns("B").AutoFit
- 列Bの幅を最適化Range("A1:B4").Columns.AutoFit
- A1からB4の内容に合わせてRange("A1,B4").Columns.AutoFit
- A1とB4の内容に合わせてSelection.Columns.AutoFit
- 選択領域の内容に合わせて
AutoFit
- 行の高さをセルの内容に合わせるRows(1).AutoFit
- 行1の高さを最適化Range("A1:B4").Rows.AutoFit
- A1からB4の内容に合わせてRange("A1,B4").Rows.AutoFit
- A1とB4の内容に合わせてSelection.Rows.AutoFit
- 選択領域の内容に合わせて
ワークシートの扱い
Move
- 移動WorkSheets(4).Move Before:=WorkSheets(1)
- (4)を(1)の前にWorkSheets(4).Move After:=WorkSheets(1)
- (4)を(1)の後ろに
Add
- 新規シートを追加WorkSheets.Add Before:=WorkSheets(1)
- 新規シートを(1)の前にWorkSheets.Add After:=WorkSheets(1)
- 新規シートを(1)の後に
Worksheets("Sheet2").Copy After:=Worksheets(4)
- シートをコピー
プログラム制御文
- If構文で条件に応じた処理を実行する(第11回):日経パソコンオンライン
- 変数を使ってすっきりとしたマクロを作る (第12回):日経パソコンオンライン
- 繰り返し処理の基本形を覚える (第16回):日経パソコンオンライン
- 条件を満たすまで処理を繰り返す (第20回):日経パソコンオンライン
“ミニ”マクロ
- 選択領域を太線で囲む
-
Sub 太線で囲む() With Selection .Borders.Weight = xlThick .Borders(xlInsideVertical).LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone End With End Sub
- 列Aの一番下のセルを選択
-
Sub 一番下のセルを選択() Range("A65536").End(xlUp).Select End Sub
Sub 一番下のセルを選択() Range("A" & Rows.Count).End(xlUp).Select End Sub
- アクティブセルのある列の一番下のセルを選択
-
Sub 一番下のセルを選択EntireColumn() Selection.EntireColumn.Select '列を選択 ActiveCell.Offset(65535).End(xlUp).Select '65536行からCtrl + ↑ End Sub
Sub 一番下のセルを選択() Dim i As Long Dim h As Long i = Rows.Count 'シート最終行の番号 h = ActiveCell.Column 'アクティブセルの列番号 Cells(i, h).End(xlUp).Select '最終行からCtrl + ↑ End Sub
- フィルハンドルをWクリック
-
例えば、A列にデータ、B1に数式入力してフィルハンドルをWクリックする時の動作風に。
Sub オートフィルWクリック風() Selection.Copy ActiveCell.Offset(0, -1).Select '左のセルへ移動 Selection.End(xlDown).Select 'Ctrl + ↓ ActiveCell.Offset(0, 1).Select '右のセルへ移動 Range(Selection, Selection.End(xlUp)).Select 'Ctrl+Shift+↑ ActiveSheet.Paste Application.CutCopyMode = False End Sub
- 選択領域内の空白セルを選択
-
値を入れてセンタリング
Sub 空白セル選択() With Selection.SpecialCells(xlCellTypeBlanks) .Value = "--" .HorizontalAlignment = xlCenter End With End Sub
- 重複削除
-
キーとなる列のセルを選択して実行。新規シートに重複行を除きコピー。
Sub 重複削除() Columns(ActiveCell.Column).AdvancedFilter Action:=xlFilterInPlace, Unique:=True Selection.CurrentRegion.Select Selection.Copy Sheets.Add Before:=ActiveSheet Selection.PasteSpecial Paste:=xlPasteColumnWidths ActiveSheet.Paste Application.CutCopyMode = False End Sub
ワークシート関数
ほなね