< | >

銀行明細データを弥生会計にインポートするプログラム
  • (2011-11-20 05:50:25)
2011/11/20

ムダに消耗する消込


銀行の取引明細は誰からの、そして、何の取引の振り込みか、ときとしてわからない。推量するしかない状況であり非効率的。多くの企業で「消込」は経理部スタッフの体力と労力をムダに消耗させる作業。

原因は銀行間送金データのフォーマットだろう。これだけ情報技術が進化しても銀行間送金データのフォーマットは半世紀前から進化できずにいる。

誰もが不満ながら、誰も動かせない。技術的な問題はではなく政治の話。メガバンクの経営者といえども権限不足のようだ。誰に権限があるのかな、誰も何もできない。これも日本の現状。


銀行取引明細を最小限労力で弥生会計にインポート


明細データをCSV形式でダウンロードし、整形して、そのまま弥生会計にインポートするプログラムを秀丸マクロで書いている。


弥生会計のインポートフォーマット



【弥生会計インポート項目】(「*印」は必須)

01 A * 識別フラッグ(伝票以外は2000)
2111 → 1行の伝票データ
2110 → 複数行の伝票データ(1行目)
2100 → (行間)
2101 → (最終行)

02 B 伝票No

03 C 決算(通常仕訳-"空白" 決算-"本決")

04 D * 取引日時

05 E * 借方勘定科目

06 F 借方補助科目

07 G 借方部門

08 H * 借方税区分

09 I * 借方金額

10 J 借方税金額

11 K * 貸方勘定科目

12 L 貸方補助科目

13 M 貸方部門

14 N * 貸方税区分

15 O * 貸方金額

16 P 貸方税金額

17 Q * 摘要

18 R 番号

19 S 期日

20 T * タイプ(仕訳データ-"0")

21 U 生成元

22 V 仕訳メモ

23 W 付箋1

24 X 付箋2

25 Y * 調整("NO")


【弥生会計】(インポート結果の例)
"2100",2,"","2011/11/01","仕入高","","","借方税区分",100000,0,"普通預金","三菱東京UFJ","","貸方税区分",100000,0,"大企業さんからの仕入れ","","",3,"","","0","0","no"

"2110",2,"","2011/11/01","売掛金","","","借方税区分",1000,0,"売上高1","","","貸方税区分",1000,0,"ネット通販売上","","",3,"","","0","0","no"


三菱東京UFJ Bizステーションの取引明細フォーマット


【銀行明細】(三菱東京UFJの取引明細の例)

"2","2011.10.20","振込MB1","ヤマダ タロウ","0","1000","8888888"

"2","2011.10.21","振込BZ2","カ)ダイキギョウ","100000","0","8888889"


切って貼ってのダムコードで!


弥生会計のインポート項目は25種類、必須(*印)のものでも11個。

一方、銀行明細には日付と金額及びメモ程度のデータしかないので、仕分けデータなども付け足して整形する必要がある。

まあ、並べ替えて切ったり貼ったりするベタベタのマクロでよいのではないか。私のコードはプログラミングの美しさのカケラもないが、とりあえず動けば、社内から感謝される。悪い気はしない。


プログラム例


プログラマさんによる「三菱東京UFJ Bizステーション取引明細の弥生会計インポート整形用マクロ」のようなものが公開されていればうれしいが、ないようなので公開。

まだ書きかけであり、動作検証はしていない。しかし、完成してもけっきょく弥生以外の業務システムからデータを取り込む場合はある程度画一的なデータでインポートするしかない。

借方税区分や貸方税区分、消費税の取引別の税区分、税金額、仕分けタイプなどは会社さんや利用者ごとに違うし、最終的には適切なデータを手作業で入れ込む必要がある。

なお、弥生会計は「弥生会計11」を使用。



//-------------------------------
//BizStationから弥生へ入金明細取込
//-------------------------------
//-------------------------------
//最初の1行、最後の2行は不必要なので削除
//-------------------------------
gofiletop;
deleteline;
gofileend;
up 2;
deleteline;
deleteline;

//-------------------------------
//余分なスペースなど削除
//-------------------------------
replaceall "\"","";
replaceall "^2,","",regular;
replaceall ".","/";
replaceall " ","";
replaceall " ","";
replaceall "\n\n","\n",regular;

