0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エクセルVBAスキル一覧シート

Posted at

Purpose

VBAでよく使うコードパーツを目的別に整理し、使用経験と不具合事例を記録してナレッジを蓄積する

Background

VBA開発では「フォルダー選択」「ログ出力」「データ変換」など、繰り返し使うコードパーツがある。それぞれのパーツについて、いつ・どこで使ったか、どんな不具合に遭遇したかを記録することで、チーム全体の開発効率と品質が向上する。


パーツ分類と使用履歴

ログ出力関係

テキストファイルへのログ書き込み

概要: 処理の開始・終了時刻、エラー内容、処理件数などをテキストファイルに記録する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub WriteLog(logMessage As String)
    Dim logPath As String
    Dim fileNum As Integer
    logPath = ThisWorkbook.Path & "\log.txt"
    fileNum = FreeFile
    Open logPath For Append As #fileNum
    Print #fileNum, Now & " - " & logMessage
    Close #fileNum
End Sub

▶#### Sources

  • Microsoft公式: ファイル入出力ステートメント

Excelシートへのログ記録

概要: 専用のログシートに実行履歴を1行ずつ追記する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub WriteLogToSheet(logMessage As String)
    Dim ws As Worksheet
    Dim lastRow As Long
    Set ws = ThisWorkbook.Worksheets("ログ")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
    ws.Cells(lastRow, 1).Value = Now
    ws.Cells(lastRow, 2).Value = logMessage
End Sub

Debug.Printによるイミディエイト出力

概要: デバッグ用に変数の値や処理の進行状況をイミディエイトウィンドウに出力する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

変換関係

文字列から日付への変換

概要: ユーザー入力やCSVから読み込んだ文字列を日付型に変換する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function ConvertToDate(dateStr As String) As Date
    On Error Resume Next
    ConvertToDate = CDate(dateStr)
    If Err.Number <> 0 Then
        ConvertToDate = DateSerial(1900, 1, 1) '既定値
        Err.Clear
    End If
    On Error GoTo 0
End Function

▶#### Sources

  • Microsoft公式: CDate関数

全角・半角変換

概要: 全角文字を半角に、または半角を全角に変換する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function ToHalfWidth(str As String) As String
    ToHalfWidth = StrConv(str, vbNarrow)
End Function

Function ToFullWidth(str As String) As String
    ToFullWidth = StrConv(str, vbWide)
End Function

▶#### Sources

  • Microsoft公式: StrConv関数

CSV・TSV読み込みとパース

概要: カンマ区切りやタブ区切りのテキストファイルを読み込み、配列に格納する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function ReadCSV(filePath As String) As Variant
    Dim lines As Variant
    Dim fileNum As Integer
    Dim content As String
    fileNum = FreeFile
    Open filePath For Input As #fileNum
    content = Input$(LOF(fileNum), fileNum)
    Close #fileNum
    lines = Split(content, vbCrLf)
    ReadCSV = lines
End Function

JSON・XMLパース

概要: API応答やファイルから取得したJSON/XMLをパースしてデータを取り出す

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### Sources

  • VBA-JSONライブラリ(GitHub)
  • MSXML2ライブラリリファレンス

ブック・ファイル操作関係

ブックの新規作成

概要: 新しいExcelブックを作成する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub CreateNewWorkbook()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    wb.SaveAs ThisWorkbook.Path & "\新規ブック.xlsx"
End Sub

ブックの複製(コピー)

概要: 既存のブックをテンプレートとして複製し、新しいファイル名で保存する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub CopyWorkbook(sourcePath As String, destPath As String)
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFile sourcePath, destPath
    Set fso = Nothing
End Sub

ブックを開く・閉じる

