• ベストアンサー

口座振替データのズレの合わせ方

会社でシステムの入れ替えをしています。 従来のシステムでは口座振替(入金)のデータ(.datファイル)は複数の銀行の種類が取れましたが、新しいシステムでは1種類しか取れないことがわかりました。 1種類で出力して、他の銀行データとして扱う分を抽出するにしても何十件とありますし、銀行側で受信してもらうためには最後に合計額の行を追加しないといけないため、.datからエクセルやCSVに変換して 各銀行のデータにわけてから.datファイルに変換しようとしましたが、 添付画像の通り、列にズレが生じてしまうので、このままでは受信してもらえません。 このズレをどうやって解消するには、どこかの時点での変換で何とかなるのでしょうか。ズレの解消方法を教えていただければと思います。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kon555
  • ベストアンサー率52% (1747/3349)
回答No.5

>>厳密には、エクセルでズレていない行もあれば~4列目に割り込んでいる行もありました。  もしこれが、Excelでそのように『表示』されている、というだけなら関係ないと思います。Excelはセル幅より長いデータの場合、隣のセルにはみ出して表示させますが、データ的には1つのセルの中に入っています。  ただ書かれている内容からすると、実際にデータとして4列目に入っているのだと思います。その場合には、不具合と関係あるでしょう。 >>3.2001+E**などと文字列で表示されます  Excelでは表示形式が標準のセルに、既定の桁以上の数を入力したとき、自動的に指数表示になる仕様です。  Excelで数値として扱える最大桁数は15桁だったと思いますので、32桁の数字は指数になります。  セルの書式設定を文字列にするか、「'」を先頭に付ける事で対処できます。  おそらく、割り込んでいる部分をカットした際に『桁数の多い数値』と自動で認識されるのだと思います。  もしかして、というレベルなのですが、新しいシステム側の仕様として、datファイルを作成する際に、それぞれの項目が一定以上の文字数だと次の項目にズラす仕様になっている可能性があります。  この想像が正しい場合、先の回答で挙げたCLEAN関数やTRIM関数では対処できないと思います。  その場合は、文字数や文字バイト数を確認するLEN関数やLENB関数でデータの文字数を確認、オーバーしている場合は文字列を操作するLEFT関数などで正しいデータに整形する、というような専用シートを作成する事で、関数のみで対処できます。 https://www.microsoft.com/ja-jp/biz/smb/column-excel-count-characters.aspx https://www.forguncy.com/blog/20170414_leftrightmid  またマクロで対処するとしても、非常に初歩的なレベルのモノで対応可能でしょうから、自学するのも充分可能だと思います。  ともあれ「具体的に何が起きてズレるのか」「どんな時にデータがズレるのか」という究明が出来れば、充分対応可能なものだと思います。頑張ってください。

florejirou
質問者

お礼

再度のご回答ありがとうございます。 文字列にしても他の行とは同じようにはなりませんでした。 確かにCLEAN関数やTRIM関数を試したのですが、上手くいかなかったので、教えていただいた別の関数で試したいと思います。 ありがとうございます。

その他の回答 (4)

  • kon555
  • ベストアンサー率52% (1747/3349)
回答No.4

>>エクセルで開いたときは問題ないのですが、それを編集してdatにすると、画像の通りズレます。  面倒なパターンですね。そもそもなぜズレるのか? という理由から探す必要があります。  一番怪しいなと思うのは、新システムの制御用文字コード、というものが混在しているパターンです。  こうした物を削除する、CLEAN関数という関数を試してみて下さい。 https://supvalue.net/archives/2995  あともしかすると、TRIM関数も効果があるかもしれません。 https://azby.fmworld.net/usage/excel-function/007/

florejirou
質問者

お礼

遅くなり申し訳ありません。ご回答ありがとうございます。 Trim関数、Clean関数については試してみます。 厳密には、エクセルでズレていない行もあれば、例えば名義人名が長く(画像の左から3列目)、右の4列目に割り込んでいる行もありました。これは本件の不具合とは関係ありそうでしょうか。 割り込んでいる部分を3列目にカット&ペーストすると、4列目が、例えば3.2001+E**などと文字列で表示されます。ズレのない他の行では4列目では文字列で、0000000**********(32桁)などと表されているにも関わらず。 「'」を先頭に付せばズレのない他の行と同じようには表示はされますが、表示されるだけで実際には「'」が入ってしまっているので違うような気がします。

  • kon555
  • ベストアンサー率52% (1747/3349)
