かどのやなさん

昨年、福井県坂井市三国町で新規就農した存在価値のない人のブログです

【Excel】再計算を止める

今日はオンライン交流会のはずですが・・・まだ何にも連絡がありませんね。時間ギリギリに設定するのでしょうか?うーん、トラブルが起きそうな予感がしますが・・・・。

 

さて、昨日は一日確定申告準備で、帳簿の修正です。やはり楽天ポイントでの資材購入等も確定申告に入れ込もうと思い、修正をし始めているのですが、結構記録数が多いので時間がかかっています。

私の場合、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

 

 

再計算を止めるだけで劇的に処理が早くなりました。

 

それでは。