



Dim 名前 As String
Dim 年齢 As IntegerSub 挨拶()
MsgBox "こんにちは"
End Sub' 単純なIf-Then
If 年齢 >= 20 Then
MsgBox "成人です"
End If
' If-Then-Else
If 点数 >= 60 Then
MsgBox "合格"
Else
MsgBox "不合格"
End If
' ElseIf
If 点数 >= 80 Then
等級 = "A"
ElseIf 点数 >= 60 Then
等級 = "B"
Else
等級 = "C"
End If
Select Case 評価式
Case 値1
' 値1の場合の処理
Case 値2
' 値2の場合の処理
Case Else
' どの値にも一致しない場合
End SelectSelect Case 得点
Case 90 To 100
評価 = "優"
Case 70 To 89
評価 = "良"
Case 60 To 69
評価 = "可"
Case Else
評価 = "不可"
End Select' 基本的なFor Next
For i = 1 To 10
Cells(i, 1).Value = i
Next i
' ステップ値を使う
For i = 10 To 1 Step -1
Debug.Print i ' 10から1までカウントダウン
Next i
' 条件付きでループを抜ける
For i = 1 To 1000
If Cells(i, 1).Value = "終了" Then
Exit For ' "終了"が見つかったらループを抜ける
End If
Next i
' Do While(最初に条件チェック)
Do While 残高 > 0
残高 = 残高 - 支出
月数 = 月数 + 1
Loop
' Do Until(条件がFalseの間繰り返し)
Do Until 完了フラグ = True
処理実行
If 条件 Then 完了フラグ = True
Loop
' Do-Loop While(最後に条件チェック)
Do
入力値 = InputBox("数値を入力してください")
Loop While Not IsNumeric(入力値)
' 選択範囲内の全セルを処理
For Each セル In Selection
If セル.Value < 0 Then
セル.Font.Color = vbRed
End If
Next セル
' すべてのワークシートを処理
For Each シート In ThisWorkbook.Worksheets
シート.Cells(1, 1).Value = "会社名"
Next シート
Sub データ処理()
On Error GoTo エラー処理
' 処理コード
Exit Sub
エラー処理:
MsgBox "エラーが発生しました: " & Err.Description
End Sub
Sub 給与計算(社員ID As String)
' 処理コード
MsgBox "計算完了"
End SubFunction 消費税計算(金額 As Long) As Long
消費税計算 = 金額 * 0.1
End FunctionSub 処理(ByVal 数値 As Integer)
数値 = 数値 * 2
' 元の変数は変更されない
End SubSub 処理(ByRef 数値 As Integer)
数値 = 数値 * 2
' 元の変数も変更される
End Sub' オブジェクト参照の例
Application.Calculation = xlManual ' 計算方法の設定
Workbooks("売上.xlsx").Open ' ブックを開く
Worksheets("集計").Activate ' シートをアクティブにする
Range("A1:C10").ClearContents ' 範囲の内容をクリア
Cells(1, 2).Value = "項目名" ' 1行2列(B1)に値を設定
Dim ws As Worksheet
Set ws = Worksheets("集計")
ws.Range("A1").Value = "合計"変数 = Range("A1").Value
変数 = Cells(1, 1).Value ' A1と同じRange("B2").Value = 100
Cells(2, 2).Formula = "=SUM(A1:A10)"Range("C3").Font.Bold = True
Range("C3").Interior.Color = RGB(255, 255, 0) ' 黄色Range("A1:C10").Select
Range(Cells(1, 1), Cells(10, 3)).Select ' 同じ範囲
Range("A1") ' 単一セル
Range("A1:C5") ' 矩形範囲
Range("A1,C3,E5") ' 不連続範囲
Range("A:A") ' A列全体
Range("1:1") ' 1行全体
Range("TestName") ' 名前付き範囲' A列の使用範囲を取得
Set 範囲 = Range("A1").CurrentRegion
' 最終行を検出
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
' 最終行までの範囲を設定
Set 範囲 = Range("A1:C" & 最終行)' 条件付き書式の適用
Range("A1:D10").FormatConditions.Add _
Type:=xlCellValue, Operator:=xlGreater, _
Formula1:="100"
' 特定値のセルを検索
Set 検索結果 = Columns("A").Find("山田")Worksheets.Add.Name = "集計表"
Worksheets("Sheet1").Delete
Worksheets("Sheet2").Name = "データ"Worksheets("元").Range("A1:C10").Copy _
Destination:=Worksheets("先").Range("D1")ThisWorkbook.SaveAs "新ファイル名.xlsx"
Workbooks.Add
Workbooks.Open "C:\Data\売上.xlsx"
Workbooks("Book1").Close SaveChanges:=TrueWorkbooks("元.xlsx").Worksheets("Sheet1"). _
Range("A1:C10").Copy _
Destination:=Workbooks("先.xlsx"). _
Worksheets("Sheet1").Range("A1")



