英数コードによる分類とコピー
を押して作動するプログラムを作ります。
Sub 家計簿入力2()
Dim n As Integer
For n = 6 To 200 Step 1
If Cells(n, 3) = "s1" Then
Cells(n, 4).Copy Cells(n, 6)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "s2" Then
Cells(n, 4).Copy Cells(n, 7)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "s3" Then
Cells(n, 4).Copy Cells(n, 8)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "g" Then
Cells(n, 4).Copy Cells(n, 9)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "z1" Then
Cells(n, 4).Copy Cells(n, 10)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "z3" Then
Cells(n, 4).Copy Cells(n, 11)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "sa" Then
Cells(n, 4).Copy Cells(n, 12)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "ke" Then
Cells(n, 4).Copy Cells(n, 13)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "ko" Then
Cells(n, 4).Copy Cells(n, 14)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "i" Then
Cells(n, 4).Copy Cells(n, 15)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "hu" Then
Cells(n, 4).Copy Cells(n, 16)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "k" Then
Cells(n, 4).Copy Cells(n, 17)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "b" Then
Cells(n, 4).Copy Cells(n, 18)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "h" Then
Cells(n, 4).Copy Cells(n, 19)
Cells(n, 23) = "ok"
End If
If Cells(n, 3) = "so" Then
Cells(n, 4).Copy Cells(n, 20)
Cells(n, 23) = "ok"
End If
Next
End Sub
プログラムはここまで。
Dim n As Integer というのは、変数”n”がどういうデータなのかを宣言しているのですが
たとえば、Integerというのは整数値という意味で、ほかにも、文字の場合はCharとか、
長い整数値の場合はLongとかいろいろあります。
エクセルのvbaは賢いので、この行を省いてもちゃんと動作してくれるようで、
分からない場合は、省いてもいいかも。(こんなこと言うと、プロの方には怒られるかもだけど)
For n = 6 To 200 Step 1
は、nが6行目から200行目になるまで、for~Nextに含まれる、プログラムを繰り返します。
という意味で、
”step 1”は、6の次は7、その次は8と、1ずつプラスされていきます。
(”step 2”の場合は、6の次は8、その次は10といった具合に2ずつプラスされていきます)
次に
If Cells(n, 3) = "s1" Then
Cells(n, 4).Copy Cells(n, 6)
Cells(n, 23) = "ok"
End If
の部分は、英数コードに従って、入力された金額を指定の列にコピーするプログラムで
たとえば、上記の場合、英数コードが”s1”の場合は、金額データを同じ行の6列めにコピー
するように命令しています。
↓クリックで拡大
↑のように、項目欄で記入する英数コードは、金額データを転記する部分の項目名のところに書いてあるので、これを
参照すれば分かるようになっています。(使ってる内に覚えてしまいます)
私の場合は、無駄遣いの金額を把握したいので、食費の中でも必要なものを”s1”(syokuhiの1番め)、
明らかに無駄遣いというものは、”s3”に分類しています。(分類することによって無駄遣いの合計金額を把握することが
できます)
その他は雑貨の”z1”、”z3”とか、化粧品は”ke”とか、医療費は”i”とか、自分が分類したいと思うコード
を作って、それぞれに列を割り当てています。
1つの英数コードに対応するプログラムが、前述の、If~End If までのプログラムです。
英数コードが”s1”の場合、”s2”の場合、”z1”の場合・・・、といった具合に、
全部で、15個分の If~End If が羅列されています。
もちろん、配列だとかfind関数だとかを使えば、もっと簡潔なプログラムも組めそうですが、
とりあえず問題なし♪です。
家計簿を使っていくうちに、新しい項目を追加したい、とか
この項目は要らない、という場合には、ここを修正してやれば、うまくいきます。
(あと、対応している月ごとのシートの項目欄も修正してやる必要があります。)
また、
For n = 6 To 200 Step 1
なので、一度に200行目までしか、転記できません。
また、転記する該当セル欄は、入力する段階で”項目”欄に入れた英数コードで判別するように
なっています。
なので、必ず
If Cells(n, 3) = "s1" Then
の部分の、” ”欄の中身と合致するように(全角、半角含めて)、英数コードを入力するようにしてください。