案外ほっといたものに立ち戻るとよくなったりする。
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時間くらいかかるマクロがあるので、次はそっちを何とか・・・・まぁ年内になんとか・・・
この記事が気に入ったらサポートをしてみませんか?