Excelの選択範囲をCSVにエクスポートするVBA

VBA

この記事では、Excel VBAを使用して、Excelシート上で選択された範囲をCSVファイルとして出力する方法について詳しく説明します。コードの一例を提供し、その機能と使用方法についても解説します。このスクリプトは、特定のデータセットをすばやく外部ファイルに保存する必要がある場合や、Excelデータを他のプログラムと簡単に共有したいというニーズに応えます。

使用技術

  • Microsoft Excel: データ整理と表現のプラットフォーム
  • VBA (Visual Basic for Applications): Excel内でのマクロ・プログラミング
  • ファイルI/O: VBAでのファイル入出力操作
  • Excelオブジェクトモデル: Worksheet, Range, Cellsなどのオブジェクトを使用

機能

  • 選択範囲の自動検出: Excel上で選択されたセル範囲を自動で認識
  • CSVファイル作成: 選択された範囲のデータをCSV形式で出力
  • ファイル名のカスタマイズ: ユーザーが指定したファイル名でCSVを保存
  • ユーザー確認: 処理を実行する前にユーザーによる確認が求められる
  • エラーハンドリング: 現在は基本的なエラーハンドリング(ユーザー確認)のみ
  • 単一のExcelシート対応: 現状ではアクティブなシートの選択範囲のみを出力

ソースコード

VB
Sub ExportSelectedRangeToCSV()

    ' 変数の宣言
    Dim filePath As String
    Dim cellData As Variant
    Dim i As Long, j As Long
    Dim userConfirm As VbMsgBoxResult
    Dim fileName As String
    Dim selectedRange As Range
    Dim startRow As Long, startColumn As Long, endRow As Long, endColumn As Long

    ' 初期化
    Set selectedRange = Selection
    
    ' ユーザーにCSVのファイル名を入力してもらう
    fileName = InputBox("CSVファイルの名前を入力してください。")
    
    ' ユーザーに確認
    userConfirm = MsgBox("選択された範囲でCSVを作成します。よろしいですか?", vbYesNo)
    
    ' ユーザーが「はい」と答えた場合
    If userConfirm = vbYes Then
    
        ' ファイルのパスと名前を設定
        filePath = ThisWorkbook.Path & "\" & fileName & ".csv"
        
        ' 選択範囲の開始行、開始列、終了行、終了列を取得
        startRow = selectedRange.Row
        startColumn = selectedRange.Column
        endRow = startRow + selectedRange.Rows.Count - 1
        endColumn = startColumn + selectedRange.Columns.Count - 1
        
        ' セルの範囲を変数に読み込む
        cellData = selectedRange.Value
        
        ' ファイルを出力用に開く
        Open filePath For Output As #1
        
        ' 配列の各行に対してループ
        For i = 1 To UBound(cellData, 1)
            ' 行の最初のセルを書き込む
            Print #1, CStr(cellData(i, 1));
            
            ' 行の各列に対してループ
            For j = 2 To UBound(cellData, 2)
                ' セルのデータを書き込む、カンマで区切る
                Print #1, "," & CStr(cellData(i, j));
            Next j
            
            ' CSVファイルで次の行に移動
            Print #1,
        Next i
        
        ' ファイルを閉じる
        Close #1
        
        ' CSV出力が完了したことをユーザーに通知
        MsgBox "CSV出力が成功しました。"
        
    Else
        ' ユーザーが操作をキャンセルした場合
        Exit Sub
    End If

End Sub

' MIT License
' Copyright (c) 2023 [ANJI]
'
' Permission is hereby granted, free of charge, to any person obtaining a copy
' of this software and associated documentation files (the "Software"), to deal
' in the Software without restriction, including without limitation the rights
' to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
' copies of the Software, and to permit persons to whom the Software is
' furnished to do so, subject to the following conditions:
'
' The above copyright notice and this permission notice shall be included in all
' copies or substantial portions of the Software.
'
' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
' SOFTWARE.

使い方

  1. Excelファイルを開く: 対象となるExcelファイルを開き、編集対象のシートを選択します。
  2. VBAエディタを開く: Alt + F11 キーを押してVBAエディタを開きます。
  3. 新しいモジュールを追加: 右クリック > 挿入 > モジュール で新しいVBAモジュールを作成します。
  4. コードの貼り付け: 事前に用意されたVBAコードを新しく作成したモジュールに貼り付けます。
  5. マクロの実行: VBAエディタを閉じてExcelに戻り、Alt + F8 キーを押してマクロを実行します。
  6. ファイル名を入力: ダイアログボックスが表示されるので、出力するCSVファイルの名前を入力します。
  7. 範囲を選択: ExcelシートでCSVにエクスポートしたいセル範囲を選択します。
  8. ユーザー確認: メッセージボックスが表示されるので、はい を選択して処理を進めます。
  9. CSV出力: 選択した範囲がCSVファイルとして出力され、保存先フォルダに保存されます。
  10. 確認メッセージ: CSV出力が成功した場合、確認メッセージが表示されます。

コメント

タイトルとURLをコピーしました