システムを移行する際に、最も手間がかかる作業のひとつが「データ移行」です。特に、既存システムと新システムでコード体系(商品コード、部署コード、顧客コードなど)が異なる場合、単純なコピーでは移行できません。複数のコードをひとつに集約したり、逆にひとつのコードを複数に分割する必要もあります。こうした作業を手作業で行うと膨大な時間がかかり、ミスのリスクも高まります。そこで役立つのが VBAによるコード変換ツールの自動化 です。本記事では、コード変換の仕組みを整理し、VBAを使ってCSVデータを変換する方法を具体的なサンプルコード付きで解説します。
前提条件(状況、概要)
本記事で想定する状況は以下の通りです。
- 既存システムからCSV形式でデータをエクスポートする。
- 新システムにインポートする際、コード体系を変換する必要がある。
- 複数の旧コードを新しいひとつのコードにまとめる場合がある。
- ひとつの旧コードを複数の新コードに分ける場合がある。
- 変換ルールは「コード変換表」としてExcelやCSVにまとめておく。
- VBAを使って、自動的に変換処理を行い、新システム用のCSVを出力する。
このように、コード変換を伴うデータ移行を効率化するためのVBA実装を紹介します。
データ移行におけるコード変換の重要性
システム移行時の最大の落とし穴は、データの互換性です。
新システムに登録できる形式に合わせておかないと、エラーが発生したり、業務が停止する可能性があります。特にコード体系はシステムごとに異なり、以下のようなケースが多く見られます。
- 部署コード「A01」「A02」「A03」を、新システムでは「A」に統合。
- 商品コード「1001」を「1001-01」「1001-02」に分割。
- 顧客コード「X123」を「CUST001」に置き換える。
こうした変換を手作業で行うのは現実的ではありません。そのため、自動化が必須となります。
コード変換表の準備
まず、変換ルールをExcelやCSVで定義します。例として、次のような変換表を「CodeMapping.xlsx」にまとめておきます。
旧コード | 新コード |
---|---|
A01 | A |
A02 | A |
A03 | A |
1001 | 1001-01 |
1001 | 1001-02 |
X123 | CUST001 |
この表を参照しながら、既存システムから出力したCSVを変換します。
VBAによるコード変換処理の流れ
処理の流れは以下の通りです。
- 変換表の読み込み
ExcelやCSVにまとめた変換ルールをDictionary(連想配列)に格納する。 - 既存CSVの読み込み
旧システムからエクスポートされたCSVを行ごとに読み込む。 - コードの変換処理
読み込んだコードを変換表に従って置き換える。
ひとつの旧コードに対して複数の新コードがある場合は、複製して出力。 - 新CSVの出力
変換後のデータを新しいCSVファイルとして保存する。
VBAサンプルコード:コード変換ツール
以下は、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
ポイント解説
- 変換表をDictionaryに格納
旧コードをキー、新コードをコレクションとして保持。 - 複数マッピングに対応
旧コード → 複数の新コードを出力可能。 - CSV処理
FSO(FileSystemObject)を使ってCSVを読み込み・書き込み。
実務での活用方法
このVBAツールを使えば、以下のような業務に活用できます。
- 部署コードや商品コードの統合・分割
- 取引先コードのリプレース
- マスタデータの統一化
- システム移行前のデータクレンジング
特に、数万件のレコードを変換する場合でも数秒〜数分で処理が完了するため、効率と精度が大幅に向上します。
システム移行を成功させるためのポイント
- 変換表を徹底的に整備する
不備があると誤ったデータが移行され、後工程で大きな問題を引き起こす。 - テストを繰り返す
移行対象データの一部で検証し、正しく変換されるか確認する。 - ログを残す
変換時の結果やエラーをログに出力しておくとトラブルシュートが容易。 - シナリオを事前に定義する
どのようなケースで集約・分割するのかを明確にしてから実装する。
まとめ
システム移行において、コード体系の違いを吸収するためには コード変換の自動化 が欠かせません。VBAを用いたコード変換ツールを活用すれば、移行作業の効率化とミス防止を同時に実現できます。今回紹介したサンプルコードをベースに、自社のルールに合わせてカスタマイズすることで、スムーズなシステム移行を実現できるでしょう。