今までのおさらい

これが完成型のプログラムです。
Sub 変換()
Dim a As Integer
a = 3
Do Until Cells(a, 1).Value = “”
Cells(a, 7).Value = Cells(a, 1).Value
Cells(a, 11).Value = Cells(a, 2).Value
If Cells(a, 4).Value = “” Then
Cells(a, 8).Value = 101
Cells(a, 9).Value = 999
Cells(a, 10).Value = Cells(a, 3).Value
Else
Cells(a, 9).Value = 101
Cells(a, 8).Value = 999
Cells(a, 10).Value = Cells(a, 4).Value
End If
If Cells(a, 2).Value Like “*印紙*” Then
Cells(a, 8).Value = 726
End If
If Cells(a, 2).Value Like “*切手*” Then
Cells(a, 8).Value = 724
End If
If Cells(a, 2).Value Like “*引出し*” Then
Cells(a, 9).Value = 121
End If
a = a + 1
Loop
End Sub

これが基本形です。
最初のうちは、セルがどこを参照しているのか、理解しにくかも
しれません。そんなときはF8を押して一行ずつコードを進め、変数が
今いくつでどこのセルを参照しているのかしっかり確認する、または
自分でCells(a,○)がどこのセルなのかしっかり確認して下さい。

またa=a+1を忘れると無限ループに突入するので気を付けて下さい。

最後に大事なこと、コートが書き終わったら必ず保存してから実行して
下さい。
マクロを実行しても意図したとおりにならなかった場合、
元に戻そうと思っても戻せません。そんなときは、実行前に保存して
元の状態に戻すときは保存しないで終了し、再度そのファイルを開いて
下さい。

IF関数を使って科目を判別させる

科目の判断もExcelVBAでできます。

科目の判断までパソコンにやらせることに、不安を感じる方もいらっしゃるかも
しれませんが、ご安心下さい。
例えば、
①摘要の中に「印紙」という言葉があれば、租税公課
②摘要の中に「切手」という言葉があれば、通信費
③摘要の中に「引出し」という言葉があれば、普通預金
等々
結局人もパソコンも考え方は同じです。もし間違いがあればあとでソフトの方で
直せばそれで済む話です。

ではプログラムはどう書くか?
①の場合
If Cells(a, 2).Value Like “*印紙*” Then
Cells(a, 8).Value = 726   →(租税公課の科目CD)
End If
②の場合
If Cells(a, 2).Value Like “*切手*” Then
Cells(a, 8).Value = 724   →(通信費の科目CD)
End If
③の場合
If Cells(a, 2).Value Like “*引出し*” Then
Cells(a,9).Value = 121   →(普通預金の科目CD)
End If
こんな具合です。
「Like “*○×*”」は、○×というキーワードを含むという意味です。
このコードをどこに当てはめるのかというと、

Sub 変換()
・・・
End If
→ ここです!
a = a + 1
Loop
End Sub
実行後の画面です。もうあとは会計ソフトにそのままインポートするだけです。
2506251

このやり方だと、科目を判別したい摘要の数だけIF関数のコードを追加して頂く必要
があります。ですのですべての摘要を入れることは難しいですが、よく使うものだけを
コードに追加して下さい。
それでも振込料、飲食代、交際費、交通費、消耗品等々20くらい追加すれば、7割8割は
フォローできるのではないかと思います。

入金取引と出金取引の処理

入金取引と出金取引の場合の解説をします。
1306192
入金取引と出金取引の違いは、
現金科目が、入金は借方、出金は貸方
相手科目が、入金は貸方、出金は借方
金額の参照先
の3点です。

当たり前と言えば当たり前ですが、これをプログラムで書くので最初に
整理しておきます。

これをVBAで書くと、
入金の場合
Cells(a, 8).Value = 101 →借方科目に現金の科目コード
Cells(a, 9).Value = 999 →貸方科目に諸口の科目コード
Cells(a, 10).Value = Cells(a, 3).Value →金額の参照先

出金の場合
Cells(a, 9).Value = 101 →貸方科目に現金の科目コード
Cells(a, 8).Value = 999 →借方科目に諸口の科目コード
Cells(a, 10).Value = Cells(a, 4).Value

これ以外の日付と摘要は入金取引も出金取引も同じなので、
Cells(a, 7).Value = Cells(a, 1).Value
Cells(a, 11).Value = Cells(a, 2).Value
と、この2行はIF関数とは関係のないところに記述します。

ちなみに、A列はCells(a,1),B列はCells(a,2),C列はCells(a,3),D列はCells(a,4),E列はCells(a,5)
F列はCells(a,6),G列はCells(a,7),H列はCells(a,8),I列はCells(a,9),J列はCells(a,10)です。
くどいようですが、A列から数えてもらえばわかると思います。

これで一通りの解説が終わりました。

IF関数の使い方

現金出納帳を会計ソフトのフォーマットに変更する場合、
それが入金取引なのか、出金取引なのか判断する必要があります。

そのとき、使うのが IF関数です。

IF関数の使い方は次の通り。

IF 条件1 Then
条件1を満たす場合の処理

Else
条件1を満たさない場合の処理

End IF

現金出納帳が次の通りにあったとします。
1306161
D列に金額がある→出金取引 D列に金額がない→入金取引
ということになります。

これをIF関数に当てはめると、
If Cells(a, 4).Value = “” Then →D列に数字がない、つまり入金取引
入金取引の処理
Else →D列に数字がある場合、つまり出金取引
出金取引の処理
End If

ということになります。
条件分岐はよく使いますが、IF関数をしっかり押さえておけば他の
関数は不要です。

