hiko-blog_Excel VBA活用術

VBA備忘録。。。

MENU

保存先を2カ所設定

Sub GetDataFromAccessAndSave()

    ' 変数の定義
    Dim conn As Object
    Dim rs As Object
    Dim connString As String
    Dim query As String
    Dim newWb As Workbook
    Dim newWs As Worksheet
    Dim thisWs As Worksheet
    Dim desktopPath As String
    Dim filePath As String
    
    ' Accessデータベースへの接続文字列 (適切に設定してください)
    connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\access\database.accdb;"
    
    ' 実行するクエリ (適切に設定してください)
    query = "SELECT * FROM YourTableName"
    
    ' Accessへの接続とクエリの実行
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    conn.Open connString
    rs.Open query, conn
    
    ' 新規ブックを作成
    Set newWb = Workbooks.Add
    Set newWs = newWb.Sheets(1)
    
    ' クエリ結果を新しいワークブックのシートに書き込む
    newWs.Cells(1, 1).CopyFromRecordset rs
    
    ' 「検索結果」というシート名に設定
    newWs.Name = "検索結果"
    
    ' ThisWorkbookの「検索結果」シートを取得
    Set thisWs = ThisWorkbook.Sheets("検索結果")
    
    ' 既存のデータをクリア (ThisWorkbookの「検索結果」シート)
    thisWs.Cells.Clear
    
    ' ThisWorkbookの「検索結果」シートにデータをコピー
    thisWs.Cells(1, 1).CopyFromRecordset rs
    
    ' デスクトップパスを取得
    desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    filePath = desktopPath & "\Access_Query_Result.xlsx"
    
    ' 新規ブックをデスクトップに保存
    newWb.SaveAs filePath
    
    ' クリーンアップ
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
    Set newWs = Nothing
    Set thisWs = Nothing
    Set newWb = Nothing
    
    MsgBox "データをデスクトップに保存しました: " & filePath

End Sub

Outlook送信前に確認メッセージを表示

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim response As Integer
    response = MsgBox("本当にこのメールを送信しますか?", vbYesNo + vbQuestion, "送信確認")
    
    If response = vbNo Then
        Cancel = True ' 送信をキャンセル
    End If
End Sub

添付ファイルがZIPファイルの場合に自動的にパスワードを送信するようにする

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim attachment As Object
    Dim strTo As String
    Dim strCC As String
    Dim objMail As Object
    Dim password As String
    Dim fileExtension As String
    Dim hasZipAttachment As Boolean
    Dim userResponse As Integer

    ' 添付ファイルの有無を確認
    hasZipAttachment = False
    strTo = Item.To
    strCC = Item.CC ' CCを取得

    ' 添付ファイルを確認
    For Each attachment In Item.Attachments
        fileExtension = LCase(Right(attachment.FileName, 4)) ' 拡張子を取得
        If fileExtension = ".zip" Then
            hasZipAttachment = True
            Exit For
        End If
    Next

    ' 添付ファイルがZIPの場合にポップアップを表示
    If hasZipAttachment Then
        ' ユーザーに確認ダイアログを表示
        userResponse = MsgBox("このメールにはZIPファイルが添付されています。パスワード付きのメールを送信しますか?", _
                              vbYesNo + vbQuestion, "パスワード確認")

        ' ユーザーが「はい」を選択した場合のみパスワードメールを送信
        If userResponse = vbYes Then
            ' パスワードを設定(例:ランダムなパスワードを生成)
            password = "12345678" ' ここに任意のパスワードを設定

            ' パスワードを送信するメールを作成
            Set objMail = Application.CreateItem(0) ' 新しいメールアイテムを作成
            objMail.Subject = "PW " & Item.Subject ' 元の件名の前に「PW」を追加
            objMail.To = strTo ' 送信先(To)を元のメールからコピー
            objMail.CC = strCC ' CCを元のメールからコピー
            objMail.Body = "こんにちは。" & vbCrLf & vbCrLf & _
                          "以下がZIPファイルのパスワードです。" & vbCrLf & _
                          password & vbCrLf & vbCrLf & _
                          "よろしくお願いします。"

            ' メールを送信
            objMail.Send
        End If
    End If
