会計・税務ソフトは日頃使っていますが 100%自分の希望通りの機能が備わっているわけではありません。
ここがもう少しこうなったらなぁ、、、、って思うことは山ほどあり歯がゆくなります。。
ただ、それでも自分の要望に合うように標準品を逸脱した特注品をオーダーしたりすると、数百万円単位の出費になってしまうことでしょう(おそらく開発費がそのままチャージされます)。
オンリーワンの仕様を作ってもらうなど現実的ではありません。
私のいる事務所では会計・税務ソフトとも JDLを使っています。
今日取り上げる事業概況説明書の作成に関してですが
「会計ソフト」の仕訳データを「事業概況説明書」システムと連動することで、 事業概況説明書を作成することは一応可能ですが、私はとある理由から連動機能を使っていません。
(事業概況説明書は帳簿を元に作るものなので、仕訳データから連動できれば2度入力が防止できて効率的なのです。)
連動機能を使わない理由は、一言で言えば自分が望むようにはうまく連動されないということなのですが、まぁそこを詳しく話すと長くなるので今日はやめておきます。
連動できないとなると、事業概況説明書を作成する際に帳簿の数値を見ながら手入力しなければならないのですが、
一度作成したものを再度入力するということはできる限り避けたいものです。
1、Excel から JDL の事業概況説明書への転記(コピペ)作業を自動化する仕組み
今回取り上げる仕組みについて説明します。
「会計ソフト」の仕訳データを元に事業概況説明書の「月別の売上高等の状況」を作成するというものです。
この記事では 売上、仕入、給料の3項目を12ヶ月分入力すべき場合を前提とします。
まず、自分の中で絶対にやらないようにしていることを書いておきますと、
会計ソフトから試算表をプリントアウトしてそれを見ながら手入力するということ。
面倒ですし、入力ミスの有無もチェックしなければならないので目が疲れます。。
(円単位と千円単位で異なるのでそこも注意が必要)
一度会計ソフトに入力したものを再度入力するのもテンション下がります。。
私が今使っている仕組みでは、
まず会計ソフトの金額のデータを「消費税抜きの数値に変換して、数値の桁数を千円単位に換算」するために CSV データをExcel シート上に取り出します。
(もちろんワンクリックでできるようにしています。後ほど詳しく説明しますね。)
そして、Excel シート上で金額を税抜・千円単位に変換してからそれを事業概況説明書に取り込むわけですが
その際に残念ながら CSV 入出力は使えません(ソフトが対応していないため)。
手入力するしかないのです。。
でも手入力と言っても先にも言ったように、紙にプリントアウトしたものを見ながらやるのはどうかと思いますし、
PC 画面上の Excelシートの数値を目視しながらやるのもどうかと(入力ミスの可能性があるから)。
せめて入力ミスを無くすためコピペのショートカット(Ctrl + C → Ctrl + V)を連発することが考えられます。
それをやるとこんな感じになります↓ 動画を見てください。
左側が Excel シート、右側が事業概況説明書システムです。
12ヶ月分の売上、仕入、給料をコピペ(給料は毎月同じ金額なので手入力している)し終わるのにだいたい1分25秒かかります。
結論から言いますと、今日お話しする仕組みを使ってワンクリック(Excel シート上の実行ボタンを)でマクロ(Excel VBA + UWSC)を実行するとこのように↓になります。
だいたい17秒です。
1分以上作業時間が短縮されており、貼り付け先を間違るかもしれないリスクも取り除かれます。
さて、それでは効率化する仕組みをどのように設計しているか以下に示します。
↓
② マクロ(Excel VBA + UWSC)を用いて Excelシートの上記データを「事業概況システム」に自動入力
①②それぞれについて仕組みを説明しますので、以下を見てください。
①について
PC 画面上で Excel シートと会計ソフトを両方並べた状態で、Excel シート上のボタンをクリックすれば VBA が実行して、そのコードの中で UWSC を実行します。
実行ボタン(仕訳読込み)↓をクリック
そして UWSC が
『会計ソフトから仕訳データを CSV 出力して Excel シートの「仕訳データ」シートに取り込む作業』
を行います。
そして、取り込んだ後に「全計算」ボタンを押せば Excel VBA が実行して仕訳データをベースに毎月の売上、仕入、給料を税抜の千円単位に換算してシート上の表に書き出します。
書き出された Excel の表はこちら↓
②について
①の後に今度はワンクリックで Excel シートのデータを事業概況説明書に入力しています。
PC 画面上で Excel シートと事業概況説明書システムを両方並べた状態で、Excel シート上の「事業概況へ書き出し」ボタンをクリックすれば VBA が実行して、UWSC を実行します。
そして、UWSC が Excel シート上の数値(売上、仕入、給料)を読み取り、入力作業を行ってくれるというものです。
今回は、ここの部分についてプログラミングコードを示して詳しく説明しますね。
2、ワンクリックで Excel から JDL の事業概況説明書への転記(コピペ)作業行うプログラミングの流れ
先に書いたように、Excel シートと事業概況説明書システムを PC 画面上に並べた状態で、Excel シート上の実行ボタンをワンクリックすれば後は自動的に Excel シートから事業概況説明書への転記が行われます。
Excel VBA と UWSC を連携させてそれを可能にしているわけです。
まず、Excel シート上で VBA が実行して、その中で UWSC を実行させています。
そして、Excel シート上のデータを事業概況説明書に移す作業を繰り返しているのです。
具体的には、Excel VBA と UWSC を次の図のように連携して動かしています。
3、Excel VBA と UWSC のプログラミングコード
さて、これらを可能とする Excel VBA と UWSC のプログラミングコードを示しますね。
VBA で作られたマクロ①
まず、Excel シート上で実行ボタンをクリックした際に実行するプログラミングコードは以下のものになります。
このコードは、UWSC で作られたマクロ①(Excel シートから事業概況説明書への転記作業を行う)を実行するためだけのものです。
Excel 画面上で実行ボタンをワンクリックするだけで、全ての操作が終わるようにするために、あえて Excel VBA を使って UWSC を実行しています(UWSCを別で実行させなくても良いように)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub Gaikyou_Uriage() Dim Command As String Dim UWSC_File As String Dim EXE_Path As String Dim SP As String SP = """" EXE_Path = "●●●\uwsc.exe" 'UWSC の exe ファイルのパス' UWSC_File = "●●●\uriage.UWS" '実行する UWSC ファイルのパス' Command = SP & EXE_Path & SP & " " & SP & UWSC_File & SP Shell Command, vbNormalFocus End Sub |
VBA で作られたマクロ①の解説
Shell 関数
Shell 関数は外部アプリを実行する関数です。
このように記述します。
実行時のウインドウの形式は今回は「vbNormalFocus」としました。詳細な説明はすみませんが割愛します。
他のサイトに情報はたくさんありますのでご確認下さい。
さて、「アプリのパス」についてですが、今回の場合は、外部アプリとして UWSC が該当します。
つまり、UWSC の実行ファイルのパスを “” で囲って表記する必要があるということですね。
アプリそのもの(exe ファイル)のパス(EXE_Path)と、そのアプリを使って保存してあるファイルのパス(UWSC_File)を間に半角スペース1つ(” “)を入れて並べます。
今回の場合は以下のようになります。
変数 SP にはアプリのパスを “” で囲うために1つの「”」を入れ込んであります。1つの 「”」を2つの 「”」で囲うことで表記しています。
(””” と ” を3つ記載すると自動的に4つ “””” に変更される)
アプリのパスを最終的には変数 Command に入れ込むために以下のように記述しています。
つまり、Excel VBA で UWSC を実行するために Shell 関数を用いているということです。
UWSC で作られたマクロ①
次に VBA で作られたマクロ①の中で上記 Shell 関数によって実行される UWSC で作られたマクロ① のプログラミングコードは以下のものになります。
なお、このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「uriage.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ①」の中で指定したパスと同じにしなければなりません。)
Excel シートの各月の売上データ(N列)を1行ずつ読み込んでは事業概況説明書に転記していく作業を行っています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
ExcelObj = GETACTIVEOLEOBJ("Excel.Application") Retsu = 14 //Excelシート上で読込む列番号 Start_Gyou = 25 //Excelシート上で読込みを開始する行番号 /////////////////////////////////////////////////////////////////// IFB CHKIMG("uriage_button.bmp") BTN(LEFT,CLICK, G_IMG_X+10, G_IMG_Y+82) //最初の入力位置をクリック ELSE MSGBOX("「売上高」の画像認識に失敗しました。") EXITEXIT ENDIF FOR i = 1 TO 12 X = ExcelObj.Cells[Start_Gyou+i-1,Retsu].Value //データを Excel シートから読込み //X を7桁に変換している X1 = INT(X/1) X2 = INT(X/10) X3 = INT(X/100) X4 = INT(X/1000) X5 = INT(X/10000) X6 = INT(X/100000) X7 = INT(X/1000000) X8 = INT(X/10000000) X1 = X1 - X2 * 10 X2 = X2 - X3 * 10 X3 = X3 - X4 * 10 X4 = X4 - X5 * 10 X5 = X5 - X6 * 10 X6 = X6 - X7 * 10 X7 = X7 - X8 * 10 //7桁を上側の桁から順番(X7 → X1)に入力 SELECT X7 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X6 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X5 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X4 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X3 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X2 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X1 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND KBD(VK_TAB,CLICK,50) //TAB キーを50ms間押す(次の月に移るため) NEXT ExcelObj.run ("Gaikyou_Shiire") //「Gaikyou_Shiire」マクロ実行 |
UWSC で作られたマクロ①の解説
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 関数についてはこちらの記事を参考にして下さい↓
UWSC というツールを何年か前から使っています。Windows マクロを作成するプログラミング言語です。このツールを使えば今で言う RPA と同じようなことができます。今日は UWSC を使って画像をクリックする方法を紹介します。1、Windows 画面上に出てくる画像普段我々がWindows 画面上で操作をするときには操作のために必要な箇所をクリックしますよね。アプリを動かしているときには、例えば「ファイルボタン」をクリックしてから「開くボタン」をクリックするといったことをします。Web 操作をしているときには、「検索ボタン」をクリ... マクロ(UWSC)を使って画面上の画像をクリックする方法 - My タックスノロジー |
「売上(収入)」と書かれた部分をプリントスクリーンした画像をアプリのペイントで加工して、切り出し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」に入れ込んでいることを表します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
X1 = INT(X/1) X2 = INT(X/10) X3 = INT(X/100) X4 = INT(X/1000) X5 = INT(X/10000) X6 = INT(X/100000) X7 = INT(X/1000000) X8 = INT(X/10000000) X1 = X1 - X2 * 10 X2 = X2 - X3 * 10 X3 = X3 - X4 * 10 X4 = X4 - X5 * 10 X5 = X5 - X6 * 10 X6 = X6 - X7 * 10 X7 = X7 - X8 * 10 |
上記の部分は、読み込んだ数字 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 を実行できます。
UWSC という Windows マクロを作成するプログラミング言語を使うことがあります。UWSC は会計事務所の業務にけっこう使えるツールなのです。Excel VBA と UWSC、両者を組み合わせて使うことで様々な操作ができるようになります。「UWSC で Excel VBA マクロを実行する」あるいは「Excel VBA で UWSC マクロを実行する」ことで、両者を相互に上手に組み合わせて使うことができるようになるのです。Excel VBA で UWSC マクロを実行するイメージ図UWSC で Excel VBA マクロを実行するイメージ図さて、今日は上記のうち「UWSC で Excel VBA... UWSC で マクロ(Excel VBA) を実行する方法 - My タックスノロジー |
一番最後の
ExcelObj.run (“Gaikyou_Shiire”)
の部分は、Excel シートの「Gaikyou_Shiire」というマクロを実行するように指示しています。
これにより次の仕入の計算に移っていくわけですね。
VBA コード② ⇒ UWSC コード②、VBA コード③ ⇒ UWSC コード③
●VBA で作られたマクロ② と UWSC で作られたマクロ②
●VBA で作られたマクロ③ と UWSC で作られたマクロ③
これらは上記の VBA で作られたマクロ①と UWSC で作られたマクロ① とほぼ同じ内容です。
UWSC で作られたマクロ③ の最後では Excel VBA を実行していません(そこで操作終わりだから)。
コードのみを示しておきますね。
VBA で作られたマクロ②
UWSCで作られたマクロ②(ファイル名「shiire.uws」)を実行しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub Gaikyou_Shiire() Dim Command As String Dim UWSC_File As String Dim EXE_Path As String Dim SP As String SP = """" EXE_Path = "●●●\uwsc.exe" 'UWSC の exe ファイルのパス' UWSC_File = "●●●\shiire.UWS" '実行する UWSC ファイルのパス' Command = SP & EXE_Path & SP & " " & SP & UWSC_File & SP Shell Command, vbNormalFocus End Sub |
UWSC で作られたマクロ②
このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「shiire.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ②」の中で指定したパスと同じにしなければなりません。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 |
ExcelObj = GETACTIVEOLEOBJ("Excel.Application") Retsu = 27 //Excelシート上で読込む列番号 Start_Gyou = 25 //Excelシート上で読込みを開始する行番号 /////////////////////////////////////////////////////////////////// IFB CHKIMG("shiire_button.bmp") BTN(LEFT,CLICK, G_IMG_X+10, G_IMG_Y+82) //最初の入力位置をクリック ELSE MSGBOX("「仕入高」の画像認識に失敗しました。") EXITEXIT ENDIF FOR i = 1 TO 12 X = ExcelObj.Cells[Start_Gyou+i-1,Retsu].Value //データを Excel シートから読込み //X を7桁に変換している X1 = INT(X/1) X2 = INT(X/10) X3 = INT(X/100) X4 = INT(X/1000) X5 = INT(X/10000) X6 = INT(X/100000) X7 = INT(X/1000000) X8 = INT(X/10000000) X1 = X1 - X2 * 10 X2 = X2 - X3 * 10 X3 = X3 - X4 * 10 X4 = X4 - X5 * 10 X5 = X5 - X6 * 10 X6 = X6 - X7 * 10 X7 = X7 - X8 * 10 //7桁を上側の桁から順番(X7 → X1)に入力 SELECT X7 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X6 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X5 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X4 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X3 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X2 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X1 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND KBD(VK_TAB,CLICK,50) //TAB キーを50ms間押す(次の月に移るため) NEXT ExcelObj.run ("Gaikyou_Jinken") //「Gaikyou_Jinken」マクロ実行 |
VBA で作られたマクロ③
UWSCで作られたマクロ③(ファイル名「jinken.uws」)を実行しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub Gaikyou_Jinken() Dim Command As String Dim UWSC_File As String Dim EXE_Path As String Dim SP As String SP = """" EXE_Path = "●●●\uwsc.exe" 'UWSC の exe ファイルのパス' UWSC_File = "●●●\jinken.UWS" '実行する UWSC ファイルのパス' Command = SP & EXE_Path & SP & " " & SP & UWSC_File & SP Shell Command, vbNormalFocus End Sub |
UWSC で作られたマクロ③
このコードはメモ帳に記述したものを拡張子を「.uws」の形式にして、ファイル名「jinken.uws」として保存しておく必要があります。
(フォルダのパスは上記「VBA で作られたマクロ③」の中で指定したパスと同じにしなければなりません。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 |
ExcelObj = GETACTIVEOLEOBJ("Excel.Application") Retsu = 79 //Excelシート上で読込む列番号 Start_Gyou = 25 //Excelシート上で読込みを開始する行番号 /////////////////////////////////////////////////////////////////// IFB CHKIMG("jinken_button.bmp") BTN(LEFT,CLICK, G_IMG_X+10, G_IMG_Y+82) //最初の入力位置をクリック ELSE MSGBOX("「人件費」の画像認識に失敗しました。") EXITEXIT ENDIF FOR i = 1 TO 12 X = ExcelObj.Cells[Start_Gyou+i-1,Retsu].Value //データを Excel シートから読込み //X を7桁に変換している X1 = INT(X/1) X2 = INT(X/10) X3 = INT(X/100) X4 = INT(X/1000) X5 = INT(X/10000) X6 = INT(X/100000) X7 = INT(X/1000000) X8 = INT(X/10000000) X1 = X1 - X2 * 10 X2 = X2 - X3 * 10 X3 = X3 - X4 * 10 X4 = X4 - X5 * 10 X5 = X5 - X6 * 10 X6 = X6 - X7 * 10 X7 = X7 - X8 * 10 //7桁を上側の桁から順番(X7 → X1)に入力 SELECT X7 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X6 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X5 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X4 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X3 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X2 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND SELECT X1 CASE 0 KBD(VK_NUMPAD0,CLICK,1) CASE 1 KBD(VK_NUMPAD1,CLICK,1) CASE 2 KBD(VK_NUMPAD2,CLICK,1) CASE 3 KBD(VK_NUMPAD3,CLICK,1) CASE 4 KBD(VK_NUMPAD4,CLICK,1) CASE 5 KBD(VK_NUMPAD5,CLICK,1) CASE 6 KBD(VK_NUMPAD6,CLICK,1) CASE 7 KBD(VK_NUMPAD7,CLICK,1) CASE 8 KBD(VK_NUMPAD8,CLICK,1) CASE 9 KBD(VK_NUMPAD9,CLICK,1) DEFAULT SELEND KBD(VK_TAB,CLICK,50) //TAB キーを50ms間押す(次の月に移るため) NEXT |
4、まとめ
Excel シートから事業概況声明書システムへのデータの転機を
●1つ1つコピペでやる場合
●マクロ(Excel VBA + UWSC)を使って自動化する場合
今一度比較の動画を残しておきますね。
1つ1つコピペでやる場合
マクロ(Excel VBA + UWSC)を使って自動化する場合
会計・税務ソフトは自分にとって必ずしも使いやすいものであるとは限りません。
(全てのソフトに CSV 入出力機能が付くだけでもだいぶ状況は変わると思うのですけどね。。)
その場合においてもプログラミングを使うことで、会計ソフトの歯がゆい部分を埋め合わせることができます。
今回の作業は最近流行っている(?)RPA(UiPath など)を使って行うこともできるでしょう。
今度試してみようと思います。
なお、マクロ(Excel VBA + UWSC)を使った業務効率化事例については、以下の記事もありますので参考にして頂ければと思います。
経理職や会計事務所の仕事において、会計ソフトを使うのが主流である今、手書きの伝票は使う必要はありません。最初から会計ソフトに仕訳を入力すれば事足ります。しかし、現実には様々な事情がありどうしても伝票を作らなければならないことがあります。私の場合は、手書きの振替伝票は使わずに Excel で作った振替伝票にPC上で仕訳を入力しています。そして、振替伝票に入力した仕訳をマクロ(Excel VBA、UWSC)を使って、会計ソフトに自動で取り込む仕組みを作ってあります。*なお、今日これから紹介する振替伝票と同様に、マクロ(... Excel で作る振替伝票、マクロ機能(Excel VBA、 UWSC)を使って会計ソフトに仕訳デ... - My タックスノロジー |
年末調整時に「給与所得者の保険料控除申告書兼給与所得者の配偶者特別控除申告書」(以下、保険料控除申告書と呼びます)を作成しなければなりません。そして、保険料控除申告書の内容を税務ソフトに入力しなければなりません。私がいる会計事務所では、税務ソフトはJDLの「年末調整システム」を使用しています。従来は紙の保険料控除申告書に手書きで記載した内容を見ながら、年末調整システムに手入力していました。私が事務所に入った後に、業務改善を行い Excel で作った保険料控除申告書に PC上で入力した後に、ワンクリックで年... マクロ(Excel VBA + UWSC)を使った業務効率化事例 Excel 保険料控除申告書に入力... - My タックスノロジー |