【VBA】スリムになった

ダイエットの話ではない、VBAの話だ。

1か月間いろいろ試行錯誤して、

妥協して妥協して妥協して

業務が回ればいい。

という認識のもといろいろ調べながら

業務をこなして1か月。

たまーーーーに課題のまま放っておいたものに

最適解が見つかったりする。

例えば

こういうデータ。

この黒枠を毎月求めるみたいな感じの。

まぁ、B×C=Dなわけなんだけども。

その分だけコピーすればいいわけだけども。

これをボタン一発で処理するのがマクロで

以前の私ならこんな感じのソース

マクロの記録機能を使いながら編集する感じで

Sub Macro1()

Range("D3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
Range("D3").Select
Selection.AutoFill Destination:=Range("D3:D200"), Type:=xlFillDefault


Range("C2000").Select
Selection.End(xlUp).Select

ActiveCell.Offset(1, 0).Select


Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents

これが限界だった。

これ結構エラーがあって、

仕様としてやっていこうと妥協していた。

これだとまず

Range("D3").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
Range("D3").Select
Selection.AutoFill Destination:=Range("D3:D200"), Type:=xlFillDefault

ここでD3を選んで

そこに=B3×C3

をいれてから200行までコピーする。

画面だとまぁこんな感じになる


なんで200行かといえば、ありえない桁数にするためだ。

なんで?ってのはいったん置いといてほしい

でつぎがこれで

Range("C2000").Select

こうなる

でSelection.End(xlUp).Selectで

ActiveCell.Offset(1, 0).Selectで

アクティブなセルから一つ下にずらして

Range(Selection, Selection.End(xlToRight)).Selectで

コントロールシフト押しながら右キー押したのと同じで

Range(Selection, Selection.End(xlDown)).Selectで

コントロールシフト押しながら下キー押したのと同じで

Selection.ClearContentsで

クリアされる


まぁ枠はちょっと残っちゃうけどこれはまぁ簡便ということで

これの欠点は無駄な処理が多いということ。

ろく商事の毎月の明細数が平均400だったとしたら

式を500くらいまで用意して余分なものを消す。

という感じ。

C列の最終行のデータがあるまで

D列に式を代入し続ける。

みたいなのができなかったので力業でやっていました。


それが今日。

Sub Macro2()

'Dim LastRow As Long

LastRow = Cells(Rows.Count, 2).End(xlUp).Row

Range(Range("D3"), "D" & LastRow).FormulaR1C1 = "=RC[-1]*RC[-2]"

End Sub


こんな感じになりました。

こっちは意味はあんまりよくわかってないんですが、

LastRow = Cells(Rows.Count, 2).End(xlUp).Row

これがC列の最終行数を取得する

だからこのExcelでいうと6

Range(Range("D3"), "D" & LastRow)

がD3からD6までの範囲を、ということで

FormulaR1C1

これがあんまよくわかっていないけど

= "=RC[-1]*RC[-2]"

これで式を代入する。

あたりをつけて余分に計算式を入れたりしてないので

だいぶスリムになりました。

これが1か月前の私

これが今日の私

いやぁ~、毎日触ってるといろいろひらめきがあって楽しい。

1か月でここまで行けるからこのまま1年続けたら

結構システムチックなことができるんじゃないだろうか。

今後も頑張っていこう。



この記事が気に入ったらサポートをしてみませんか?