給与振込のミスを防ぐ！A-SaaSのCSVをGMOあおぞらネット銀行で使える形式に変換する

# はじめに
この記事では、**A-SaaSから出力したCSVファイル**を、GMOあおぞらネット銀行の一括振込（WEBアップロード）で利用できる形式に変換する方法を紹介します。

弊社では、**会計ソフトとしてA-SaaS**を、**給与振込用の銀行としてGMOあおぞらネット銀行**を利用しています。しかし、A-SaaSから出力されるCSVファイルはそのままではGMOあおぞらネット銀行の一括振込に対応しておらず、形式を整える必要があります。

社員数が増えると、給与振込の設定が複雑になり、作業が煩雑になりがちです。特に以下のような課題が発生します：
- **振込設定が手間になる**  
  一件ずつ手動で設定するのは非効率で、時間がかかります。
- **金額や情報の入力ミス**  
  入力ミスにより、振込エラーや従業員への不信感が生じる可能性があります。

この記事では、これらの課題を解決し、効率的かつ正確に振込設定を行う方法を解説します。

対象とするのは、**Downloadsフォルダ**内にある「旧_＊.csv」という名前のファイルです。

---

# 実行手順

### 1. 必要なPythonモジュールのインストール
以下のコマンドを実行して、必要なモジュールをインストールします。

```sh
pip install pandas jaconv
```

### 2. CSV変換スクリプトの実行
以下のスクリプトを `convert_csv.py` という名前で保存し、実行します。

#### スクリプトの内容
```python
import os
import glob
import pandas as pd
import jaconv

# 全角カタカナを半角カタカナに変換する関数
def convert_to_half_width_kana(text):
    if pd.isnull(text):  # NaN チェック
        return ""
    return jaconv.z2h(str(text), kana=True, ascii=False, digit=False)

# カンマ付き数値を文字列に変換する関数
def convert_to_numeric_string(text):
    if pd.isnull(text):  # NaN チェック
        return ""
    try:
        return str(int(str(text).replace(',', '')))  # カンマを削除して数値に変換
    except ValueError:
        return str(text)  # 数値変換に失敗した場合は元の文字列を返す

# メイン処理
def process_csv_files():
    downloads_dir = os.path.join(os.path.expanduser("~"), "Downloads")
    csv_files = glob.glob(os.path.join(downloads_dir, "旧_*.csv"))

    account_type_mapping = {
        "普通": "1",
        "当座": "2",
        "貯蓄": "4"
    }

    if not csv_files:
        print("対象のCSVファイルが見つかりません。")
        return

    for file in csv_files:
        print(f"処理中のファイル: {file}")
        try:
            df = pd.read_csv(file, encoding="shift-jis", header=None)
            print("Shift-JISで読み込み成功")

            df = df.dropna(subset=[0])

            new_df = pd.DataFrame({
                '銀行番号': df.iloc[:, 0].apply(lambda x: f"{int(x):04}" if pd.notnull(x) else "").astype(str),
                '支店番号': df.iloc[:, 2].apply(lambda x: f"{int(x):03}" if pd.notnull(x) else "").astype(str),
                '預金種目': df.iloc[:, 5].map(account_type_mapping).fillna("").astype(str),
                '口座番号': df.iloc[:, 6].apply(lambda x: f"{int(x):07}" if pd.notnull(x) else "").astype(str),
                '受取人名': df.iloc[:, 8].apply(convert_to_half_width_kana).fillna("").astype(str),
                '振込金額': df.iloc[:, 13].apply(convert_to_numeric_string).fillna("").astype(str)
            })

            output_file_shift_jis = os.path.join(downloads_dir, "output_shift-jis.csv")
            new_df.to_csv(output_file_shift_jis, index=False, header=False, encoding="shift-jis")
            print(f"Shift-JIS形式で保存しました: {output_file_shift_jis}")

            output_file_utf8 = os.path.join(downloads_dir, "output_utf-8.csv")
            new_df.to_csv(output_file_utf8, index=False, header=False, encoding="utf-8")
            print(f"UTF-8形式で保存しました: {output_file_utf8}")

        except Exception as e:
            print(f"エラーが発生しました: {e}")

if __name__ == "__main__":
    process_csv_files()
```

### 3. 実行結果
スクリプトを実行すると、`Downloads` フォルダに以下の2つのファイルが生成されます：
- **`output_shift-jis.csv`**  
  こちらは、GMOあおぞらネット銀行の一括振込（WEBアップロード）に直接利用するためのファイルです。
- **`output_utf-8.csv`**  
  こちらは、変換後のデータ内容を確認するためのファイルです。振込金額や受取人名が正しく変換されているかをチェックする用途で使用してください。

---

### 参考リンク
GMOあおぞらネット銀行の一括振込（WEBアップロード）の詳細な仕様については、公式ガイドをご参照ください。  
[一括振込の操作ガイド (PDF)](https://gmo-aozora.com/support/guide/once-upload.pdf)

---

# さいごに
この記事を参考にすることで、給与振込における課題を解消し、手作業での煩雑さやミスを防ぐことができます。特に、社員数が増えた場合でも効率的に振込設定を行えるようになります。

弊社では、この方法を活用することで給与振込業務を効率化し、より安心して運用できるようになりました。ぜひこの記事を参考にして、業務の効率化と正確性向上を図ってみてください！