スポンサーリンク

Excel から JDL の事業概況説明書への転記(コピペ)作業を自動化する、UWSC によるキーボード操作


会計・税務ソフトは日頃使っていますが 100%自分の希望通りの機能が備わっているわけではありません。

ここがもう少しこうなったらなぁ、、、、って思うことは山ほどあり歯がゆくなります。。

ただ、それでも自分の要望に合うように標準品を逸脱した特注品をオーダーしたりすると、数百万円単位の出費になってしまうことでしょう(おそらく開発費がそのままチャージされます)。

オンリーワンの仕様を作ってもらうなど現実的ではありません。

私のいる事務所では会計・税務ソフトとも JDLを使っています。

今日取り上げる事業概況説明書の作成に関してですが

「会計ソフト」の仕訳データを「事業概況説明書」システムと連動することで、 事業概況説明書を作成することは一応可能ですが、私はとある理由から連動機能を使っていません。

(事業概況説明書は帳簿を元に作るものなので、仕訳データから連動できれば2度入力が防止できて効率的なのです。)

会計ソフトと事業概況説明書システム

連動機能を使わない理由は、一言で言えば自分が望むようにはうまく連動されないということなのですが、まぁそこを詳しく話すと長くなるので今日はやめておきます。

連動できないとなると、事業概況説明書を作成する際に帳簿の数値を見ながら手入力しなければならないのですが、

一度作成したものを再度入力するということはできる限り避けたいものです。

スポンサーリンク

1、Excel から JDL の事業概況説明書への転記(コピペ)作業を自動化する仕組み

今回取り上げる仕組みについて説明します。

「会計ソフト」の仕訳データを元に事業概況説明書の「月別の売上高等の状況」を作成するというものです。

この記事では 売上、仕入、給料の3項目を12ヶ月分入力すべき場合を前提とします。

事業概況説明書システム

まず、自分の中で絶対にやらないようにしていることを書いておきますと、

会計ソフトから試算表をプリントアウトしてそれを見ながら手入力するということ。

Image(33)

面倒ですし、入力ミスの有無もチェックしなければならないので目が疲れます。。

(円単位と千円単位で異なるのでそこも注意が必要)

一度会計ソフトに入力したものを再度入力するのもテンション下がります。。

私が今使っている仕組みでは、

まず会計ソフトの金額のデータを「消費税抜きの数値に変換して、数値の桁数を千円単位に換算」するために CSV データをExcel シート上に取り出します。

(もちろんワンクリックでできるようにしています。後ほど詳しく説明しますね。)

Excel シートと会計ソフト

税込税抜換算と単位換算

そして、Excel シート上で金額を税抜・千円単位に変換してからそれを事業概況説明書に取り込むわけですが

その際に残念ながら CSV 入出力は使えません(ソフトが対応していないため)。

手入力するしかないのです。。

でも手入力と言っても先にも言ったように、紙にプリントアウトしたものを見ながらやるのはどうかと思いますし、

PC 画面上の Excelシートの数値を目視しながらやるのもどうかと(入力ミスの可能性があるから)。

せめて入力ミスを無くすためコピペのショートカット(Ctrl + C → Ctrl + V)を連発することが考えられます。

それをやるとこんな感じになります↓  動画を見てください。

左側が Excel シート、右側が事業概況説明書システムです。

12ヶ月分の売上、仕入、給料をコピペ(給料は毎月同じ金額なので手入力している)し終わるのにだいたい1分25秒かかります。

結論から言いますと、今日お話しする仕組みを使ってワンクリック(Excel シート上の実行ボタンを)でマクロ(Excel VBA + UWSC)を実行するとこのように↓になります。

だいたい17秒です。

1分以上作業時間が短縮されており、貼り付け先を間違るかもしれないリスクも取り除かれます。

さて、それでは効率化する仕組みをどのように設計しているか以下に示します。

① マクロ(Excel VBA + UWSC)を用いて会計ソフトから CSV データを Excel シートに取り込み & 消費税抜きの数値に変換して数値の桁数を千円単位に換算
  ↓
② マクロ(Excel VBA + UWSC)を用いて Excelシートの上記データを「事業概況システム」に自動入力

①②それぞれについて仕組みを説明しますので、以下を見てください。

①について

PC 画面上で Excel シートと会計ソフトを両方並べた状態で、Excel シート上のボタンをクリックすれば VBA が実行して、そのコードの中で UWSC を実行します。

実行ボタン(仕訳読込み)↓をクリック

実行ボタン

UWSC を実行

そして UWSC が

『会計ソフトから仕訳データを CSV 出力して Excel シートの「仕訳データ」シートに取り込む作業』

を行います。

UWSC マクロ

そして、取り込んだ後に「全計算」ボタンを押せば Excel VBA が実行して仕訳データをベースに毎月の売上、仕入、給料を税抜の千円単位に換算してシート上の表に書き出します。

