palm84.com

革命的愛熊主義者同盟!

私的 Excel VBAめも

2021.4.1 移転しました...
  • このページの旧URLは
    • http://www10.plala.or.jp/palm84/excel_vba.html
内容古いです

最終更新日は 2007.5.30、ご注意。

むちゃくちゃ初歩的なことばっかです。ぼちぽちほちと更新して行きます...。

INDEX

いっぱい勉強させて頂きましたー。ありがとうございます。

参照(オブジェクト)

ワークブック(ファイル)参照

※省略可能

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と列C
    • Range("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) - 行2
    • Rows("2:2") - 行2
    • Rows(ActiveCell.Row) - アクティブセルの行
    • Rows("2:4") - 行2から行4
  • Columnsプロパティ - 列
    • Columns(2) - 列B
    • Columns("A:A") - 列A
    • Columns("A:B") - 列Aから列B
    • Columns(ActiveCell.Column) - アクティブセルの列
  • SpecialCellsプロパティ
    • SpecialCells(xlCellTypeBlanks) - 空
    • SpecialCells(xlCellTypeConstants) - 定数(値)のあるセル
    • SpecialCells(xlCellTypeFormulas) - 数式が含まれるセル
    • SpecialCells(xlCellTypeLastCell) - 使われた最後のセル
    • SpecialCells(xlCellTypeVisible) - すべての可視セル
    • SpecialCells(xlCellTypeNotes) - コメントが含まれるセル
    • SpecialCells() -
  • 数式のあるセルを選択
Cells.SpecialCells(xlCellTypeFormulas).Select
  • 数式の結果がエラーとなっているセルを選択
Cells.SpecialCells(xlCellTypeFormulas, xlErrors).Select

プロパティ / 定数

下記のように記述

対象.プロパティ(.プロパティ) = 定数/値/数式など

セルの設定

列 / 行 の調整

  • ColumnWidth - 列の幅を標準フォント文字数で設定
    • Columns("A:C").ColumnWidth = 15 - 列Aから列C
    • Range("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 - 行3
    • Range("A2:C5").RowHeight = 30 - A2からC5が含まれる行(= 行2から行3)
    • Range("A2,E5").RowHeight = 30 - A2とE5が含まれる行(= 行2と行5)
    • Selection.RowHeight = 30 - 選択領域含まれる行

その他

  • 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) - シートをコピー

プログラム制御文

“ミニ”マクロ

選択領域を太線で囲む
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

ワークシート関数


ほなね