End Sub

 

vbsでおしゃべりさせる

Option Explicit
Dim voice
Set voice = CreateObject("sapi.SpVoice")

voice.Rate = 3 '-10~10の範囲で指定
voice.Volume = 100 '0~100の範囲で指定

voice.Priority = 0
voice.Speak "こんにちは、私はあなたのコンピュータです。"
Set voice = Nothing

Accessクエリを実行して、Oracleデータベースからデータを取得

Sub ConnectToOracleAndRunAccessQuery()
    Dim conn As Object
    Dim rs As Object
    Dim dbPath As String
    Dim connStr As String
    Dim sql As String
    Dim ws As Worksheet
    Dim i As Integer

    ' Excelシートの設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Cells.Clear ' シートの内容をクリア

    ' Accessデータベースのパスを指定
    dbPath = "C:\path\to\your\access\database.accdb" ' Accessデータベースのフルパスを指定

    ' Oracle ODBC接続文字列を構築
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";"

    ' Oracle接続文字列を追加(ユーザー名、パスワード、サービス名を指定)
    connStr = connStr & "User ID=myusername;Password=mypassword;Data Source=ORCL"

    ' Accessデータベースに接続(Oracleに接続)
    Set conn = CreateObject("ADODB.Connection")
    conn.Open connStr

    ' 実行するAccessクエリのSQL文(Oracleにアクセスするためのクエリ)
    sql = "SELECT * FROM YourAccessQuery" ' Access内で作成したクエリ名

    ' クエリの結果を取得
    Set rs = conn.Execute(sql)

    ' データをExcelシートに出力
    i = 1
    Do While Not rs.EOF
        ws.Cells(i, 1).Value = rs.Fields(0).Value ' 1列目のデータ
        ws.Cells(i, 2).Value = rs.Fields(1).Value ' 2列目のデータ
        ' 必要に応じて他の列も出力
        i = i + 1
        rs.MoveNext
    Loop

    ' 後処理
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing

    MsgBox "接続とクエリの実行が完了しました"
End Sub

ファイルダイアログの利用

Sub OpenFileDialog()
    Dim dialog As FileDialog
    Set dialog = Application.FileDialog(msoFileDialogFilePicker)
    
    ' デスクトップを最初に開く
    dialog.InitialFileName = Environ("USERPROFILE") & "\Desktop\"
    
    ' 指定フォルダを最初に開く
    dialog.InitialFileName = "Z:\Work\"
    
    ' ダイアログを表示
    If dialog.Show = -1 Then
        MsgBox "選択されたファイル: " & dialog.SelectedItems(1)
    End If
End Sub

指定フォルダ内にエクセルbookを新規作成時、連番で作成

Sub ファイル名連番作成()
    Dim folderPath As String
    Dim fileName As String
    Dim newFileName As String
    Dim maxNum As Long
    Dim file As Object
    Dim fso As Object
    Dim i As Long
    
    ' フォルダーのパスを指定(例:C:\Users\yourname\Documents\ExcelFiles)
    folderPath = "C:\YourFolderPath\"
    
    ' FileSystemObjectを使用してフォルダー内のファイルを取得
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダー内のファイルを順番に処理
    maxNum = 0
    For Each file In fso.GetFolder(folderPath).Files
        ' Excelブックのみを対象にする(拡張子が .xlsm または .xlsx)
        If file.Name Like "*.xls*" Then
            ' ファイル名が "サンプル_2024-xxx" の形式になっていることを確認
            If file.Name Like "サンプル_2024-###.xls*" Then
                ' 連番部分を抽出
                i = Val(Mid(file.Name, Len("サンプル_2024-") + 1, Len(file.Name) - Len("サンプル_2024-") - 4))
                If i > maxNum Then
                    maxNum = i
                End If
            End If
        End If
    Next file
    
    ' 新しいファイル名の作成
    maxNum = maxNum + 1
    newFileName = "サンプル_2024-" & Format(maxNum, "000") & ".xlsx"
    
    ' 新しいブックの作成
    Workbooks.Add
    ' 新しいブックに保存
    ActiveWorkbook.SaveAs folderPath & newFileName
    
    ' 作成したブックの Sheet1 にファイル名の連番を A1 に記載
    ActiveWorkbook.Sheets(1).Range("A1").Value = "2024-" & Format(maxNum, "000")
    
    ' 完了メッセージ
    MsgBox "新しいファイルが作成されました: " & newFileName
