Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
33
Help us understand the problem. What is going on with this article?
@yasuaki9973

Excel VBAの文法まとめ

More than 3 years have passed since last update.

仕事でVBAのプログラムを書く事があるのですが、その度にVBAの文法が頭から抜けてしまっていて、前に調べた内容を調べ直しながら作業する事が多いので、今回はよく使用する文法についてサンプルプログラムを作成してみました。

条件分岐と繰り返しのサンプル

どの言語でもとりあえず条件分岐と繰り返しは把握しておきたいですね。

' 機能   : If文の書き方を確認する
'
' 引数  : mathScore 数学の点数(条件1)
'        : physicsScore 物理の点数(条件2)
' 返り値 : なし
Function CheckIfDescription(ByVal mathScore As Long, ByVal physicsScore As Long)

    ' 否定の表現は<> または、 Not 条件式

    If mathScore = 100 And physicsScore = 100 Then
       MsgBox ("数学と物理の両方100点だったようです。")
    ElseIf 50 <= mathScore Or 50 <= physicsScore Then
       MsgBox ("少なくとも数学と物理のどちらかが50点以上だったようです。")
    ElseIf mathScore >= 0 And physicsScore >= 0 Then
       MsgBox ("数学と物理の両方0点以上です。")
    Else
       MsgBox ("マイナスの値が入力されました。")
    End If

End Function
' 機能   : For文の書き方を確認する
'
' 引数  : finishNumber 終了値
' 返り値 : 加算結果
Function CheckForDescription(ByVal finishNumber As Long) As Long

    Dim count As Long
    Dim result As Long: result = 0

    For count = 1 To 100
        result = result + 1

        If count = finishNumber Then

            ' 返り値を設定する
            CheckForDescription = result

            Exit For

        End If

    Next count

    CheckForDescription = result

End Function
' 機能   : While文の書き方を確認する
'
' 引数  : finishNumber 終了値
' 返り値 : 加算結果
Function CheckWhileDescription(ByVal finishNumber As Long) As Long

    Dim count As Long: count = 1
    Dim result As Long: result = 0

    Do While count <= finishNumber

        result = result + 1
        count = count + 1

    Loop

    CheckWhileDescription = result

End Function
' 機能   : ForEach文の書き方を確認する
'
' 引数  : なし
' 返り値 : なし
Function CheckForEachDescription()

    Dim collection As collection
    Set collection = New collection

    ' コレクションにデータを追加
    With collection
        .Add Item:="犬", Key:="dog"
        .Add Item:="猫", Key:="cat"
    End With

    For Each animal In collection

        MsgBox (animal)

    Next animal

End Function

セルに値を入力する場合のサンプル

' 引数に指定した値を指定したシート名のA1セルに入力する
'
' 引数  : sheetName 対象のシート名
'        : value 設定する値
' 返り値 : なし
Function SetValue(ByVal sheetName As String, ByVal value As String)

    ' 行の指定
    Dim row As Long: row = 1
    ' 列の指定
    Dim col As Long: col = 1

    Worksheets(sheetName).Cells(row, col) = value

End Function

他のExcelファイルを開く(閉じる)場合のサンプル

' 対象のExcelファイルを操作する
'
' 引数  : excelFilePath 対象のExcelファイルのパス
' 返り値 : なし
Function OperateTargetExcelFile(ByVal excelFilePath As String)

    Workbooks.Open (excelFilePath)

    bookName = ActiveWorkbook.Name

    ' True  → ファイルを保存する
    ' False → ファイルを保存しない
    Workbooks(bookName).Close SaveChanges:=False

End Function

特定フォルダ配下のファイルに対して一律処理する場合のサンプル

' 指定したフォルダ直下のファイル名を取得して表示する
'
' 引数  : folderPath 対象フォルダのパス
' 返り値 : なし
Function GetFileNameRecursively(ByVal folderPath As String)

    Dim fileName As String
    Dim subFolder As Object

    fileName = Dir(folderPath & "\*.*")

    Do While fileName <> ""

        MsgBox (fileName)

        ' Dir関数は引数を省略した場合
        ' 直前の引数が指定されたものとして処理する
        fileName = Dir()

    Loop

    With CreateObject("Scripting.FileSystemObject")

        ' サブフォルダを取得し、その数だけ再帰的に処理を実行する
        For Each subFolder In .GetFolder(folderPath).SubFolders
            Call GetFileNameRecursively(subFolder.Path)
        Next subFolder

    End With

End Function

参考資料

■VBAの書き方についての入門資料が欲しい場合は・・
Excelマクロ/VBAで始める業務自動化プログラミング入門

■VBAのコーディング規約が気になってきた場合は・・
Excel VBAコーディング ガイドライン案

33
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
33
Help us understand the problem. What is going on with this article?