Q&A

回答の並べ替え:
投稿新規に質問を投稿する

csvのカンマで区切られた文字列の抽出

hidekin hidekin

2024-11-13 19:18

カンマで区切られたcsvの文字列を抽出して、テーブルにセットしていきたいと考えています
csvの仕様は以下になります
【A列】明細ID:0000-0000(ユニークコード)がセットされています
【B列】カンマで区切られた複数の文字列(ラベル)がセットされています。文字列の数はレコードによって異なります

【csvの内容】
A列(明細ID)| B列(ラベル名)
-----------------------------
0000-0001  | ラベル1,ラベル2,ラベル3
0000-0002  | ラベル1,ラベル3
0000-0003  | ラベル2,ラベル3

ラベルはラベルマスタによって管理しようと思っています
【ラベルマスタ】
ラベルコード | ラベル名
-----------------------------
001     | ラベル1
002     | ラベル2
003     | ラベル3

カンマで区切られた文字列を、一件ずつ取り出して、ラベルマスタを参照し別テーブル「ラベルテーブル」に以下の様にセットしていくにはどのようにすればいいでしょうか
【ラベルテーブル】の格納イメージ
ラベルコード | 明細ID
-----------------------------
001     | 0000-0001
001     | 0000-0002
002     | 0000-0001
002     | 0000-0003
003     | 0000-0001
003     | 0000-0002
003     | 0000-0003

ご教示よろしくお願いいたします

日本コンピュータシステム(CELFチーム) 日本コンピュータシステム(CELFチーム) パートナー
こんにちは。

もっと他によい方法があるかもしれませんが、
下記のような流れで実現可能ではないでしょうか。
1つのやり方として参考までに。

①画面起動時にシートの空いている箇所へラベルマスタを取り込んでおく。
②画面起動時にシートへCSVの内容を取り込む。
③CSVで取り込んだ件数をCOUNTA関数などで変数へ保持しておく
④取り込んだ件数分繰り返し処理を行う
⑤④の繰り返し処理の中でさらに「B列(ラベル名)」の文字数分の繰り返し処理を行う
 ※「ラベル1,ラベル2,ラベル3」であれば14文字なので14回繰り返す
⑥⑤の繰り返し処理の中で1文字ずつ文字を切り出し、カンマか判断する
 ※例
  ラ → カンマ以外
  べ → カンマ以外
  ル → カンマ以外
  1 → カンマ以外
  , → カンマ
⑦カンマと判断されたタイミングで切り取り開始位置からカンマまでの文字列を切り取る
 また、文字数を超えた場合も開始位置からカンマまでの文字列を切り取る
⑧切り取った文字列と①で取り込んでおいたマスタを比較してラベルコードを取得する
⑨⑦のタイミングでラベルコードと明細IDをワークテーブルへ登録する
⑩すべての繰り返し処理が終了してワークテーブルへの登録が終わった後に、
 登録したデータをSQLで下記のソートで取得しておき、最終的にラベルテーブルへ登録する
 ソート順①ラベルコード
     ②明細ID
メールコンタクトをとる