VBAマクロ

書き出された Excel の表はこちら↓

書き出された Excel の表

②について

①の後に今度はワンクリックで Excel シートのデータを事業概況説明書に入力しています。

PC 画面上で Excel シートと事業概況説明書システムを両方並べた状態で、Excel シート上の「事業概況へ書き出し」ボタンをクリックすれば VBA が実行して、UWSC を実行します。

Image(41)

VBAマクロ

そして、UWSC が Excel シート上の数値(売上、仕入、給料)を読み取り、入力作業を行ってくれるというものです。

UWSCマクロ

今回は、ここの部分についてプログラミングコードを示して詳しく説明しますね。

2、ワンクリックで Excel から JDL の事業概況説明書への転記(コピペ)作業行うプログラミングの流れ

先に書いたように、Excel シートと事業概況説明書システムを PC 画面上に並べた状態で、Excel シート上の実行ボタンをワンクリックすれば後は自動的に Excel シートから事業概況説明書への転記が行われます。

転記

Excel VBA と UWSC を連携させてそれを可能にしているわけです。

まず、Excel シート上で VBA が実行して、その中で UWSC を実行させています。

そして、Excel シート上のデータを事業概況説明書に移す作業を繰り返しているのです。

具体的には、Excel VBA と UWSC を次の図のように連携して動かしています。

Excel VBA と UWSC の連携

3、Excel VBA と UWSC のプログラミングコード

さて、これらを可能とする Excel VBA と UWSC のプログラミングコードを示しますね。

VBA で作られたマクロ①

まず、Excel シート上で実行ボタンをクリックした際に実行するプログラミングコードは以下のものになります。

このコードは、UWSC で作られたマクロ①(Excel シートから事業概況説明書への転記作業を行う)を実行するためだけのものです。

Excel 画面上で実行ボタンをワンクリックするだけで、全ての操作が終わるようにするために、あえて Excel VBA を使って UWSC を実行しています(UWSCを別で実行させなくても良いように)。

VBA で作られたマクロ①の解説

Shell 関数

Shell 関数は外部アプリを実行する関数です。

このように記述します。

Shell ”アプリのパス”, 実行時のウインドウの形式

実行時のウインドウの形式は今回は「vbNormalFocus」としました。詳細な説明はすみませんが割愛します。

他のサイトに情報はたくさんありますのでご確認下さい。

さて、「アプリのパス」についてですが、今回の場合は、外部アプリとして UWSC が該当します。

つまり、UWSC の実行ファイルのパスを “” で囲って表記する必要があるということですね。

アプリそのもの(exe ファイル)のパス(EXE_Path)と、そのアプリを使って保存してあるファイルのパス(UWSC_File)を間に半角スペース1つ(” “)を入れて並べます。

今回の場合は以下のようになります。

アプリ

アプリファイル

変数 SP にはアプリのパスを “” で囲うために1つの「”」を入れ込んであります。1つの 「”」を2つの 「”」で囲うことで表記しています。

(””” と ” を3つ記載すると自動的に4つ “””” に変更される)

アプリのパスを最終的には変数 Command に入れ込むために以下のように記述しています。

Command = SP & EXE_Path & SP & ” ” & SP & UWSC_File & SP

つまり、Excel VBA で UWSC を実行するために Shell 関数を用いているということです。

UWSC で作られたマクロ①

次に VBA で作られたマクロ①の中で上記 Shell 関数によって実行される UWSC で作られたマクロ① のプログラミングコードは以下のものになります。

なお、このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「uriage.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ①」の中で指定したパスと同じにしなければなりません。)

Excel シートの各月の売上データ(N列)を1行ずつ読み込んでは事業概況説明書に転記していく作業を行っています。

UWSC で作られたマクロ①の解説

GETACTIVEOLEOBJ 関数

GETACTIVEOLEOBJ 関数は既に起動しているオブジェクトを操作するために使います。

GETACTIVEOLEOBJ(”オブジェクト名”)

今回はオブジェクトとして Excel を指定するのでオブジェクト名を”Excel.Application”としています。

そして、以下の式でそのオブジェクトを変数「ExcelObj」に入れ込んでいます。

ExcelObj = GETACTIVEOLEOBJ(“Excel.Application”)

Excel シート上の読み取る列番号「Retsu」と読み取りを開始する行番号「Start_Gyou」

今回 Excel シートから「売上」のデータを読み込みます。

N列なので列番号は 14 となります。

Retsu = 14

各月のデータを1行ずつ読み込んで行きますが最初の行番号は 25 となります。

Start_Gyou = 25

事業概況システム中の最初の月の入力箇所を選択する

事業概況システム中の最初の月の入力箇所を選択するために CHKIMG 関数を使っています。

