VBAでMicrosoft Excelを操作する

Microsoft Office Excelのオブジェクト

Excelのオブジェクト
Object Description
Application Excelアプリケーション自体を表すオブジェクト
FormatConditions ひとつのセル範囲の条件付き書式(FormatCondition)のコレクション
Range セル、行、列、ひとつ以上のセル範囲を含む選択範囲又は3-D範囲を表すオブジェクト
Worksheet ワークシートを表すオブジェクト
Worksheets 指定したブックまたは作業中のブックにあるすべてのWorksheetオブジェクトのコレクション

ブックを開く

VBAでExcelのブック(ファイル)を開くには、Workbooks.Openメソッドを使用する。

Workbooks.Open "book.xlsx"

ブックを閉じる

VBAでExcelのブックを閉じるには、Workbooks.Closeメソッドを使用する。

Workbooks("book.xlsx").Close

ブック名を取得する

VBAでExcelのブック名を取得するには、ActiveWorkbook.Name又はThisWorkbook.Nameを参照する。

ActiveWorkbook.Name
ThisWorkbook.Name

ブックを開いたときに自動的にマクロを実行する

ブック(ファイル)を開いたときに、Auto_Openという名前のSubプロシージャが存在すれば自動的に実行される。プロシージャ名は大文字でも小文字でもよい。

Sub Auto_Open()
  ' ブック(ファイル)を開いたときに自動的に実行する処理
End Sub

すべてのワークシート

VBAのWorksheetsコレクションは、Microsoft Excelブック(ファイル)に含まれるすべてのワークシートを表す。

Worksheets

ワークシート名を指定することで、特定のワークシートのオブジェクトを指定できる。

Worksheets("Sheet1")

すべてのワークシート名を取得する例を次に示す。

Dim ws As Worksheet
Dim i As Integer

i = 0
For Each ws In Worksheets
  i = i + 1
  Cells(i, 1) = ws.Name
Next

アクティブなワークシート

アクティブなワークシートのWorksheetオブジェクトを取得するには、Applicationオブジェクト、Windowオブジェクト又はWorksheetオブジェクトのActiveSheetプロパティを参照する。

Dim sheet1 As Worksheet
Set sheet1 = ActiveSheet

Microsoft Excel ワークシートのセルを操作する

VBAからMicrosoft Excel ワークシートのセルを操作する場合、ワークシートを明示的に指定しなければ、現在アクティブなワークシートのセルが対象となります。

アクティブなワークシートを切り替えるには、次に示すいずれかの方法で行います。

Worksheets.Activateメソッドの構文を次に示します。

Worksheets("シート名").Activate

Worksheets.Activateメソッドを使用してワークシートをアクティブにするVBAソースコードの例を次に示します。

Worksheets("Sheet1").Activate

セルにデータを入力

セルにデータを入力するには、次に示すいずれかの方法を使用します。

Sheet1 の列3の値が "原油" の行だけを Sheet2 にコピーするVBAの例を次に示します。

Dim i As Integer
Dim o As Integer
Dim j As Integer

Worksheets("Sheet1").Activate

o = 1
' Sheet1の100行が対象
For i = 1 To 100
  If Cells(i, 3).Value = "原油" Then
    ' 10列分コピーする
    For j = 1 To 10
      Worksheets("Sheet2").Cells(o, j).Value = Cells(i, j)
    Next j
    o = o + 1
  End
Next i

セルのデータを削除する

セルのデータを削除するには、次に示すいずれかの方法を使用します。

数式エラーの判定

セルの数式がエラーになった場合、セルに「#NAME?」や「#DIV/0!」と表示される。VBAでこの数式エラーかどうかを判定するにはIsError関数を使う。

If IsError(ActiveCell.Value) Then
  ' 数式エラーの場合に実行する処理
End If

Excelにボタンを作成

「開発」タブの「挿入」をクリックすると、メニューが表示されるので、「フォームコントロール」のボタンのアイコンをクリックする。