回答No.3

>>エクセルやCSVに変換して 各銀行のデータにわけてから.datファイル  この手順が取れるなら、Excelで整形してdatに書き出すのが良いでしょう。関数でもやりようはあると思いますが、日常業務ならvbaでマクロ化するべきでしょうね。  実際にExcelで開いた時には、「空白セルが発生する」のか「データの先頭にスペースが入る」のか、あるいはそれ以外か、具体的には何が起きますか?

florejirou
質問者

お礼

ご回答ありがとうございます。 エクセルで開いたときは問題ないのですが、それを編集してdatにすると、画像の通りズレます。 マクロが使えればよいのですが、当方使えませんので、関数で考えておりました。関数ではどういった関数になるでしょうか。

florejirou
質問者

補足

先程の補足です。 >マクロが…当方使えません は、正しくはマクロが組めません、です。 よろしくお願いいたします。

  • qdk
  • ベストアンサー率59% (147/248)
回答No.2

恐らく、全銀フォーマットで振替データを作成する必要があるということですよね。 条件が色々と異なり、手動ですべてを解決するのは現実的ではないので、 下記のようなツールを使うのが一般的です。 https://www.chugoku.rokin.or.jp/news/325/ (ツールといっても中身はマクロです) 上記は中国ろうきんが公開してくれているツールです。 基本的には全国共通なので同じデータになるはずですが、 注意深く確認してから利用してください。

florejirou
質問者

お礼

ご回答ありがとうございます。 仰る通り、全銀フォーマットに係る話です。 ツールを教えていただいてありがとうございます。 早速試してみたいと思います。

  • hiro_1116
  • ベストアンサー率30% (2355/7627)
回答No.1

ズレの所に入っている(空白に見える文字の)文字コードを調べて、それを削除すれば良いのでは? 合計は別途付けなければなりませんが。 会社でこれからずっと使っていくシステムなのでしょうから、使いやすい仕様に改修することを考える方が良いようにも思いますが。

florejirou
質問者

お礼

ご回答ありがとうございます。 >ズレの所に入っている(空白に見える文字の)文字コードを調べて、それを削除すれば良いのでは? 文字コードを調べて、それを削除するというところから不明なので、それを調べるところから始めないといけません。また、運用開始したら毎月発生する作業なので自動で削除してくれるツールがあればよいと思っておりました。 〉…使いやすい仕様に改修すること… パッケージのシステムを導入したので改修は難しいです。

