業務改善!ExcelマクロVBA

ExcelマクロVBAで、とにかく楽をしたい!実際に仕事で楽になった事、便利になった事を紹介しつつ進めていきます。

UTF-8でCSV出力しろ!


 

過日、仕事場のWebアプリケーションにて、クソめんどくさい仕事をしていたときのこと。

 

業務内容はこうだ。 

 

アプリの入力フォームに、〇〇〇依頼データとして、IDやら、名称やら、数量やら、その他、色々打ち込んで登録する。すなわち、入力/登録作業である。 

 

その作業は日によって、1レコード分だけ打ち込むだけの日もあれば、50レコード以上打ち込まねばならん日もある。

 

 

 

俺は1年近くこれを手入力で続けていた......。ダサい!非常にダサすぎるゼ!

 

 

 

よって、俺はダサい俺から決別するために、アクションを起こした。

 

ExcelマクロVBAWindows PowerShellの二刀流で成敗してシンゼヨウ!!

 

(左手の剣)

・入力用CSVファイルを自動生成(ExcelマクロVBA

 ※Excelシートのテーブルから、CSV出力する。

 ※文字コードUTF-8とする。

 

(右手の剣)

・Webアプリに自動で入力/登録するスクリプトWindows PowerShell

 ※IE自動制御によって、アプリの各オブジェクトに入力用CSVからデータを自動入力/登録

 

以下に、左手の剣について記す。

 

Excelシートはこんな感じ。

君の一番すきな人は、誰だ?!(^^)/

 

ここから、ExcelマクロVBAを使って、UTF-8CSV出力するゼ!

 

f:id:acoustic_groove:20171110234103p:plain

 

 

▼ソースはこれ 

 

Option Explicit

'-----------------------------------------------------
' 参照設定:Microsoft ActiveX Data Objects 6.1 Library
'-----------------------------------------------------
'最終列番号
Const MAXCOL As Integer = 3

'CSVファイル名
Const FILENAME As String = "入力用データ.csv"

'===========================================
' 処理名 :CSV作成処理
' 機能概要:UTF-8でCSV出力する
'===========================================
Sub createCSV()

    'ストリーム、最終行番号
    Dim outStream As New ADODB.Stream
    Dim maxRow As Integer
     
    '最終行取得
    maxRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    
    'ストリーム準備
    Dim i As Integer
    Dim j As Integer
    Dim line As String
    
    With outStream
        .Type = adTypeText
        .Charset = "UTF-8"
        .LineSeparator = adCRLF
        .Open
    End With
    
    '全レコードへの処理
    For i = 1 To maxRow
        
        '1列目のみカンマなし
        line = ActiveSheet.Cells(i, 1).Value
        
        '2列目以降
        For j = 2 To MAXCOL
            line = line & "," & ActiveSheet.Cells(i, j).Value
        Next j
    
        'i行目のレコードをoutStreamに出力
        outStream.WriteText line, adWriteLine
    Next i

    '出力CSV保存
    outStream.SaveToFile ThisWorkbook.Path & "" & FILENAME, adSaveCreateOverWrite
    
    '後処理
    outStream.Close
    Set outStream = Nothing
    MsgBox "出力完了!", vbOKOnly + vbInformation, "CSV作成処理"
    
End Sub

 

・2重のForループの中で1列目と、2列目以降でカンマの処理に気をつける。
CSVは存在していなければ、勝手に作る。存在していたら、問答無用で上書き。
・1列目の最終行でレコード数を決定するので、シートに悪戯落書き禁止!

 

 

▼出力CSVだゼ!

UTF-8でCRLFになっているのを確認。

 

f:id:acoustic_groove:20171111001645p:plain

 

ExcelマクロVBA、イエーイ!!

 

こっちもやってるゼ!

acoustic-groove2.hatenablog.com