End Sub

 

Sub ファイル名連番作成2()

'/ひな形を基にbook作成する


    Dim folderPath As String
    Dim templateFile As String
    Dim newFileName As String
    Dim maxNum As Long
    Dim file As Object
    Dim fso As Object
    Dim i As Long
    Dim templateBook As Workbook
    Dim sheet As Worksheet
    
    ' フォルダーのパスを指定(Zドライブの指定されたフォルダー)
    folderPath = "C:\YourFolderPath\"
    
    ' ひな形ファイル名(例:Template.xlsx)
    templateFile = folderPath & "ひな形.xlsx"
    
    ' FileSystemObjectを使用してフォルダー内のファイルを取得
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダー内のファイルを順番に処理
    maxNum = 0
    For Each file In fso.GetFolder(folderPath).Files
        ' ファイル名に "サンプル" を含むExcelファイルのみを対象
        If file.Name Like "*サンプル*" And file.Name Like "*.xls*" Then
            ' ファイル名の連番部分を抽出(例:サンプル_2024-001.xlsx なら、001を抽出)
            If file.Name Like "サンプル_2024-###.xls*" Then
                i = Val(Mid(file.Name, Len("サンプル_2024-") + 1, Len(file.Name) - Len("サンプル_2024-") - 4))
                If i > maxNum Then
                    maxNum = i
                End If
            End If
        End If
    Next file
    
    ' 新しいファイル名の作成
    maxNum = maxNum + 1
    newFileName = "サンプル_2024-" & Format(maxNum, "000") & ".xlsx"
    
    ' ひな形ファイルを開く
    Set templateBook = Workbooks.Open(templateFile)
    
    ' 新しいファイル名で保存
    templateBook.SaveAs folderPath & newFileName
    
    ' ひな形ファイルのシートを取得
    On Error Resume Next
    Set sheet = templateBook.Sheets("①")
    On Error GoTo 0
    
    ' シートが存在する場合、G1に連番を記載
    If Not sheet Is Nothing Then
        sheet.Range("G1").Value = "2024-" & Format(maxNum, "000")
    Else
        MsgBox "シート「①」が見つかりません。"
    End If
    
    ' 完了メッセージ
    MsgBox "新しいファイルが作成されました: " & newFileName
    
    ' ひな形ファイルを閉じる(変更は保存する)
    templateBook.Close SaveChanges:=True
    
End Sub

 

 

 