関連するQ&A

  • datファイルをcsvに変換したい

    ある装置のデーターを抽出するとDAT形式のファイルがあるのですが それをCSVに変換しようとおもいEXCELなので分割してやってみたのですが 値が抜けているところがあると列ごとにうまく分離できません。 このような変換をできるソフト(マクロ?)などあるのでしょうか?

  • 2つファイルを開いてデータを入力する

    ifstream fin("ファイル名")を使って、 2つのファイルからデータを抽出するには どうすればよいでしょうか。 たとえば、以下のようなファイルがあります。 ファイル名:1.dat ------ 1 2.3 2 3.2 3 4.3 4 5.0 ファイル名:2.dat ------ 1 50.6 2 56.2 3 66.3 4 70.2 1.datの1、2列目のデータと2.datの2列目のデータを抽出して ファイル名:3.dat ------ 1 2.3 50.6 2 3.2 56.2 3 4.3 66.3 4 5.0 70.2 とするには、どうすればよいでしょうか。 どなたか教えていただけると大変助かります。

  • エクセルのデータから別のエクセルのデータを引く

    エクセルのcsvファイルが2つあります。 一つのcsvファイルのデータから、もう一つのcsvファイルのデータを引きたいのですが、方法を伝授していただけますでしょうか。 詳しく言いますと、一つのcsvにはニックネームが200件あり、もう一つのcsvにはニックネームが150件あります。 「200-150=50」 2つのcsvにカブっていないデータを抽出したいのです。 Microsoft Excel 2003を使用しています。 よろしくお願いします。

  • 動画変換の音ずれ

    ネットで動画(flvファイル)を落として動画変換ソフトで変換し、iPodに入れてるんですが、PCでQuickTime Playerを使って再生すると音ずれします。しかしiPodで見ると全く音ずれ無くきれいに見れます。 なんでこういうことが起きるんですか? 誰か疑問を解消していただけませんか? あわよくばQuickTime Playerでの音ずれも無くしたいです。

  • awkで検索し、特定のフィールドを抽出する方法

    UNIX初心者です。 以下のようなデータファイル(AA.dat)から、条件を満たすデータの特定フィールドを別のファイル(BB.dat)に出力したいのです。 どのようにしたら良いのでしょうか? AA.dat(CSV形式) aaa,22,33,44,55,66,77,88,1,1,0,0,1001 bbb,22,33,44,55,66,77,88,1,1,0,0,1002 ccc,22,33,44,55,66,77,88,1,0,0,0,1001 ddd,22,33,44,55,66,77,88,1,1,0,0,1002 抽出条件(フィールド=$1~$13) $9==1 かつ $10==1 かつ $11==0 かつ $12==0 かつ $13==1002 出力するフィールド $1,$2,$4,$7,$8 出力結果 BB.dat(CSV形式) bbb,22,44,77,88 ddd,22,44,77,88

  • PDF からの 数値データ抽出

    PDFファイルに数値データが表として載っています。 どうにかデータ(EXCEL,CSV など)で抽出したいのですが。 そもそもPDFなので無理は承知なのですが 画像データから数字をデータとして 変換できるソフトor方法 何かありませんでしょうか?

  • Notesの個人アドレス帳からのデータ取り出しを教えてください

    社内でこれまで使ってきた「Lotus Notes 6.5」から他のグループウェアへ移行することとなりました。これに伴い、個人アドレス帳に登録しているデータをcsvファイルに書き出したいのですが、「書き出し」で抽出できるのは、Lotus 1-2-3のファイルです(当然今使っているPCにはインストールされていませんので、「ファイル」という認識になります)。 これをExcel(2007)で開き、csvファイルに変換するには、どうすればよいのでしょうか?何回かトライしてみましたが、文字化けなどもあり、全くうまくいきません。 当方、ほとんど素人です。よろしくお願い致します。

  • エクセルデータからCSVファイルへの変換について

    現在エクセルファイルにあるデータをCSVファイルへ変換する作業(エクセルでデータを作成して、保存時にCSVファイルを選択)をしているのですが、以下の例の場合うまく変換ができません・・・。 基本的な質問かもしれませんがどなたかご存知でしたら教えていただけると助かります。 よろしくお願いします。 【例】         (エクセル) ⇒  (CSV) うまくいく   12345     12345 うまくいかない 01234     1234 上記のようにエクセル上は文字列で管理されている ケースだとCSVファイルに変換した時数列に変換 され、上記例のうまくいかないケースのように 頭に0がある場合CSVだと0が消えてしまいます。 よろしくお願いします。

  • データーの整理について

    CSV形式のデータで重複するものが含まれているのですが 重複しないデータに変換出来ないでしょうか? A A     A B  ⇒  B   C     C C C という具合にCSVファイルに変換したいのです。 CGIや他の方法があれば教えてください。

    • ベストアンサー
    • CGI
  • 正規表現での置き換え

    正規表現置き換えについて -----入力 ----- a (b) B (C) test.csv file.dat -----出力 ----- b (a) C (B) file.csv test.dat --------------- としたくて以下のコードを書いたのですが 実際の出力が $2 ($1) $2 ($1) $2.csv $1.dat となってしまいます。 --以下ソース %Convert = ( '(.+) \\((.+)\\)', '$2 ($1)' ,'(.+)\\.csv (.+)\\.dat', '$2.csv $1.dat' ); while(<DATA>){ foreach $key ( keys %Convert ){ s/$key/$Convert{$key}/gi; } print; } __DATA__ a (b) B (C) test.csv file.dat

    • ベストアンサー
    • Perl