Private Sub UserForm_Initialize()
ComboBox1.Clear
ComboBox1.AddItem "東京"
ComboBox1.AddItem "大阪"
TextBox1.Value = ""
End SubPrivate Sub CommandButton1_Click()
' OKボタンの処理
If TextBox1.Value = "" Then
MsgBox "名前を入力してください"
Else
' データ処理
Me.Hide ' フォームを非表示に
End If
End SubPrivate Sub TextBox1_Change()
' 入力値に応じた処理
If IsNumeric(TextBox1.Value) Then
Label1.Caption = "数値です"
Else
Label1.Caption = "文字列です"
End If
End SubPrivate Sub UserForm_Terminate()
' フォーム終了時の処理
Debug.Print "フォームが閉じられました"
End Sub' ファイルをオープン
Open "C:\Data\input.txt" For Input As #1
' 処理コード
Close #1 ' ファイルを閉じる
' テキスト読み込み
Open "input.txt" For Input As #1
Do Until EOF(1)
Line Input #1, テキスト行
Debug.Print テキスト行
Loop
Close #1
' テキスト書き込み
Open "output.txt" For Output As #2
Print #2, "データ1"
Print #2, "データ2"
Close #2
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Data\顧客.accdb"
cn.OpenDim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM 顧客 WHERE 地域='東京'", cnDo Until rs.EOF
Debug.Print rs!顧客名 & ", " & rs!電話番号
rs.MoveNext
Looprs.Close
cn.Close
Set rs = Nothing
Set cn = NothingDim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Data\社員.accdb"
cn.OpenSet rs = cn.Execute("SELECT * FROM 社員マスタ")
' または
cn.Execute "UPDATE 社員マスタ SET 部署='営業' WHERE ID=123"' ヘッダー行の作成
For i = 0 To rs.Fields.Count - 1
Cells(1, i + 1).Value = rs.Fields(i).Name
Next i
' データの転送
Set シート = Worksheets("データ")
行番号 = 2
Do Until rs.EOF
For i = 0 To rs.Fields.Count - 1
シート.Cells(行番号, i + 1).Value = rs(i)
Next i
行番号 = 行番号 + 1
rs.MoveNext
Loop' 検索クエリの実行
Set rs = cn.Execute("SELECT * FROM 顧客 " & _
"WHERE 都道府県 = '東京都'")
' 更新クエリの実行
cn.Execute "UPDATE 在庫 SET 数量 = 数量 - 10 " & _
"WHERE 商品コード = 'A001'"
' レコード追加
cn.Execute "INSERT INTO 履歴 " & _
"(日付, 担当者, 内容) VALUES " & _
"(#" & Date & "#, '山田', '電話対応')"
' パラメータ化クエリ(SQL注入対策)
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = "SELECT * FROM 顧客 " & _
"WHERE 都道府県 = ?"
Dim prm As ADODB.Parameter
Set prm = cmd.CreateParameter("都道府県", _
adVarChar, adParamInput, 10, "東京都")
cmd.Parameters.Append prm
Set rs = cmd.Execute
' 静的配列(サイズ固定)
Dim 数値(1 To 5) As Integer
数値(1) = 10
数値(2) = 20
' 動的配列(サイズ可変)
Dim 名前() As String
ReDim 名前(1 To 10)
名前(1) = "鈴木"
' 初期値の一括設定
Dim 曜日(1 To 7) As String
曜日 = Array("日", "月", "火", "水", "木", "金", "土")
' 配列サイズの拡張
ReDim Preserve 名前(1 To 20)
' Preserveを付けると既存データを保持
' 多次元配列
Dim マトリックス(1 To 3, 1 To 3) As Integer
マトリックス(1, 1) = 100
マトリックス(2, 3) = 200
' 配列のクリア
Erase 数値
Dim データ() As Variant
データ = Range("A1:Z100").Value ' 一括読み込み
' データ処理
Range("A1:Z100").Value = データ ' 一括書き込み最小添字 = LBound(数値)
最大添字 = UBound(数値)
行数 = UBound(マトリックス, 1)
列数 = UBound(マトリックス, 2)