CHKIMG 関数についてはこちらの記事を参考にして下さい↓

「売上(収入)」と書かれた部分をプリントスクリーンした画像をアプリのペイントで加工して、切り出し24ビットマップ形式で実行ファイル「uriage.uws」と同じフォルダ内に保存しておきます。

入力箇所をクリックするためには、上記画像からの相対的な位置をプラスして座標を指定しなければなりませんでした。

座標

そして、BTN 関数を用いて上記座標(G_IMG_X+10, G_IMG_Y+82)を左クリックしています。

BTN(LEFT,CLICK, G_IMG_X+10, G_IMG_Y+82)

キーボードで数字の入力を12回(12ヶ月分)繰り返し

「Excel シート」から売上のデータを1行読み込んでは「事業概況説明書」に書き出す

という作業を12回繰り返します。FOR 文を使います。

X = ExcelObj.Cells[Start_Gyou+i-1,Retsu].Value

は Excel シートの売上のセルの値を変数「X」に入れ込んでいることを表します。

上記の部分は、読み込んだ数字 X を後で事業概況説明書にキーボード入力する際に入力する1桁ごとの数字を計算により導いています。

全部で7桁の数字として扱うようにしています。

ただ、桁数が大きい部分には0を入れるようにしています。
「2487」という数字は4桁ですが、それを7桁で表現しようとした際に「0002487」というようにしているということです。

例えば X が4月の売上「2487」の場合に X1 ~ X 7 を上記式にあてはめて計算してみて下さい。

X7 ~ X5 は 0

X4 は 2

X3 は 4

X2 は 8

X1 は 7

となることが分かります。

X7 ⇒ X1 の順番に SELCT – SELEND を使ってキーボード操作で入力するキー(0~9)を選択して、キーボード入力して行きます。

0 は VK_NUMPAD0

1 は VK_NUMPAD1

9 は VK_NUMPAD9

のようにしてキーボードを指定します。

KBD関数は例えばキーボードで数字の0を入力する場合であれば

KBD(VK_NUMPAD0,CLICK,1)

のように入力します。

KBD(VK_NUMPAD0) だけでも OK です。

売上「2487」の場合には X7 ~ X1 の順で

0002487

と入力しています。

なお売上データの1つの月の転記が終わったら、次の月の売上データを転記しなければならないので事業概況報告書の中で TABキーを押すようにしています。

以下のコード↓を i が1つ増加する前に実行しています ↓
(TAB キーを 50ms押すという命令)

KBD(VK_TAB,CLICK,50)

i の数字が1つずつ増加して他の月も同様にキーボード入力を繰り返していきます。

Excel VBA の実行

UWSC で Excel VBA を実行できます。

一番最後の

ExcelObj.run (“Gaikyou_Shiire”)

の部分は、Excel シートの「Gaikyou_Shiire」というマクロを実行するように指示しています。

これにより次の仕入の計算に移っていくわけですね。

VBA コード② ⇒ UWSC コード②、VBA コード③ ⇒ UWSC コード③

●VBA で作られたマクロ② と UWSC で作られたマクロ②

●VBA で作られたマクロ③ と UWSC で作られたマクロ③

これらは上記の VBA で作られたマクロ①と UWSC で作られたマクロ① とほぼ同じ内容です。

UWSC で作られたマクロ③ の最後では Excel VBA を実行していません(そこで操作終わりだから)。

コードのみを示しておきますね。

VBA で作られたマクロ②

UWSCで作られたマクロ②(ファイル名「shiire.uws」)を実行しています。

UWSC で作られたマクロ②

このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「shiire.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ②」の中で指定したパスと同じにしなければなりません。)

VBA で作られたマクロ③

UWSCで作られたマクロ③(ファイル名「jinken.uws」)を実行しています。

UWSC で作られたマクロ③

このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「jinken.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ③」の中で指定したパスと同じにしなければなりません。)

4、まとめ

Excel シートから事業概況声明書システムへのデータの転機を

●1つ1つコピペでやる場合
●マクロ(Excel VBA + UWSC)を使って自動化する場合

今一度比較の動画を残しておきますね。

1つ1つコピペでやる場合

マクロ(Excel VBA + UWSC)を使って自動化する場合

会計・税務ソフトは自分にとって必ずしも使いやすいものであるとは限りません。

(全てのソフトに CSV 入出力機能が付くだけでもだいぶ状況は変わると思うのですけどね。。)

その場合においてもプログラミングを使うことで、会計ソフトの歯がゆい部分を埋め合わせることができます。

今回の作業は最近流行っている(?)RPA(UiPath など)を使って行うこともできるでしょう。

今度試してみようと思います。

なお、マクロ(Excel VBA + UWSC)を使った業務効率化事例については、以下の記事もありますので参考にして頂ければと思います。