ExcelVBAで少し遊んでみよう。

前回まで解説したマクロを少し変更して、プログラミングに親しんでもらいます。

では、B列を一度削除して、そのあとB1からB10までに適当な数字を入れて下さい。
1306234
そしてC列にそのA列とB列の掛け算の答えを表示させるようにプログラムを変更します。
変更する箇所は

④  Cells(a, 2).Value = “Excel”
です。

ここを次のように変更します。

Cells(a, 3).Value = Cells(a, 1).Value * Cells(a, 2).Value

これを実行すると、
1306245

次に、B列が次の値が入るようにします。
1306236

変更する箇所は同じく

④  Cells(a, 2).Value = “Excel”

これを次のように変更します。

Cells(a, 2).Value = 11 – a

変数は、セルの参照だけでなく、普通の数字としても使うことができます。

繰返し処理と変数の使い方②

A列が空白になるまで、④と⑤の処理を繰り返します。

④は Cells(a, 2).Value = “Excel” です。

aは②でa=1としているので、Cells(a, 2)は、Cells(1, 2) つまりB1です。
B1に”Excel”という値を代入します。

⑤で a = a + 1 で、a=2となります。

そして③に戻ります。今度Cells(a, 1)は、Cells(2, 1) つまりA2です。
A2は空白ではないので、また④と⑤の処理を繰り返します。
aは2なので、Cells(a, 2)は、Cells(2, 2) つまりB2です。
B2に”Excel”という値を代入します。
⑤で a = a + 1 で、a=3となります。

また③に戻ります。今度Cells(a, 1)は、Cells(3, 1) つまりA3です。
A3は空白ではないので、また④と⑤の処理を繰り返します。
aは3なので、Cells(a, 2)は、Cells(3, 2) つまりB3です。
B3に”Excel”という値を代入します。
⑤で a = a + 1 で、a=4となります。

・・・・
⑤で a = a + 1 で、a=10となります。

また③に戻ります。今度Cells(a, 1)は、Cells(10, 1) つまりA10です。
A10は空白ではないので、また④と⑤の処理を繰り返します。
aは10なので、Cells(a, 2)は、Cells(10, 2) つまりB10です。
B10に”Excel”という値を代入します。
⑤で a = a + 1 で、a=11となります。

また③に戻ります。今度Cells(a, 1)は、Cells(11, 1) つまりA11です。
A11は空白なので、条件を満たしたので繰返し処理は終わりです。

これが演算処理の概要です。

aがどのように変化し、どのセルを参照しているのかしっかりと追って下さい。

繰り返し処理と変数の使い方①

前回、セルの操作方法を解説しました。
セルの指定方法は、
A2→Cells(2,1)
B1→Cells(1,2)
というように、恐らく印象としては通常と行と列が逆だと感じます。
ですので、先に行、後で列 と覚えて下さい

今回は繰り返し処理と変数を解説します。
図のようにA1~A10に1,2,3,・・・10と数字を入れてください。

この数字のあるセルのB列に「Excel」という文字を入れていきます。

1306221
VBAのコードは次のようになります。

Sub Excel入力()
① Dim a As Integer
② a = 1
③ Do Until Cells(a, 1).Value = “”
④  Cells(a, 2).Value = “Excel”
⑤  a = a + 1
⑥ Loop
End Sub

まず最初に変数の使い方ですが、
①でこれから「a」という変数を使うと宣言します。
変数には、数値型、テキスト型等いろいろあり、さらに数値型にも何種類か
型がありますが、変数の宣言の仕方は

Dim 変数の名前 As Integer

これだけ覚えて下さい。

そして②で初期値として変数aの値を「1」とします。

③の意味は、Cells(a,1)はA列です(列を1で固定しているため)。
日本語に訳すと、
実行しなさい、A列が空白になるまで 
です。

何を実行するかというと、③Do untilと⑥Loopの間に挟まれた処理です。
つまり④と⑤を実行します。

とりあえず今回はここまで。

ExcelVBAで簡単なプログラムを書いてみよう!

前回ExcelVBAのプログラムの書く場所について解説しました。
では実際にプログラムを書いてみましょう。

今回は、セルA1に1を入力するプログラムを書きます。

では、開発タブからVisualBasicをクリックし、VBE(Visual Basic Editor)を起動します。

1306211

そして次のコードを入力します。マクロのタイトル以外は全て半角で入力して下さい。

Sub 文字入力()
Cells(1, 1).Value = 1
End Sub

前回のように、開発タブのマクロから実行する方法もありますが、次の方法でマクロを実行します。

1306212

これで、A1に1が入力されました。
少しCells(1,1)の数字を変更してみて、どう動くか確認してみて下さい。

それから、A1に入力する文字が数字でなくテキスト形式の場合は次のように記述します。
Cells(1, 1).Value = “三浦健二郎”
入力する値がテキスト形式のときは、半角のダブルコーテーションで囲みます。

次のメッセージが表示されたときは、コンテンツの有効化をクリックして下さい。そうすればマクロが動きます。
1306214

マクロを使ったファイルを保存するときは、保存方法にも注意して下さい。
1306215
「マクロ有効ブック」にして保存しないと、入力したVBAコードは消えてしまうのでご注意ください!!!

ExcelVBAの書き方の第一歩

ExcelVBAにはコードの書き方に決まりがあります。

最初の一行目は、
Sub ○×()
と記述します。ちなみに○×はこのマクロの名前ですので、分かりやすい名前を
ご自由につけて下さい。
ちなみに「Sub」 と 「()」 は必ず半角にして下さい。
続きを読む