Dim コレクション As New Collection
' 項目の追加
コレクション.Add "項目1", "Key1" ' キーは省略可能
コレクション.Add "項目2"
' 項目の取得
MsgBox コレクション(1) ' インデックスで取得(1始まり)
MsgBox コレクション("Key1") ' キーで取得
' 項目の削除
コレクション.Remove 1 ' インデックスで削除Dim 辞書 As New Scripting.Dictionary
' 項目の追加
辞書.Add "A001", "ノートパソコン"
辞書.Add "B002", "プリンタ"
' または直接代入
辞書("C003") = "マウス"
' 値の取得
MsgBox 辞書("A001") ' ノートパソコン
' 存在確認
If 辞書.Exists("D004") Then MsgBox "存在します"
' 削除
辞書.Remove "B002"Dim キー配列 As Variant
キー配列 = 辞書.Keys ' すべてのキーを配列で取得
For i = 0 To 辞書.Count - 1
Debug.Print キー配列(i) & ": " & 辞書(キー配列(i))
Next i現在日付 = Date() ' 2023/9/18 など
現在時刻 = Time() ' 15:30:45 など
日時両方 = Now() ' 2023/9/18 15:30:45
' 日付の作成
特定日 = DateSerial(2023, 9, 18)
特定時刻 = TimeSerial(15, 30, 0)明日 = Date() + 1
来週 = Date() + 7
来月 = DateAdd("m", 1, Date())
前日 = DateAdd("d", -1, Date())
' 日数の差分
経過日数 = DateDiff("d", 開始日, 終了日)
経過月数 = DateDiff("m", 開始日, 終了日)
経過年数 = DateDiff("yyyy", 開始日, 終了日)短い日付 = Format(Date(), "yyyy/mm/dd")
長い日付 = Format(Date(), "yyyy年m月d日")
曜日付き = Format(Date(), "yyyy年m月d日 (aaa)")
時刻表示 = Format(Now(), "hh:nn:ss")' 平日のみカウント
平日数 = 0
For i = 開始日 To 終了日
If Weekday(i) <> vbSunday And _
Weekday(i) <> vbSaturday Then
平日数 = 平日数 + 1
End If
Next i' CSVデータの解析
データ = "鈴木,30,東京"
項目 = Split(データ, ",")
名前 = 項目(0) ' 鈴木
年齢 = 項目(1) ' 30
地域 = 項目(2) ' 東京
' 文字の置換
住所 = "東京都港区青山1-2-3"
県名 = Left(住所, InStr(住所, "都") - 1) ' 東京
' 文字列整形
コード = "000123"
表示用 = Right("000000" & 番号, 6) ' 6桁に整形
' 正規表現の利用には参照設定が必要
' Microsoft VBScript Regular Expressions
Dim regex As New RegExp
regex.Pattern = "\d{3}-\d{4}" ' 郵便番号パターン
regex.Global = True
' マッチング確認
If regex.Test("123-4567") Then
MsgBox "郵便番号の形式です"
End If
' 一致箇所の抽出
Set matches = regex.Execute("問い合わせ先: 123-4567")
For Each m In matches
MsgBox m.Value ' 123-4567
Next
Dim データ範囲 As Range
Dim 終了行 As Long
終了行 = Cells(Rows.Count, 1).End(xlUp).Row
Set データ範囲 = Range("A1:C" & 終了行)Dim グラフ As Chart
Set グラフ = Charts.Add
グラフ.SetSourceData Source:=データ範囲
' または埋め込みグラフ
Set グラフオブジェクト = ActiveSheet.Shapes.AddChart
Set グラフ = グラフオブジェクト.Chartグラフ.ChartType = xlColumnClustered ' 棒グラフ
' または
グラフ.ChartType = xlLine ' 折れ線グラフ
' または
グラフ.ChartType = xlPie ' 円グラフWith グラフ
.HasTitle = True
.ChartTitle.Text = "売上推移"
.Axes(xlCategory).HasTitle = True
.Axes(xlCategory).AxisTitle.Text = "月"
.Axes(xlValue).HasTitle = True
.Axes(xlValue).AxisTitle.Text = "金額(千円)"
.HasLegend = True
.Legend.Position = xlLegendPositionBottom
End With' 処理開始前
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Application.DisplayStatusBar = False
' 処理コード
' 処理終了後に元に戻す
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayStatusBar = True
Application.StatusBar = False
' 早期のオブジェクト解放
Set obj = Nothing
' 配列の使用
Dim データ As Variant
データ = Range("A1:Z1000").Value
' 配列で処理
Range("A1:Z1000").Value = データ
' With構文の活用
With Worksheets("Sheet1")
.Range("A1").Value = "値1"
.Range("A2").Value = "値2"
End With
' 適切なデータ型の選択
Dim i As Long ' 大きい整数の場合
Dim フラグ As Boolean ' 真偽値
' 基本的なメッセージ表示
MsgBox "処理が完了しました"
' タイトル付きメッセージ
MsgBox "保存しますか?", vbQuestion, "確認"
' ボタンの種類を指定
結果 = MsgBox("続行しますか?", _
vbYesNoCancel + vbQuestion, "選択")
' 結果の判定
If 結果 = vbYes Then
' はいが選択された場合の処理
ElseIf 結果 = vbNo Then
' いいえが選択された場合の処理
Else
' キャンセルが選択された場合の処理
End If
' 基本的な入力ダイアログ
名前 = InputBox("名前を入力してください")
' タイトルと初期値付き
年齢 = InputBox("年齢を入力してください", _
"情報入力", "20")
' 入力値の検証
Do
入力値 = InputBox("数値を入力してください")
If 入力値 = "" Then
Exit Do ' キャンセル時
End If
Loop Until IsNumeric(入力値)
' Application.InputBoxは型指定が可能
範囲 = Application.InputBox( _
"範囲を選択してください", _
Type:=8) ' 8=Range
Application.GetOpenFilename("Excelファイル (*.xlsx), *.xlsx")Private m社員ID As String
Private m氏名 As String
Public Property Get 社員ID() As String
社員ID = m社員ID
End Property
Public Property Let 社員ID(値 As String)
m社員ID = 値
End PropertyPublic Sub 表示()
MsgBox "社員ID: " & m社員ID & vbCrLf & _
"氏名: " & m氏名
End Sub
Public Function 年収計算(月給 As Long) As Long
年収計算 = 月給 * 12 + ボーナス計算(月給)
End FunctionDim 社員1 As New 社員クラス
社員1.社員ID = "E001"
社員1.氏名 = "山田太郎"
社員1.表示
年収 = 社員1.年収計算(300000)Private Sub Workbook_Open()
' ブックが開かれたときの処理
MsgBox "ようこそ!"
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' 保存前の処理
If MsgBox("保存しますか?", vbYesNo) = vbNo Then
Cancel = True ' 保存をキャンセル
End If
End SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)
' セル選択変更時の処理
StatusBar = "選択: " & Target.Address
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' セル値変更時の処理
If Target.Column = 1 Then
' A列変更時の処理
End If
End Sub' クラスモジュール内
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
' 任意のブックが開かれたときの処理
End Sub
' 通常モジュール内で初期化
Dim AppEvents As New イベントクラス
Sub 初期化()
Set AppEvents.App = Application
End SubSub メール送信()
Dim olApp As Outlook.Application
Dim olMail As Outlook.MailItem
' Outlookアプリケーション取得
Set olApp = New Outlook.Application
' メール作成
Set olMail = olApp.CreateItem(olMailItem)
With olMail
.To = "test@example.com"
.CC = "cc@example.com"
.Subject = "テスト送信"
.Body = "これはVBAから送信されたテストメールです。"
' 添付ファイル追加
.Attachments.Add "C:\Report.xlsx"
' 送信
.Send ' または .Display で表示のみ
End With
Set olMail = Nothing
Set olApp = Nothing
End SubSub 予定追加()
Dim olApp As Outlook.Application
Dim olAppt As Outlook.AppointmentItem
Set olApp = New Outlook.Application
Set olAppt = olApp.CreateItem(olAppointmentItem)
With olAppt
.Subject = "プロジェクト会議"
.Location = "会議室A"
.Start = #5/10/2023 10:00:00 AM#
.End = #5/10/2023 11:00:00 AM#
.ReminderMinutesBeforeStart = 15
.Save
End With
End SubSub メール処理()
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.Namespace
Dim olFolder As Outlook.Folder
Dim olItem As Object
Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
' 受信トレイを取得
Set olFolder = olNamespace.GetDefaultFolder(olFolderInbox)
' メールを処理
For Each olItem In olFolder.Items
If TypeOf olItem Is Outlook.MailItem Then
With olItem
If InStr(.Subject, "報告") > 0 Then
' 「報告」を含むメールの処理
Debug.Print .SenderName & ": " & .Subject
End If
End With
End If
Next
End SubDim wdApp As Word.Application
Dim wdDoc As Word.Document
' Wordアプリケーション起動
Set wdApp = New Word.Application
wdApp.Visible = True ' 表示する場合' 新規文書
Set wdDoc = wdApp.Documents.Add
' 既存文書を開く
Set wdDoc = wdApp.Documents.Open("C:\Template.docx")
' 基本的な文書編集
wdDoc.Content.Text = "これはVBAからの文書です。"
wdApp.Selection.TypeText "段落を追加します。"
wdApp.Selection.TypeParagraph' ブックマークを使った置換
wdDoc.Bookmarks("顧客名").Range.Text = "山田太郎"
' テンプレートフィールドの更新
Dim フィールド名 As String
Dim フィールド値 As String
フィールド名 = "OrderDate"
フィールド値 = Format(Date, "yyyy年mm月dd日")
For Each fld In wdDoc.Fields
If InStr(fld.Code, フィールド名) > 0 Then
fld.Result.Text = フィールド値
End If
Next fld' 差し込み印刷の設定
With wdDoc.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource _
Name:=ThisWorkbook.FullName, _
Connection:="Excel Files", _
SQLStatement:="SELECT * FROM [Sheet1$]"
' 実行
.Execute
' または指定レコードのみ
.Execute Pause:=False, _
Range:=wdSendToNewDocument, _
From:=1, To:=10
End WithDim ppApp As PowerPoint.Application
Dim ppPres As PowerPoint.Presentation
' PowerPoint起動
Set ppApp = New PowerPoint.Application
ppApp.Visible = True ' 表示する
' プレゼンテーション作成
Set ppPres = ppApp.Presentations.Add
' または既存を開く
' Set ppPres = ppApp.Presentations.Open("C:\Template.pptx")Dim ppSlide As PowerPoint.Slide
' スライド追加
Set ppSlide = ppPres.Slides.Add( _
ppPres.Slides.Count + 1, _
ppLayoutTitleAndContent) ' レイアウト指定
' タイトル設定
ppSlide.Shapes.Title.TextFrame.TextRange.Text = _
"四半期売上レポート"
' 本文テキスト追加
Dim txtBox As PowerPoint.Shape
Set txtBox = ppSlide.Shapes(2) ' 本文プレースホルダ
txtBox.TextFrame.TextRange.Text = _
"• 第1四半期:前年比20%増" & vbCrLf & _
"• 第2四半期:前年比15%増" & vbCrLf & _
"• 第3四半期:前年比18%増"' 表の埋め込み
Dim データ範囲 As Excel.Range
Set データ範囲 = Worksheets("データ").Range("A1:D10")
データ範囲.Copy
ppSlide.Shapes.PasteSpecial(DataType:=ppPasteOLEObject)
ppApp.ActiveWindow.Selection.ShapeRange.Left = 100
ppApp.ActiveWindow.Selection.ShapeRange.Top = 200
' グラフの埋め込み
Dim グラフオブジェクト As Excel.ChartObject
Set グラフオブジェクト = Worksheets("グラフ").ChartObjects(1)
グラフオブジェクト.Chart.CopyPicture
Set ppSlide = ppPres.Slides.Add( _
ppPres.Slides.Count + 1, ppLayoutBlank)
ppSlide.Shapes.Paste
' 参照設定: Microsoft Internet Controls
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
.Visible = True ' 表示する場合
.Navigate "https://example.com"
' ページ読み込み完了まで待機
Do While .Busy Or .ReadyState <> 4
DoEvents
Loop
End With
Set Edge = CreateObject("Shell.Application")
Edge.ShellExecute "msedge", URL, "", "", 1' 参照設定: Microsoft HTML Object Library
Dim Doc As MSHTML.HTMLDocument
Set Doc = IE.Document
' タグによる要素取得
Dim 要素群 As MSHTML.IHTMLElementCollection
Set 要素群 = Doc.getElementsByTagName("div")
For Each 要素 In 要素群
Debug.Print 要素.innerText
Next
' IDによる要素取得
Dim 要素 As MSHTML.IHTMLElement
Set 要素 = Doc.getElementById("content")
Debug.Print 要素.innerText
' クラスによる要素取得
Set 要素群 = Doc.getElementsByClassName("item")
Dim 入力欄 As MSHTML.HTMLInputElement
Set 入力欄 = Doc.getElementById("username")
入力欄.Value = "ユーザー名"
' ボタンクリック
Dim ボタン As MSHTML.HTMLButtonElement
Set ボタン = Doc.getElementById("login")
ボタン.ClickDim テーブル As MSHTML.HTMLTable
Set テーブル = Doc.getElementsByTagName("table")(0)
For i = 0 To テーブル.Rows.Length - 1
For j = 0 To テーブル.Rows(i).Cells.Length - 1
Cells(i + 1, j + 1).Value = _
テーブル.Rows(i).Cells(j).innerText
Next j
Next iIE.Quit
Set IE = Nothing' HTTPリクエスト送信
Sub API呼び出し()
Dim Http As Object
Set Http = CreateObject("MSXML2.XMLHTTP")
' GETリクエスト
Http.Open "GET", "https://api.example.com/data", False
' ヘッダー設定(認証など)
Http.setRequestHeader "Content-Type", "application/json"
Http.setRequestHeader "Authorization", "Bearer " & APIトークン
' 送信と応答取得
Http.send
' 応答確認
If Http.Status = 200 Then
Debug.Print Http.responseText
' JSONデータを処理
JSON解析 Http.responseText
Else
Debug.Print "エラー: " & Http.Status & " " & Http.statusText
End If
End Sub
' POSTリクエスト例
Sub データ送信()
Dim Http As Object
Set Http = CreateObject("MSXML2.XMLHTTP")
Http.Open "POST", "https://api.example.com/data", False
Http.setRequestHeader "Content-Type", "application/json"
' JSONデータ作成
Dim データ As String
データ = "{""name"":""テスト"",""value"":123}"
Http.send データ
' 応答確認
Debug.Print Http.Status
Debug.Print Http.responseText
End Sub
' ===================================================
' 目的: 売上データを集計しレポートを作成する
' 引数: 開始日 - 集計期間の開始日 (Date)
' 終了日 - 集計期間の終了日 (Date)
' 戻り値: Boolean - 成功=True、失敗=False
' 作成者: 山田太郎
' 作成日: 2023/08/15
' 更新履歴: 2023/09/01 - エラーハンドリング追加
' ===================================================
Function 売上レポート作成(開始日 As Date, 終了日 As Date) As Boolean' 変更履歴
' v1.0.0 2023/07/01 山田 - 初期バージョン
' v1.0.1 2023/07/15 鈴木 - バグ修正:計算式の誤り
' v1.1.0 2023/08/10 佐藤 - 新機能:CSV出力Dim 開始時間 As Double
開始時間 = Timer
' 処理コード
Debug.Print "処理時間: " & Timer - 開始時間 & "秒"Sub PowerQuery更新()
' すべてのクエリを更新
ActiveWorkbook.RefreshAll
' 特定のクエリのみ更新
Dim qry As WorkbookQuery
Set qry = ThisWorkbook.Queries("Query1")
ThisWorkbook.Connections("Query1").Refresh
End SubSub パラメータ設定()
' Power Query パラメータを設定
ThisWorkbook.Queries("開始日").Formula = _
"= #date(" & Year(開始日) & ", " & _
Month(開始日) & ", " & Day(開始日) & ")"
' 更新を実行
ThisWorkbook.Connections("売上データ").Refresh
End SubSub データ処理ワークフロー()
' 1. VBAでユーザー入力を取得
日付 = InputBox("対象日を入力")
' 2. パラメータをPower Queryに設定
' (上記のコード)
' 3. Power Query実行
' (上記のコード)
' 4. 結果データにVBA処理を適用
' 追加の処理、レポート生成など
End SubSub モジュールエクスポート()
Dim コンポーネント As Object
Dim パス As String
パス = ThisWorkbook.Path & "\バックアップ\"
' フォルダ作成
On Error Resume Next
MkDir パス
On Error GoTo 0
' 各コンポーネントをエクスポート
For Each コンポーネント In ThisWorkbook.VBProject.VBComponents
コンポーネント.Export パス & コンポーネント.Name & _
拡張子取得(コンポーネント.Type)
Next
End SubSub モジュールインポート()
Dim ファイル名 As String
Dim コンポーネント As Object
' ファイル選択ダイアログ
ファイル名 = Application.GetOpenFilename("VBA Files (*.bas;*.cls;*.frm), *.bas;*.cls;*.frm")
If ファイル名 <> "False" Then
' 同名モジュールがあれば削除
モジュール名 = Left(ファイル名, _
InStrRev(ファイル名, ".") - 1)
For Each コンポーネント In ThisWorkbook.VBProject.VBComponents
If コンポーネント.Name = モジュール名 Then
ThisWorkbook.VBProject.VBComponents.Remove コンポーネント
Exit For
End If
Next
' インポート
ThisWorkbook.VBProject.VBComponents.Import ファイル名
End If
End Sub' 経費精算システムの例
Sub 経費申請フォーム表示()
UserForm_経費申請.Show
End Sub
' 売上分析の例
Sub データ更新()
' データ取得
With Sheets("データ")
最終行 = .Cells(.Rows.Count, 1).End(xlUp).Row
データ = .Range("A2:F" & 最終行).Value
End With
' ピボットテーブル更新
Sheets("分析").PivotTables("売上集計").PivotCache.Refresh
' グラフ更新
Call グラフ更新処理
MsgBox "データを最新情報に更新しました"
End Sub