目次

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のブックを閉じるには、Workbook.Closeメソッドを使用する。

Workbooks("book.xlsx").Close

ブック名を取得

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

ActiveWorkbook.Name
ThisWorkbook.Name

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

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

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

ワークシート

アクティブなワークシートを取得

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

Dim sheet1 As Worksheet
Set sheet1 = ActiveSheet

ワークシート名一覧の取得

Dim ws As Worksheet
Dim i As Integer

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

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

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

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

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

Worksheets("シート名").Activate

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

Worksheets("Sheet1").Activate

ワークシートのセルにデータを入力する

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

Range.Valueプロパティに値を代入する構文を次に示します。

Range("セル名").Value = 

対象となるワークシートを明示的に指定しなければ、現在アクティブなワークシートが対象となります。対象となるワークシートを明示的に指定する場合の構文を次に示します。

Worksheets("シート名").Range("セル名").Value = 

Cells.Valueプロパティに値を代入する構文を次に示します。

Cells(行番号, 列番号).Value = 

対象となるワークシートを明示的に指定する場合の構文を次に示します。

Worksheets("シート名").Cells(行番号, 列番号).Value = 

行番号と列番号は共に1から始まります。

セルにデータを入力するVBAソースコードの例を次に示します。

Range("A1").Value = "Excel"
Range("A2").Value = 2000
Cells(1,2).Value = "VBA"
Cells(2,2).Value = 12.3

Range.Valueプロパティの場合、ひとつのセルだけでなく、セル範囲を指定してデータを入力することもできます。

セルA1からA9までの範囲にデータを入力するVBAソースコードの例を次に示します。

Range("A1:A9").Value = "VBA"

セルに入力するデータとして、他のセルのデータを参照することもできます。

Range("A1").Value = Cells(1,2).Value

他のワークシートのセルのデータを参照することもできます。

Cells(1,2).Value = Worksheets("Sheet2").Range("A1").Value

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

複数のセルをまとめてコピーする

セル範囲を指定して複数のセルをまとめてコピーすることができる。

Range("A1:C1").Value = Range("A2:C2").Value

セルのデータを削除する

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

Range.Clearメソッドを呼び出す構文を次に示します。

Range("セル名").Clear

Cells.Clearメソッドを呼び出す構文を次に示します。

Cells(行番号, 列番号).Clear

セルのデータを削除するVBAソースコードの例を次に示します。

Range("A1").Clear
Cells(1,2).Clear

Range.Clearメソッドの場合、ひとつのセルだけでなく、セル範囲を指定してデータを削除することもできます。

セルA1からA9までの範囲のデータを削除するVBAソースコードの例を次に示します。

Range("A1:A9").Clear

セルの数式エラーを判定する

セルの数式がエラーになった場合、セルに「#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

画面再描画と数式再計算を止める

マクロの実行中もExcelの画面再描画と数式再計算は行われるため、マクロの実行に時間がかかることがある。これらを止めることができる。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

再開させるには次のようにする。

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutoMatic

FormatConditions

FormatConditionsとは、ひとつのセル範囲の条件付き書式(FormatCondition)のコレクションである。

FormatConditionsオブジェクトのメソッド
Method Description
Add 新しい条件付き書式を追加する。
Dim fc As FormatConditions

Set fc = Worksheets("Sheet1").Range("A1:B2").FormatConditions.Add(xlCellValue, xlEqual, "OK")
fc.Interior.ColorIndex = 2

Range

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

AutoFilter

Function AutoFilter( _
  Optional Field As Variant, _
  Optional Criteria1 As Variant, _
  Optional Operator As XlAutoFilterOperator, _
  Optional Criteria2 As Variant, _
  Optional VisibleDropDown As Variant = True, _
) As Variant
AutoFilterメソッドの引数
Parameter Description
Field フィルタの対象となるフィールド番号を整数で指定する。
Criteria1 抽出条件となる文字列
Operation フィルタの種類をXlAutoFilterOperatorクラスの定数のいずれかで指定する。
Criteria2 2番目の抽出条件となる文字列を指定する。
VisibleDropDown Trueを指定すると、フィルタ処理されるフィールドのオートフィルタのドロップダウン矢印を表示する。
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送