Excelのシート上で始点をクリックして、終点までドラッグする。マウスのクリックボタンを離すと、「マクロの登録」ダイアログが表示されるので、ボタンをクリックした際に実行するマクロを「マクロ名」から選択して「OK」ボタンをクリックする。

ボタンのラベルを変更するには、ボタンにマウスポインタを当てて右クリックメニューを開き、「テキストの編集」をクリックすると、ラベルが編集できるようになる。

ExcelのVBマクロでセルにリンクを設定

ActiveSheet.Hyperlinks.Add Anchor, Address, SubAddress, TextToDisplay
Anchor

設定対象範囲(オブジェクト、選択範囲など)

Address

同一ブックの場合は、""を指定する。他のブックの場合は、ファイル名を指定する。

SubAddress

リンク先のURL(ブック内の"シート名!セル名"など)。

TextToDisplay

表示するラベル文字列

すべてのセルの内容をクリア

Sheets("Sheet1").Cells.Clear
Const TYPE_ROW = 1
Const NAME_ROW = 2
Const DATA_ROW = 3
Const DATA_ROW_MAX = 100
Const WORKSHEET_SQL = "SQL"

Sub createSql()
  Dim row As Integer
  Dim column As Integer
  Dim maxColumn As Integer
  Dim sql As String
  Dim columnType(100) As String

  ' シートのセルをクリア
  Worksheets(WORKSHEET_SQL).Cells.Clear

  ' 2行目(列名)から列の数を数える
  For maxColumn = 1 To 100
    If Cells(NAME_ROW, maxColumn).Value = "" Then
      Exit For
    End If
    ' 列の型
    columnType(maxColumn) = Cells(TYPE_ROW, maxColumn).Value
  Next
  maxColumn = maxColumn - 1

  For row = DATA_ROW To DATA_ROW_MAX
    ' 空行が見つかったら処理終了
    If Cells(row, 1).Value = "" Then
      Exit For
    End If
    ' SQL文初期化
    sql = "INSERT INTO " + ActiveSheet.Name + " VALUES("
    For column = 1 To maxColumn
      ' 2列名以降であればカンマで区切る
      If column > 1 Then
        sql = sql + ", "
      End If
      ' CHAR, VARCHAR2, DATEであれば引用符で括る
      Select Case columnType(column)
      Case "CHAR", "VARCHAR2", "DATE"
        sql = sql + "'" + Cells(row, column).Value + "'"
      Case Else
        sql = sql + Cells(row, column).Value
      End Select
    Next
    Worksheets(WORKSHEET_SQL).Cells(row, 1) = sql + ");"
  Next
End Sub

Excel VBAからPowerPointを開く

Excel VBAからPowerPointを操作するには、参照設定を行う必要がある。

  1. Microsoft Visual Basic for Applicationsの「ツール」メニューから「参照設定」をクリックする。
  2. 「参照可能なライブラリファイル」の「Microsoft PowerPoint 15.0 Object Library」にチェックを入れる。
  3. OKボタンをクリックして、「参照設定」ダイアログを閉じる。
Dim filepath As String
Dim pptapp As Object
Dim pptfile As Object

filepath = Application.GetOpenFilename("PowerPoint プレゼンテーション,*pptx?;.ppt")

If filepath <> "False" Then
  Set pptapp = CreateObject("PowerPoint.Application")
  Set pptfile = pptapp.presentaions.Open(Filename:=filepath)
Else
  MsgBox "キャンセルされました。マクロを終了します。"
  Exit Sub
End If

Range

Rangeオブジェクトのメソッド
Method Description
AutoFilter オートフィルタを使ってリストにフィルタをかける。
Clear オブジェクト全体をクリアする。
ClearFormats オブジェクトの書式設定を削除する。

グラフを画像ファイルで保存する

ActiveSheet.ChartObjects(1).Chart.Export ThisWorkbook.Path & "\example.png"