Sub ファイル名連番作成3()

    '/ひな形を基にbook作成する,別ExcelbookのDataシート③複製処理
    
    Dim folderPath As String
    Dim templateFile As String
    Dim newFileName As String
    Dim maxNum As Long
    Dim file As Object
    Dim fso As Object
    Dim i As Long
    Dim templateBook As Workbook
    Dim sheet As Worksheet
    Dim dataFolderPath As String
    Dim dataFile As String
    Dim dataBook As Workbook
    Dim dataSheet As Worksheet
    
    ' フォルダーのパスを指定(Zドライブの指定されたフォルダー)
    folderPath = "C:\YourFolderPath\"
    
    ' ひな形ファイル名(例:Template.xlsx)
    templateFile = folderPath & "ひな形.xlsx"
    
    ' 取得するデータファイルのフォルダーパスを指定(別フォルダ)
    dataFolderPath = "C:\YourDataFolderPath\"
    
    ' FileSystemObjectを使用してフォルダー内のファイルを取得
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダー内のファイルを順番に処理
    maxNum = 0
    For Each file In fso.GetFolder(folderPath).Files
        ' ファイル名に "サンプル" を含むExcelファイルのみを対象
        If file.Name Like "*サンプル*" And file.Name Like "*.xls*" Then
            ' ファイル名の連番部分を抽出(例:サンプル_2024-001.xlsx なら、001を抽出)
            If file.Name Like "サンプル_2024-###.xls*" Then
                i = Val(Mid(file.Name, Len("サンプル_2024-") + 1, Len(file.Name) - Len("サンプル_2024-") - 4))
                If i > maxNum Then
                    maxNum = i
                End If
            End If
        End If
    Next file
    
    ' 新しいファイル名の作成
    maxNum = maxNum + 1
    newFileName = "サンプル_2024-" & Format(maxNum, "000") & ".xlsx"
    
    ' ひな形ファイルを開く
    Set templateBook = Workbooks.Open(templateFile)
    
    ' 新しいファイル名で保存
    templateBook.SaveAs folderPath & newFileName
    
    ' ひな形ファイルのシートを取得
    On Error Resume Next
    Set sheet = templateBook.Sheets("①")
    On Error GoTo 0
    
    ' シートが存在する場合、G1に連番を記載
    If Not sheet Is Nothing Then
        sheet.Range("G1").Value = "2024-" & Format(maxNum, "000")
    Else
        MsgBox "シート「①」が見つかりません。"
    End If
    
    ' ひな形ファイルのシート「③」に、別フォルダから「Data」シートの「③」を転記
    On Error Resume Next
    Set dataBook = Workbooks.Open(dataFolderPath & "DataBook.xlsx")
    On Error GoTo 0
    
    If Not dataBook Is Nothing Then
        On Error Resume Next
        Set dataSheet = dataBook.Sheets("③")  ' データファイルのシート③を取得
        On Error GoTo 0
        
        If Not dataSheet Is Nothing Then
            ' シート③の内容をコピーして、ひな形ファイルのシート③に貼り付け
            dataSheet.UsedRange.Copy Destination:=templateBook.Sheets("③").Range("A1")
        Else
            MsgBox "「③」シートが見つかりません。"
        End If
        ' DataBookを閉じる
        dataBook.Close SaveChanges:=False
    Else
        MsgBox "DataBook.xlsxが見つかりません。"
    End If
    
    ' 完了メッセージ
    MsgBox "新しいファイルが作成されました: " & newFileName
    
    ' ひな形ファイルを閉じる(変更は保存する)
    templateBook.Close SaveChanges:=True
    
End Sub

 

 

 

