今日はオンライン交流会のはずですが・・・まだ何にも連絡がありませんね。時間ギリギリに設定するのでしょうか?うーん、トラブルが起きそうな予感がしますが・・・・。
さて、昨日は一日確定申告準備で、帳簿の修正です。やはり楽天ポイントでの資材購入等も確定申告に入れ込もうと思い、修正をし始めているのですが、結構記録数が多いので時間がかかっています。
私の場合、Excelで帳簿を作成しているので、会計ソフトと違って修正するには確認をしながら修正していく必要があるのですが、見落としも多くて大変です。よくあるのがデータの追加削除によって、セルの参照がズレてしまうことによる数値が変わってしまうこと。これがあると修正にむちゃくちゃ時間がかかってしまいます。
そこで、VBAでセルの参照を無くしてしまいます。
例えばなのですが、こんな感じ
sub Kakutei
dim Ws as WorkSheet
dim RowMax, L as Long
Set Ws = WorkSheets("仕訳帳")
RowMax = Ws.Cells(Rows.Count,"B").End(xlUp).Row
For L = 4 to RowMax
If Left(Ws.Cells(L,"B").Formula,1) = "=" Then
Ws.Cells(L,"B").value = Ws.Cells(L,"B").Value
EndIf
Next L
Set Ws = Nothing
End Sub
って、感じで。日本語にするとB列のすべての行の中に、セルの参照式があればそのセルの値をそのセルに書き込めって感じです。これでセルの参照が無くなっちゃうのですが、実行してみたら問題発生。データ数が多すぎて処理がむちゃぐちゃ時間がかかるんですよね。
画面を見てみたら、ステータスバーに”再計算中”って出ていたので、あ~再計算をとめたらいいのねってことで、プログラム実行中は自動再計算はしないようにしました。
自動再計算を手動にする方法はこんな感じ。
Application.Calculation = xlCalculationManual
逆に自動計算をする場合はこんな感じ。
Application.Calculation = xlCalculationAutomatic
これを先ほどのプログラムに組み込むとこんな感じ。
sub Kakutei
dim Ws as WorkSheet
dim RowMax, L as Long
Set Ws = WorkSheets("仕訳帳")
RowMax = Ws.Cells(Rows.Count,"B").End(xlUp).Row
Application.Calculation = xlCalculationManual
For L = 4 to RowMax
If Left(Ws.Cells(L,"B").Formula,1) = "=" Then
Ws.Cells(L,"B").value = Ws.Cells(L,"B").Value
EndIf
Next L
Application.Calculation = xlCalculationAutomatic
Set Ws = Nothing
End Sub
再計算を止めるだけで劇的に処理が早くなりました。
それでは。