モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

ExcelVBA コードスニペット

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/09/15
最終更新最終更新
2016/01/21
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    サーバレスアーキテクチャの構築を得意とする雑食系エンジニア

    0
    ステッカーを贈るとは?

    業務などでExcelを使用する際に、VBA (Visual Basic for Applications) が書けると便利ですね。簡単に使い方をまとめます。

    開発準備 (2007の場合)

    1. エクセルファイルを新規作成
    2. スタートボタン
    3. Excelのオプション
    4. 基本設定
    5. [開発] タブをリボンに表示する
    6. OK
    7. 開発タブ
    8. VisualBasic
    9. IDEが起動
    10. プロジェクトエクスプローラで右クリック
    11. 挿入→標準モジュール

    プログラムの基本構造

    グローバル変数はSubプロシージャ内からでも参照可能です。

    Option Explicit ' DimまたはConstステートメントでしか変数/定数を宣言できなくする
                    ' perlにおける"use strict"のようなもの
    
    Dim globalVar As Integer ' グローバル変数の使用が可能 (既定値の指定はできません)
    Const GLOBAL_CONST As Integer = 1024 ' 定数も使用可能
    
    Sub MyMacro1()
            ' 何らかの処理
            MsgBox(globalVar)
    End Sub
    
    Sub MyMacro2()
            ' 何らかの処理
            MsgBox(GLOBAL_CONST)
    End Sub
    

    条件分岐

    If-Else

    Option Explicit
    
    Sub MyMacro()
            Dim var As Integer ' 既定値の指定はできません
            var = InputBox("好きな数値を入力してください")
    
            If (-10 <= var And var < 0) Or (0 < var And var <= 10) Then
                    MsgBox ("[-10,0), (0,10]")
            ElseIf var = 0 Then ' == ではなくて = です
                    MsgBox ("[0,0]")
            ElseIf var mod 2 <> 0 Then ' != ではなくて <> です
                    MsgBox ("(-inf,-10), (10,inf) の奇数")
            Else
                    MsgBox ("(-inf,-10), (10,inf) の偶数")
            End If
    End Sub
    

    Case

    Option Explicit
    
    Sub MyMacro()
            Dim var As Integer ' 既定値の指定はできません
            var = InputBox("好きな数値を入力してください")
    
            Select Case var
                    Case 2
                            MsgBox("2")
                    Case 3, 4
                            MsgBox("3 or 4")
                    Case 5 To 15
                            MsgBox("5-15")
                    Case Is <= 1
                            MsgBox("less than or equal to 1")
                    Case Else
                            MsgBox("more than or equal to 15")
            End Select
    End Sub
    

    ループ処理

    For

    "Exit For"でループを抜けられます。

    Option Explicit
    
    Sub MyMacro()
            Dim i As Integer
    
            For i = 0 To 5
                    MsgBox ("for1: " & i)
            Next i
    
            For i = 0 To 5 Step 2
                    MsgBox ("for2: " & i)
            Next i
    
            For i = 5 To 0 Step -2
                    MsgBox ("for3: " & i)
            Next i
    End Sub
    

    ForEach

    "Exit For"でループを抜けられます。

    Option Explicit
    
    Sub MyMacro()
            Dim myRange As Range
            For Each myRange In Range("B2:D4") ' 矩形
                    myRange.value = "矩形"
            Next myRange
    End Sub
    

    While

    "Exit Do"でループを抜けられます。

    Option Explicit
    
    Sub MyMacro()
            Dim i As Integer
            i = 0
            Do While i <> 5
                    MsgBox (i)
                    i = i+1
            Loop
    End Sub
    

    Do-While

    "Exit Do"でループを抜けられます。

    Option Explicit
    
    Sub MyMacro()
            Dim i As Integer
            i = 0
            Do
                    MsgBox(i)
                    i = i+1
            Loop While i <> 5
    End Sub
    

    Until

    "Exit Do"でループを抜けられます。

    Option Explicit
    
    Sub MyMacro()
            Dim i As Integer
            i = 0
            Do Until i = 5
                    MsgBox(i)
                    i = i+1
            Loop
    End Sub
    

    関数の定義

    Option Explicit
    
    Function MyFunc1()
            MsgBox("hi")
    End Function
    
    Function MyFunc2(a As Integer, b As Integer) As Integer
            MyFunc2 = a + b ' 戻り値の指定方法
    End Function
    
    Sub MyMacro()
            MyFunc1 ' MyFunc1() とするとエラー。()は不要
            MsgBox(MyFunc2(1,2))
    End Sub
    

    各種変数型および演算子

    Option Explicit
    
    Sub MyMacro()
            Dim intVal As Integer, intVal2 As Integer
            Dim longVal As Long
            Dim doubleVal As Double
            Dim strVal As String
    
            Dim dateVal As Date
            Dim obj As Object 'オブジェクトへの*参照*を格納。
                              'なお、Object型は特殊であり代入にはSetを用いる必要がある (Set obj = 値)
            Dim boolVal As Boolean
            Dim byteVal As Byte
    
            longval = 2^20      '1048576 (累乗)
            doubleVal = 5/2     '2.5 (商)
            intVal = 5\2        '2 (整数商)
            intVal2 = 5 mod 2   '1 (余剰)
            strVal = 1 & ": こんにちは、" & "世界"   ' 1: こんにちは、世界 (文字列結合)
    End Sub
    

    既に定義されている便利な関数の紹介

    Date

    今日の日付を返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(Date)
    End Sub
    

    Time

    現在時刻を返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(Time)
    End Sub
    

    Rnd

    [0.0,1.0] の乱数を返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(Rnd)
    End Sub
    

    Len

    文字列の長さを返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(Len("hello")) '5
            MsgBox(Len("こんにちは")) '5
    End Sub
    

    Int

    小数点以下を切り捨てた結果を返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(Int(2.5))
    End Sub
    

    UCase

    大文字に変換した結果を返します。

    Option Explicit
    
    Sub MyMacro()
            MsgBox(UCase("日本語部分は不変abcde"))
    End Sub
    

    ワークシート関数 (一般ユーザが使用するSUMなどの関数)

    WorksheetFuncitonのメソッドを参照します。引数にはRangeオブジェクトを指定します。

    Option Explicit
    
    Sub MyMacro()
            Dim i As Integer
            For i = 1 To 10
                    Cells(i,1).Value = i
            Next i
            MsgBox(WorksheetFunction.Sum(Range("A1:A10"))) '10*11/2=55
    End Sub
    

    操作対象セルの指定方法

    Option Explicit
    
    Sub MyMacro()
            Cells(1,1).Font.Color = vbBlue  'A1の文字色を変更 (行,列)
            Range("B2").Cells(2,2).Font.Color = vbRed  'C3の文字色を変更 (行,列) (B2を基点として考える)
            Range("B2").Offset(1,1).Font.Color = vbRed  'C3の文字色を変更 (行,列) (B2を基点として考える) (Cellsと異なり(0,0)は自分自身)
            Range("B2").Offset(-1,-1).Font.Color = vbRed  'A1の文字色を変更 (行,列)
            Range("A1").ClearContents  'RangeのままでももちろんOK (ClearContents: 設定されている値を削除する)
    End Sub
    

    同じ対象に対して異なる複数の操作を行う場合

    With構文を用いると、異なる複数の操作を同じ対象に対して行う場合の記述がシンプルになります。

    Option Explicit
    
    Sub MyMacro()
            With Range("A1")
                    .Value = 777
                    .Font.Color = vbRed
            End With
    End Sub
    

    配列

    Option Explicit
    
    Sub MyMacro()
            Dim arr(5) As Integer
            Dim i As Integer
            For i=1 To 5
                    arr(i) = i*i
            Next i
            For i=1 To 5
                    MsgBox(arr(i))
            Next i
    End Sub
    

    ワークシートの操作

    操作対象としての選択

    Option Explicit
    
    Sub MyMacro()
            Worksheets(1).Cells(1,1).Value = 1  '最初のシートのセルA1
            Worksheets(1).Cells(1,2).Value = 10
    End Sub
    

    既存のシートをコピー

    Option Explicit
    
    Sub MyMacro()
            Worksheets(1).Copy After:=Worksheets(Worksheets.Count)
            Worksheets(Worksheets.Count).Name = "コピー生成されたシート"
    End Sub
    

    数式の入力

    サンプル1

    Option Explicit
    
    Sub MyMacro()
            Cells(1,1).Value = 1
            Cells(1,2).Value = 10
            Cells(1,3).Formula = "=A" & 1 & "+B" & 1  'C1には計算結果として11が表示される
    End Sub
    

    サンプル2

    Rangeで複数セルに対してFormulaを指定するとオートフィルのような結果が得られます。

    Option Explicit
    
    Sub MyMacro()
            Cells(1,1).Value = 1
            Cells(1,2).Value = 10
            Range("D1:D10").Formula = "=A" & 1 & "+B" & 1 'オートフィルのようなもの
    End Sub
    

    サンプル3

    四則演算だけでなく、ワークシート関数を用いたFormulaを指定することもできます。下記サンプルにもありますように、VBAではダブルクォーテーション1つと2つは別物であることに注意してください。他の言語ではダブルクォーテーションをエスケープするところですが、VBAではクアッドクォーテーション (?) のような記述をします。

    Option Explicit
    
    Sub MyMacro()
            Cells(1,1).Value = 1
            Cells(2,1).Formula = "=IF(A1 = 1, ""Yes"", ""No"")"
    End Sub
    

    その他

    • 挿入した図形上で右クリックしマクロを登録することで、作成したマクロをクリック実行できるようになります
    • エクセル起動時、画面左下のアイコンからマクロを記録できます
    • マクロありの状態でファイルを保存するためには、「マクロ有効ブック (.xlsm)」を選択して保存します
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    サーバレスアーキテクチャの構築を得意とする雑食系エンジニア

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。