Sub ファイル名連番作成4()

    '/ひな形を基にbook作成する,別ExcelbookのDataシート②、③も複製処理
    

    Dim folderPath As String
    Dim templateFile As String
    Dim newFileName As String
    Dim maxNum As Long
    Dim file As Object
    Dim fso As Object
    Dim i As Long
    Dim templateBook As Workbook
    Dim sheet As Worksheet
    Dim dataFolderPath As String
    Dim dataFile As String
    Dim dataBook As Workbook
    Dim dataSheet As Worksheet
    Dim templateSheet2 As Worksheet
    Dim lastRow As Long
    
    ' フォルダーのパスを指定(Zドライブの指定されたフォルダー)
    folderPath = "Z:\Work\"
    
    ' ひな形ファイル名(例:Template.xlsx)
    templateFile = folderPath & "ひな形.xlsx"
    
    ' 取得するデータファイルのフォルダーパスを指定(別フォルダ)
    dataFolderPath = "Z:\Work\"
    
    ' FileSystemObjectを使用してフォルダー内のファイルを取得
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダー内のファイルを順番に処理
    maxNum = 0
    For Each file In fso.GetFolder(folderPath).Files
        ' ファイル名に "サンプル" を含むExcelファイルのみを対象
        If file.Name Like "*サンプル*" And file.Name Like "*.xls*" Then
            ' ファイル名の連番部分を抽出(例:サンプル_2024-001.xlsx なら、001を抽出)
            If file.Name Like "サンプル_2024-###.xls*" Then
                i = Val(Mid(file.Name, Len("サンプル_2024-") + 1, Len(file.Name) - Len("サンプル_2024-") - 4))
                If i > maxNum Then
                    maxNum = i
                End If
            End If
        End If
    Next file
    
    ' 新しいファイル名の作成
    maxNum = maxNum + 1
    newFileName = "サンプル_2024-" & Format(maxNum, "000") & ".xlsx"
    
    ' ひな形ファイルを開く
    Set templateBook = Workbooks.Open(templateFile)
    
    ' 新しいファイル名で保存
    templateBook.SaveAs folderPath & newFileName
    
    ' ひな形ファイルのシートを取得
    On Error Resume Next
    Set sheet = templateBook.Sheets("①")
    On Error GoTo 0
    
    ' シートが存在する場合、G1に連番を記載
    If Not sheet Is Nothing Then
        sheet.Range("G1").Value = "2024-" & Format(maxNum, "000")
    Else
        MsgBox "シート「①」が見つかりません。"
    End If
    
    ' ひな形ファイルのシート「③」に、別フォルダから「Data」シートの「③」を転記
    On Error Resume Next
    Set dataBook = Workbooks.Open(dataFolderPath & "DataBook.xlsx")
    On Error GoTo 0
    
    If Not dataBook Is Nothing Then
        On Error Resume Next
        Set dataSheet = dataBook.Sheets("③")  ' データファイルのシート③を取得
        On Error GoTo 0
        
        If Not dataSheet Is Nothing Then
            ' シート③の内容をコピーして、ひな形ファイルのシート③に貼り付け
            dataSheet.UsedRange.Copy Destination:=templateBook.Sheets("③").Range("A1")
        Else
            MsgBox "「③」シートが見つかりません。"
        End If
'        ' DataBookを閉じる
'        dataBook.Close SaveChanges:=False
    Else
        MsgBox "DataBook.xlsxが見つかりません。"
    End If

    ' dataBook.Sheets("②")のB2:C列の最終行を取得し、その範囲をコピーしてひな形ファイルのシート2に貼り付け
    On Error Resume Next
    Set dataSheet = dataBook.Sheets("②")  ' DataBookのシート②を取得
    On Error GoTo 0
    
    If Not dataSheet Is Nothing Then
        ' B列の最終行を取得
        lastRow = dataSheet.Cells(dataSheet.Rows.Count, "B").End(xlUp).Row
        
        ' B2:C列の最終行までをコピー
        If lastRow >= 2 Then ' B2 からデータがある場合のみコピー
            dataSheet.Range("B2:C" & lastRow).Copy
            
            ' ひな形ファイルのシート②に貼り付け
            templateBook.Sheets("②").Range("B2").PasteSpecial Paste:=xlPasteValues
        Else
            MsgBox "B列にデータがありません。"
        End If
    Else
        MsgBox "「②」シートが見つかりません。"
    End If
    
    ' 完了メッセージ
    MsgBox "新しいファイルが作成されました: " & newFileName
    
    ' ひな形ファイルを閉じる(変更は保存する)
    templateBook.Close SaveChanges:=True
    
End Sub

 

 

 

 

 

