システムを移行する際に、最も手間がかかる作業のひとつが「データ移行」です。特に、既存システムと新システムでコード体系(商品コード、部署コード、顧客コードなど)が異なる場合、単純なコピーでは移行できません。複数のコードをひとつに集約したり、逆にひとつのコードを複数に分割する必要もあります。こうした作業を手作業で行うと膨大な時間がかかり、ミスのリスクも高まります。そこで役立つのが VBAによるコード変換ツールの自動化 です。本記事では、コード変換の仕組みを整理し、VBAを使ってCSVデータを変換する方法を具体的なサンプルコード付きで解説します。
本記事で想定する状況は以下の通りです。
このように、コード変換を伴うデータ移行を効率化するためのVBA実装を紹介します。
システム移行時の最大の落とし穴は、データの互換性です。
新システムに登録できる形式に合わせておかないと、エラーが発生したり、業務が停止する可能性があります。特にコード体系はシステムごとに異なり、以下のようなケースが多く見られます。
こうした変換を手作業で行うのは現実的ではありません。そのため、自動化が必須となります。
まず、変換ルールをExcelやCSVで定義します。例として、次のような変換表を「CodeMapping.xlsx」にまとめておきます。
旧コード | 新コード |
---|---|
A01 | A |
A02 | A |
A03 | A |
1001 | 1001-01 |
1001 | 1001-02 |
X123 | CUST001 |
この表を参照しながら、既存システムから出力したCSVを変換します。
処理の流れは以下の通りです。
以下は、Excel VBAで実装したコード変換ツールのサンプルです。
Option Explicit
Sub CodeConversion()
Dim dict As Object
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim codeMap As Collection
Dim arr As Variant
Dim inputFile As String, outputFile As String
Dim inputData As Variant
Dim fso As Object, ts As Object
Dim line As String, fields As Variant
Dim outData As String
Dim key As String
' 変換表の読み込み
Set dict = CreateObject("Scripting.Dictionary")
Set ws = ThisWorkbook.Sheets("Mapping") '変換表シート
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
key = ws.Cells(i, 1).Value
If Not dict.exists(key) Then
Set codeMap = New Collection
dict.Add key, codeMap
End If
dict(key).Add ws.Cells(i, 2).Value
Next i
' 入出力ファイルパス
inputFile = ThisWorkbook.Path & "\input.csv"
outputFile = ThisWorkbook.Path & "\output.csv"
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(inputFile, 1)
outData = ""
Do Until ts.AtEndOfStream
line = ts.ReadLine
fields = Split(line, ",")
If dict.exists(fields(0)) Then
For Each key In dict(fields(0))
fields(0) = key
outData = outData & Join(fields, ",") & vbCrLf
Next key
Else
outData = outData & line & vbCrLf
End If
Loop
ts.Close
' 出力ファイルに保存
Dim outTS As Object
Set outTS = fso.CreateTextFile(outputFile, True)
outTS.Write outData
outTS.Close
MsgBox "変換完了!出力ファイル:" & outputFile
End Sub
このVBAツールを使えば、以下のような業務に活用できます。
特に、数万件のレコードを変換する場合でも数秒〜数分で処理が完了するため、効率と精度が大幅に向上します。
システム移行において、コード体系の違いを吸収するためには コード変換の自動化 が欠かせません。VBAを用いたコード変換ツールを活用すれば、移行作業の効率化とミス防止を同時に実現できます。今回紹介したサンプルコードをベースに、自社のルールに合わせてカスタマイズすることで、スムーズなシステム移行を実現できるでしょう。