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")