Sub ファイル名連番作成5()

    '/ひな形を基にbook作成する,別ExcelbookのDatabook③、Databook②も複製処理
    
    Dim folderPath As String
    Dim templateFile As String
    Dim newFileName As String
    Dim maxNum As Long
    Dim file As Object
    Dim fso As Object
    Dim i As Long
    Dim templateBook As Workbook
    Dim sheet As Worksheet
    Dim dataFolderPath1 As String ' Databook.xlsxがあるフォルダのパス
    Dim dataFolderPath2 As String ' Databook2.xlsxがあるフォルダのパス
    Dim dataBook1 As Workbook
    Dim dataBook2 As Workbook
    Dim dataSheet1 As Worksheet
    Dim dataSheet2 As Worksheet
    Dim lastRow As Long
    
    ' フォルダーのパスを指定(Zドライブの指定されたフォルダー)
    folderPath = "C:\YourFolderPath\"
    
    ' ひな形ファイル名(例:Template.xlsx)
    templateFile = folderPath & "ひな形.xlsx"
    
    ' 取得するデータファイルのフォルダーパスを指定(Databook.xlsxがあるフォルダ)
    dataFolderPath1 = "C:\YourDataFolderPath1\"
    
    ' 別のデータファイルのフォルダーパスを指定(Databook2.xlsxがあるフォルダ)
    dataFolderPath2 = "C:\YourDataFolderPath2\"
    
    ' FileSystemObjectを使用してフォルダー内のファイルを取得
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダー内のファイルを順番に処理
    maxNum = 0
    For Each file In fso.GetFolder(folderPath).Files
        ' ファイル名に "サンプル" を含むExcelファイルのみを対象
        If file.Name Like "*サンプル*" And file.Name Like "*.xls*" Then
            ' ファイル名の連番部分を抽出(例:サンプル_2024-001.xlsx なら、001を抽出)
            If file.Name Like "サンプル_2024-###.xls*" Then
                i = Val(Mid(file.Name, Len("サンプル_2024-") + 1, Len(file.Name) - Len("サンプル_2024-") - 4))
                If i > maxNum Then
                    maxNum = i
                End If
            End If
        End If
    Next file
    
    ' 新しいファイル名の作成
    maxNum = maxNum + 1
    newFileName = "サンプル_2024-" & Format(maxNum, "000") & ".xlsx"
    
    ' ひな形ファイルを開く
    Set templateBook = Workbooks.Open(templateFile)
    
    ' 新しいファイル名で保存
    templateBook.SaveAs folderPath & newFileName
    
    ' ひな形ファイルのシートを取得
    On Error Resume Next
    Set sheet = templateBook.Sheets("①")
    On Error GoTo 0
    
    ' シートが存在する場合、G1に連番を記載
    If Not sheet Is Nothing Then
        sheet.Range("G1").Value = "2024-" & Format(maxNum, "000")
    Else
        MsgBox "シート「①」が見つかりません。"
    End If
    
    ' ひな形ファイルのシート「③」に、Databook.xlsx(dataFolderPath1)からデータを転記
    On Error Resume Next
    Set dataBook1 = Workbooks.Open(dataFolderPath1 & "Databook.xlsx")
    On Error GoTo 0
    
    If Not dataBook1 Is Nothing Then
        On Error Resume Next
        Set dataSheet2 = dataBook1.Sheets("③")  ' Databook.xlsx のシート③を取得
        On Error GoTo 0
        
        If Not dataSheet2 Is Nothing Then
            ' シート③の内容をコピーして、ひな形ファイルのシート③に貼り付け
            dataSheet2.UsedRange.Copy Destination:=templateBook.Sheets("③").Range("A1")
        Else
            MsgBox "「③」シートが見つかりません。"
        End If
        ' Databook.xlsxを閉じる
        dataBook1.Close SaveChanges:=False
    Else
        MsgBox "Databook.xlsxが見つかりません。"
    End If

    ' ひな形ファイルのシート②に、Databook2.xlsx(dataFolderPath2)のSheet1のデータを転記
    On Error Resume Next
    Set dataBook2 = Workbooks.Open(dataFolderPath2 & "Databook2.xlsx")
    On Error GoTo 0
    
    If Not dataBook2 Is Nothing Then
        On Error Resume Next
        Set dataSheet1 = dataBook2.Sheets("Sheet1")  ' Databook2.xlsx のSheet1を取得
        On Error GoTo 0
        
        If Not dataSheet1 Is Nothing Then
            ' Sheet1のB2:C列の最終行を取得
            lastRow = dataSheet1.Cells(dataSheet1.Rows.Count, "B").End(xlUp).Row
            
            ' B2:C列の最終行までをコピー
            If lastRow >= 2 Then ' B2 からデータがある場合のみコピー
                dataSheet1.Range("B2:C" & lastRow).Copy
                
                ' ひな形ファイルのシート②に貼り付け
                templateBook.Sheets("②").Range("B2").PasteSpecial Paste:=xlPasteValues
            Else
                MsgBox "B列にデータがありません。"
            End If
        Else
            MsgBox "「Sheet1」シートが見つかりません。"
        End If
        ' Databook2.xlsxを閉じる
        dataBook2.Close SaveChanges:=False
    Else
        MsgBox "Databook2.xlsxが見つかりません。"
    End If

    ' 完了メッセージ
    MsgBox "新しいファイルが作成されました: " & newFileName
    
    ' ひな形ファイルを閉じる(変更は保存する)
    templateBook.Close SaveChanges:=True
    