//-------------------------------
//各行の最後の余分な数字文字列を削除
//-------------------------------
gofiletop;

while(1){
golineend;
left;
deletewordall;
backspace;
down;
golineend;
if(code == eof){break;}
}

//-------------------------------
//各行の「摘要」<->「金額」の入れ替え
//-------------------------------
gofiletop;

while(1){
searchdown ",";
searchdown ",";
replacedown ",","/";
golinetop;
searchdown ",";
beginsel;
searchdown ",";
cut;
golineend;
paste;
right;
if(code == eof ){break;}
golinetop;
}

//-------------------------------
//1行ごとに「入金」か「支払い」か判断(Incoming and Outgoing Payment)
//-------------------------------
gofiletop;
$figure ="";

//-------------------------------
IncomingOrOutgoingPayment:
//-------------------------------
while(1){
golineend;
if (code == eof){goto NEXT;}
golinetop;
searchdown ",";
beginsel;
searchdown ",";
copy;
beginclipboardread;
$figure =getclipboard;
if ($figure == ",0"){
replaceup ",0",",";
goto IncomingPayment;
}else{
goto OutgoingPayment;
}
}

//-------------------------------
IncomingPayment:
//-------------------------------
//入金元の記録を行う。ただし、個人からの入金は煩雑なので省略。
//会社などからの入金は「カ)」などが含まれるので、その行に関しては入金元を記録。

selectline;
searchdown "カ)",inselect;
if (result==yes){
golinetop;
searchdown ",";
right;
insert "普通預金,三菱東京UFJ,\"\",対象外";
beginsel;
searchdown ",";
copy;
insert ",0,売掛金,\"\",\"\",対象外";
paste;
right;
beginsel;
searchdown "\n",regular;
cut;
golineend;
insert "0,ネット販売@";
paste;
insert ",\"\",\"\",3,\"\",\"\",0,0,no";
} else {
golinetop;
searchdown ",";
right;
insert "普通預金,三菱東京UFJ,\"\",対象外";
beginsel;
searchdown ",";
copy;
insert ",0,売掛金,\"\",\"\",対象外";
paste;
right;
beginsel;
searchdown "\n",regular;
delete;
insert "0,ネット販売";
golineend;
insert ",\"\",\"\",3,\"\",\"\",0,0,no";
}
down;
goto IncomingOrOutgoingPayment;

//-------------------------------
OutgoingPayment:
//-------------------------------
golinetop;
searchdown ",";
right;
insert "支払手数料,\"\",\"\",課対仕入込,";
beginsel;
searchdown ",";
right;
copy;
insert "0,普通預金,三菱東京UFJ,\"\",対象外,";
paste;
golineend;
insert ",\"\",\"\",3,\"\",\"\",0,0,no";
down;
goto IncomingOrOutgoingPayment;

//-------------------------------
NEXT:
//-------------------------------
//行頭に「2100」を入れる
replaceall "^","2100,\"\",\"\",",regular;

//-------------------------------
//日付ごとに改行
//-------------------------------
$s1 = "";
$s2 = "";
gofiletop;
golinetop;
right 11;
beginsel;
right 10;
copy;
beginclipboardread;
$s1 = getclipboard;
//message $s1;
down;

while(1){
golinetop;
right 11;
beginsel;
right 10;
copy;
beginclipboardread;
$s2 = getclipboard;
//message $s2;
if ($s1 != $s2){
golinetop;
insert "\n";
replaceup "2100|2110","2101",regular;
replacedown "2100","2110";
}
down;
golineend;
if (code == eof){break;}
$s1 = $s2;
}

//-------------------------------
//日付ごとに分けた後の調整(ファイルトップの2100->2110 ファイルエンドの2100->2101)
//-------------------------------
moveto 0,0;
deletewordall;
insert "2110";
gofileend;
replaceup "2100|2110","2101",regular;

//-------------------------------
//日付ごとに分けた後の調整(1日に1件の伝票の入力番号を2111に変更)
//-------------------------------
gofiletop;
while(1){
searchdown "\n\n2101",regular;
if (result == yes) { replacedown "2101","2111"; right; } else { break; }
}
endmacro;




<< 秀丸マクロ 選択範囲内での検索 inselect< | >サイト構築は単一テーマを心がける >>
search
layout
admin

[▲page top]