Excelアドイン 選択したセルをTSVファイルに出力する 【第一回】

Execl,プログラミングVBA,Excelアドイン,TSVファイル

記事内に広告が含まれています。
スポンサーリンク

VBAの作成とExcelアドイン形式の保存

選択セルをTSVファイルに出力するVBAを作成して、そのVBAをExcelアドインファイルにしていきます

選択セルをTSVファイルに出力するVBA

ソースは下記の通り、選択しているセルをTSV形式でファイル化するものです

' **********************************************
' * 選択したセルをCSVファイルに出力するVBAを作成
' **********************************************
Sub SelectedCell2TsvFile()
    
    Dim selRange As Range
    Dim selVal As String
    Dim objCell As Object
    Dim strData As String
    Dim strFName As String
    Dim objFileSys As Object
    Dim sepCode As String
    
    Dim colCnt As Long
    Dim FNo As Integer
    
    sepCode = vbTab
    
    ' ファイルを扱うオブジェクト作成
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    
    ' 選択セル取得
    Set selRange = Selection
    
    ' ファイル名作成(セル選択しているExcelブックのフォルダー階層に「日付.txt」名を作る)
    strFName = objFileSys.BuildPath(ThisWorkbook.Path, Format(Now, "yyyymmdd_hhnnss") & ".txt")
    
    FNo = FreeFile
    ' ファイルオープン
    Open strFName For Output As #FNo
    
    ' ループ前の初期化
    strData = ""
    colCnt = 0
    ' 選択セルのループ
    For Each objCell In selRange
        colCnt = colCnt + 1
        delVal = objCell.Value
        ' 最終列なら1行分ファイル出力する
        If colCnt >= selRange.Columns.Count Then
            ' セルの値を付ける
            strData = strData & delVal
            'ファイルに書き込み
            Print #FNo, strData
            strData = ""
            colCnt = 0
        ' まだ最後の列じゃない場合はデリミタ(今回はTSVなのでタブ)を付ける
        Else
            ' セルの値とデリミタを付ける
            strData = strData & delVal & sepCode
        End If
    Next objCell
    
    Close #FNo
    
End Sub

少しずつ作ったり後日デバッグする時にも使うので、一旦マクロ有効ブックとして保存します

デバッグ(試し実行)

サンプルとして、下記の通りに入力したセルを選択しておきます


VBAを開け、ソースコード上にカーソルを当てた後F8キー(デバッグのステップイン)を押すことで背景黄色のデバッグカーソルが表示されます


そのままF5キー(継続)で関数を終わらせます

実行結果確認

当Excelブック(AddinApp.xlsm)と同じ階層のディレクトリに、テキストファイルが作成されました

これでアドインとして登録する関数の準備はできました。

Excelアドインファイルとして保存

今度はマクロ有効ブックが開かれた状態で、名前を付けて保存しますが、Excelアドイン (*.xlam) 形式を選択して保存します

Excelアドイン (*.xlam)は、保存しても「AddinApp.xlsm」と同じ階層のディレクトリには保存されずに
C:\Users\ユーザー固有\AppData\Roaming\Microsoft\AddInsに保存されます

また、Excelアドイン (*.xlam) ファイルを開いても、シートが無いブックが開きます

アドインを使用する

最もシンプルな方法で先程のアドインを使用する方法を記載していきます

わかりやすいように、一旦他のExcelファイルは一旦閉じた後、新しいディレクトリにExcelファイル「新規のファイル.xlsx」を作成して開きます

開発タグのExcelアドインをクリックすると

アドインのExcelファイル名と同じ名前で有効なアドインが表示されますので、選択してOKします

ここまでで、アドインとして登録されている関数を利用する準備はできていますが、なるべくシンプルに「クイックアクセスツールバー」に組み込んでみましょう

コマンドの選択をマクロにすると、関数名が表示さるので選択して追加ボタンでクイックアクセスツールバーに入れてOKします

後はテスト的にセルに適当な値を記入してセルを選択した後、クイックアクセスツールバーに登録した「SelectedCell2TsvFile」を実行します

TSVファイルはちゃんと作成されましたが、想定と違うディレクトリ(アドインファイルが存在するディレクトリ)にファイル出力されてしまいました

「ThisWorkbook.Path」 だと、実行中のマクロが記述されているブックのフォルダを指してしまったようで、下行の記述は不適切でした

    ' ファイル名作成(セル選択しているExcelブックのフォルダー階層に「日付.txt」名を作る)
    strFName = objFileSys.BuildPath(ThisWorkbook.Path, Format(Now, "yyyymmdd_hhnnss") & ".txt")

想定していたセル選択しているブックのフォルダにファイルを生成する際には下記の通り「ActiveWorkbook.Path」を使うべきでした

    ' ファイル名作成(セル選択しているExcelブックのフォルダー階層に「日付.txt」名を作る)
    strFName = objFileSys.BuildPath(ActiveWorkbook.Path, Format(Now, "yyyymmdd_hhnnss") & ".txt")
システムトラストでは一緒に働いていただける仲間を募集中です。
記事内に広告が含まれています。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