概要: 既存のブックを開いて操作し、保存して閉じる

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub OpenAndCloseWorkbook(filePath As String)
    Dim wb As Workbook
    Set wb = [Workbooks.Open](http://Workbooks.Open)(filePath)
    '処理を記述
    wb.Close SaveChanges:=True
End Sub

ブックの保存(名前を付けて保存)

概要: ブックを指定したパスとファイル名で保存する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub SaveWorkbookAs(wb As Workbook, savePath As String)
    wb.SaveAs Filename:=savePath, FileFormat:=xlOpenXMLWorkbook
End Sub

フォルダー選択ダイアログ

概要: ユーザーにフォルダーを選択させて、そのパスを取得する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function SelectFolder() As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If [fd.Show](http://fd.Show) = -1 Then
        SelectFolder = fd.SelectedItems(1)
    Else
        SelectFolder = ""
    End If
End Function

▶#### Sources

  • Microsoft公式: FileDialogオブジェクト

ファイル選択ダイアログ

概要: ユーザーにファイルを選択させて、そのパスを取得する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function SelectFile() As String
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.Filters.Add "Excelファイル", "*.xlsx;*.xls"
    If [fd.Show](http://fd.Show) = -1 Then
        SelectFile = fd.SelectedItems(1)
    Else
        SelectFile = ""
    End If
End Function

ファイル・フォルダの存在確認

概要: 指定したパスにファイルやフォルダーが存在するか確認する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function FileExists(filePath As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileExists = fso.FileExists(filePath)
    Set fso = Nothing
End Function

Function FolderExists(folderPath As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FolderExists = fso.FolderExists(folderPath)
    Set fso = Nothing
End Function

▶#### Sources

  • Microsoft公式: FileSystemObjectリファレンス

シート操作関係

シートの追加

概要: 新しいワークシートをブックに追加する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub AddNewSheet(sheetName As String)
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets.Add
    [ws.Name](http://ws.Name) = sheetName
End Sub

シートの削除

概要: 指定したシートを削除する(警告メッセージ抑制含む)

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub DeleteSheet(sheetName As String)
    On Error Resume Next
    Application.DisplayAlerts = False
    ThisWorkbook.Worksheets(sheetName).Delete
    Application.DisplayAlerts = True
    On Error GoTo 0
End Sub

シートのコピー

概要: 既存のシートを複製する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub CopySheet(sourceSheet As String, newSheetName As String)
    ThisWorkbook.Worksheets(sourceSheet).Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    [ActiveSheet.Name](http://ActiveSheet.Name) = newSheetName
End Sub

連続でシートをチェックする(全シートループ)

概要: ブック内の全シートを順番に処理する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub CheckAllSheets()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        Debug.Print "処理中: " & [ws.Name](http://ws.Name)
        '各シートに対する処理を記述
    Next ws
End Sub

シート名の一覧取得

概要: ブック内の全シート名を配列で取得する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function GetSheetNames() As String()
    Dim ws As Worksheet
    Dim names() As String
    Dim i As Long
    ReDim names(1 To ThisWorkbook.Worksheets.Count)
    For Each ws In ThisWorkbook.Worksheets
        i = i + 1
        names(i) = [ws.Name](http://ws.Name)
    Next ws
    GetSheetNames = names
End Function

データ検索・抽出関係

セル検索(Find)

概要: 指定した値をシート内から検索する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function FindCell(ws As Worksheet, searchValue As Variant) As Range
    Set FindCell = ws.Cells.Find(What:=searchValue, LookIn:=xlValues, LookAt:=xlWhole)
End Function

▶#### Sources

  • Microsoft公式: Range.Findメソッド

フィルター処理(AutoFilter)

概要: シートにオートフィルターを適用してデータを絞り込む

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub ApplyFilter(ws As Worksheet, column As Long, criteria As String)
    ws.AutoFilterMode = False
    ws.Range("A1").AutoFilter Field:=column, Criteria1:=criteria
End Sub

条件に合う行を抽出

概要: 特定の条件に合致する行を別シートにコピーする

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

外部連携関係

データベース接続(ADO)

概要: ADOを使ってSQL ServerやAccessなどのデータベースに接続する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub ConnectToDB()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    conn.ConnectionString = "Provider=SQLOLEDB;Data Source=ServerName;Initial Catalog=DBName;User ID=UserName;Password=Pass;"
    [conn.Open](http://conn.Open)
    '処理を記述
    conn.Close
    Set conn = Nothing
End Sub

▶#### Sources

  • Microsoft公式: ADODB.Connectionオブジェクト

Web API呼び出し(HTTP通信)

概要: REST APIにリクエストを送信し、レスポンスを受け取る

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Function CallAPI(url As String) As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    [http.Open](http://http.Open) "GET", url, False
    http.send
    CallAPI = http.responseText
    Set http = Nothing
End Function

▶#### Sources

  • MSXML2.XMLHTTP リファレンス

メール送信(Outlook連携)

概要: Outlookを使ってメールを自動送信する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub SendEmail(toAddress As String, subject As String, body As String)
    Dim outlookApp As Object
    Dim mail As Object
    Set outlookApp = CreateObject("Outlook.Application")
    Set mail = outlookApp.CreateItem(0)
    [mail.To](http://mail.To) = toAddress
    mail.subject = subject
    mail.body = body
    mail.Send
    Set mail = Nothing
    Set outlookApp = Nothing
End Sub

▶#### Sources

  • Microsoft公式: Outlook.MailItemオブジェクト

エラー処理・例外ハンドリング関係

On Error GoTo ラベル

概要: エラーが発生したときに特定のラベルにジャンプして処理する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub SampleErrorHandling()
    On Error GoTo ErrorHandler
    '処理を記述
    Exit Sub
ErrorHandler:
    MsgBox "エラーが発生しました: " & Err.Description
End Sub

▶#### Sources

  • Microsoft公式: On Errorステートメント

On Error Resume Next

概要: エラーが発生しても次の行に進む(エラーを無視)

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub IgnoreError()
    On Error Resume Next
    '処理(エラーが出ても続行)
    If Err.Number <> 0 Then
        Debug.Print "エラー発生: " & Err.Description
        Err.Clear
    End If
    On Error GoTo 0
End Sub

エラー情報の取得(Err.Number, Err.Description)

概要: 発生したエラーの番号と説明を取得する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

UI・ユーザー入力関係

InputBoxでの値入力

概要: ユーザーに値を入力させるダイアログを表示する

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub GetUserInput()
    Dim userInput As String
    userInput = InputBox("値を入力してください", "入力")
    If userInput <> "" Then
        MsgBox "入力値: " & userInput
    End If
End Sub

MsgBoxでの確認ダイアログ

概要: ユーザーにメッセージを表示し、ボタン選択を受け取る

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub ConfirmAction()
    Dim result As VbMsgBoxResult
    result = MsgBox("実行してよろしいですか?", vbYesNo + vbQuestion, "確認")
    If result = vbYes Then
        '処理を実行
    End If
End Sub

UserFormの作成と表示

概要: カスタムフォームを作成してユーザー入力を受け付ける

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### Sources

  • Microsoft公式: UserFormオブジェクト

パフォーマンス最適化関係

画面更新の停止(ScreenUpdating)

概要: 処理中の画面のちらつきを防ぎ、実行速度を向上させる

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub OptimizePerformance()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    '処理を記述
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub

▶#### Sources

  • VBA高速化テクニック集

配列への一括読み込み・書き込み

概要: セル範囲を配列に読み込み、処理後に一括で書き戻す

▶#### 使用履歴

  • 使用日時:
  • 使用場所(システム/ツール名):
  • 使用目的:

▶#### 不具合事例

  • 事例1:
    • 症状:
    • 原因:
    • 対処方法:

▶#### コードサンプル

Sub ArrayProcessing()
    Dim dataArray As Variant
    Dim i As Long
    '配列に読み込み
    dataArray = Range("A1:A1000").Value
    '配列内で処理
    For i = 1 To UBound(dataArray, 1)
        dataArray(i, 1) = dataArray(i, 1) * 2
    Next i
    '配列を一括書き込み
    Range("B1:B1000").Value = dataArray
End Sub

Notes

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?