案外ほっといたものに立ち戻るとよくなったりする。

Pythonでいろいろやろうとしてるんですがまぁそこそこ難しいので、ちょっとVBAに戻ってみようかなと思ったりして。

で久しぶりに自分で作ったマクロをちょっといじったんですよ。

10分かかる処理が3秒で終わるようになりまして。

マジかよ・・・・・ってなりましたね。

やっていた処理は希望納期から配送日の週2日に合わせて納期回答を自動で日数計算するマクロだったんですけども、



Sub 操作シート_ボタン20_Click()


Sheets("Sheet1").Select
Range("S2:S12").Select
Selection.Copy
Sheets("操作シート").Select
Range("M5").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("M6").Select


Sheets("Sheet1").Select


Range("T2:T12").Select
Selection.Copy
Sheets("操作シート").Select
Range("L5").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


Dim d1 As Date
Dim d2 As Date
Dim d3 As Date
Dim d4 As Date
Dim d5 As Date
Dim d6 As Date
Dim d7 As Date

Dim d8 As Date
Dim d9 As Date
Dim d10 As Date
Dim d11 As Date
Dim d12 As Date


d1 = Range("i5").Value
d2 = Range("m5").Value
d3 = Range("m6").Value
d4 = Range("m7").Value
d5 = Range("m8").Value
d6 = Range("m9").Value
d7 = Range("m10").Value

d8 = Range("m11").Value
d9 = Range("m12").Value
d10 = Range("m13").Value
d11 = Range("m14").Value
d12 = Range("m15").Value


Range("k5").Select

Dim i As Long

i = Cells(Rows.Count, 1).End(xlUp).Row - 4

For i = 1 To i


If d1 < d2 Then

ActiveCell.Value = Range("l5").Value
ActiveCell.Offset(1, 0).Select


ElseIf d1 < d3 Then

ActiveCell.Value = Range("l6").Value
ActiveCell.Offset(1, 0).Select


ElseIf d1 < d4 Then

ActiveCell.Value = Range("l7").Value
ActiveCell.Offset(1, 0).Select


ElseIf d1 < d5 Then

ActiveCell.Value = Range("l8").Value
ActiveCell.Offset(1, 0).Select


ElseIf d1 < d6 Then

ActiveCell.Value = Range("l9").Value
ActiveCell.Offset(1, 0).Select



ElseIf d1 < d7 Then

ActiveCell.Value = Range("l10").Value
ActiveCell.Offset(1, 0).Select





ElseIf d1 < d8 Then

ActiveCell.Value = Range("l11").Value
ActiveCell.Offset(1, 0).Select



ElseIf d1 < d9 Then

ActiveCell.Value = Range("l12").Value
ActiveCell.Offset(1, 0).Select

ElseIf d1 < d10 Then

ActiveCell.Value = Range("l13").Value
ActiveCell.Offset(1, 0).Select

ElseIf d1 < d11 Then

ActiveCell.Value = Range("l14").Value
ActiveCell.Offset(1, 0).Select


ElseIf d1 < d12 Then

ActiveCell.Value = Range("l15").Value
ActiveCell.Offset(1, 0).Select


Else

ActiveCell.Value = ActiveCell.Offset(0, -2).Value
ActiveCell.Offset(1, 0).Select


End If

d1 = ActiveCell.Offset(0, -2).Value

Next

End Sub


こんな長ったらしいの書いてまして。

でこれで日数を1500件くらい算出するんですけどね、

動画撮ろうかな。


めちゃくちゃ早くなって満足です。

最初と最後に


Application.Calculation = xlCalculationManual


Application.Calculation = xlCalculationAutomatic

を入れただけなので、最近学んでいるPythonはまるで関係ないといえばないんですが、思い立ったが吉日みたいなのもあるんですね。

他にも3時間くらいかかるマクロがあるので、次はそっちを何とか・・・・まぁ年内になんとか・・・





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