End Sub

セルの値を他のシートに転記 'デスクトップを初期ディレクトリとして設定追加

Sub CopyDataToAnotherSheet()
    Dim sourceWorkbook As Workbook
    Dim sourceSheet As Worksheet
    Dim destinationSheet As Worksheet
    Dim sourceFilePath As String
    

  ' //----------------------------------------------------------

  'デスクトップを初期ディレクトリとして設定

 Dim desktopPath As String

     ' デスクトップのパスを取得    
     desktopPath = Environ("USERPROFILE") & "\Desktop"

     ChDrive Left(desktopPath, 1) ' ドライブを変更
     ChDir desktopPath ' ディレクトリを変更

'--------------------------------------------------------------//


    ' ファイル選択ダイアログを表示して、ファイルパスを取得
    sourceFilePath = Application.GetOpenFilename("Excel Files (*.xls; *.xlsx), *.xls; *.xlsx", , "ファイルを選択")
    
    ' キャンセルが押された場合、処理を終了
    If sourceFilePath = "False" Then
        MsgBox "ファイルが選択されませんでした。", vbExclamation
        Exit Sub
    End If
    
    ' 選択したファイルを開く
    Set sourceWorkbook = Workbooks.Open(sourceFilePath)
    
    ' コピー元のシートとコピー先のシートを設定
    Set sourceSheet = sourceWorkbook.Sheets("Sheet1") ' コピー元のシート名を指定
    Set destinationSheet = ThisWorkbook.Sheets("Sheet2") ' コピー先のシート名を指定
    
    ' コピー元シートからデータをコピーして、コピー先シートに貼り付け
    destinationSheet.Range("A1").Value = sourceSheet.Range("A1").Value

 

 ’' UsedRangeでシート全体をコピー

 ’’sourceSheet.UsedRange.Copy destinationSheet.Range("A1") 
    


    ' ファイルを閉じる(保存しない)
    sourceWorkbook.Close SaveChanges:=False
    
    MsgBox "データのコピーが完了しました。", vbInformation
End Sub

特定の文字列を検索して強調表示

Sub HighlightText()
    Dim cell As Range
    Dim searchText As String
    
    ' ユーザーに検索したい文字列を入力してもらう
    searchText = InputBox("検索したい文字列を入力してください", "文字列の検索")
    
    ' 入力が空でない場合に処理を実行
    If searchText <> "" Then
        For Each cell In ActiveSheet.UsedRange
            If InStr(cell.Value, searchText) > 0 Then
                cell.Interior.Color = RGB(255, 255, 0) ' 背景色を黄色に変更
            End If
        Next cell
    Else
        MsgBox "検索する文字列が入力されませんでした。", vbExclamation
    End If
End Sub

セル内の前後のスペースや改行を削除


Sub TrimSpacesAndNewlines()
    Dim cell As Range
    For Each cell In Selection
        ' セルの前後のスペースと改行(Chr(10))を削除
        cell.Value = Trim(Replace(cell.Value, Chr(10), ""))
    Next cell
End Sub

フォルダの選択ダイアログを表示する

Sub SelectFolder()
    Dim folderPath As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ' ユーザーが「OK」をクリックした場合
            folderPath = .SelectedItems(1)
            MsgBox "選択したフォルダ: " & folderPath
        End If
    End With
End Sub

指定した条件に基づいてセルを強調表示する

Sub HighlightCells()
    Dim cell As Range
    For Each cell In Range("A1:A10")
        If cell.Value > 50 Then
            cell.Interior.Color = RGB(255, 0, 0) ' 赤色
        End If
    Next cell
End Sub