我一直在編寫一些宏來執行一些占星計算(計算符號,月宮,D9 & D60)。的原始數據是使用以下格式:優化代碼以最小化宏的運行時間
LNG上述圖像中的代表在度,分,秒格式表示經度。輸出必須是在以下格式:
我已掀起了下面的代碼來讀取從輸入片材和格式&的數據複製到輸出片材,然後用的經度做計算每個行星都要計算所需的場地。
Sub prepareOutput()
Application.ScreenUpdating = False
Dim c, count, d, l, ll
Dim r As Range
Set r = Worksheets("Ephemerides").Range("a4:" & Worksheets("Ephemerides").Range("a4").End(xlDown).Address)
Worksheets("output").Range("a3").Value = "Date"
For Each d In r
Worksheets("output").Cells(d.Row, 1).Value = d.Value
Next
For Each c In Worksheets("Ephemerides").Range("d2:o2")
If Not IsEmpty(c) Then
count = count + 5
'MsgBox count
If count = 5 Then
Worksheets("output").Cells(2, 2).Value = c.Value
Worksheets("output").Cells(3, 2).Value = "Longitude"
Worksheets("output").Cells(3, 3).Value = "Sign"
Worksheets("output").Cells(3, 4).Value = "Nakshatra"
Worksheets("output").Cells(3, 5).Value = "Navamsa"
Worksheets("output").Cells(3, 6).Value = "D60"
For Each l In Worksheets("Ephemerides").Range(c.Offset(2, 0), c.End(xlDown).Address)
Worksheets("output").Cells(l.Row, 2).Value = l.Value
Worksheets("output").Cells(l.Row, 3).Value = calcSign(l.Value)
Next
count = 2
Else
Worksheets("output").Cells(2, count).Value = c.Value
Worksheets("output").Cells(3, count).Value = "Longitude"
Worksheets("output").Cells(3, count + 1).Value = "Sign"
Worksheets("output").Cells(3, count + 2).Value = "Nakshatra"
Worksheets("output").Cells(3, count + 3).Value = "Navamsa"
Worksheets("output").Cells(3, count + 4).Value = "D60"
For Each ll In Worksheets("Ephemerides").Range(c.Offset(2, 0), c.End(xlDown).Address)
Worksheets("output").Cells(ll.Row, count).Value = ll.Value
Worksheets("output").Cells(ll.Row, count + 1).Value = calcSign(ll.Value)
Next
End If
End If
Next
Application.ScreenUpdating = True
End Sub
Private Function deg2dec(deg As String) As Variant
d = Val(Mid(deg, 1, InStr(deg, "°") - 1))
m = Val(Mid(deg, InStr(deg, "°") + 1, 2))/100
deg2dec = d + m
End Function
Private Function calcSign(deg As String) As String
dec = deg2dec(deg)
Select Case dec
Case 0 To 30
calcSign = "Aries"
Case 30 To 60
calcSign = "Taurus"
Case 60 To 90
calcSign = "Gemini"
Case 90 To 120
calcSign = "Cancer"
Case 120 To 150
calcSign = "Leo"
Case 150 To 180
calcSign = "Virgo"
Case 180 To 210
calcSign = "Libra"
Case 210 To 240
calcSign = "Scorpio"
Case 240 To 270
calcSign = "Saggitarius"
Case 270 To 300
calcSign = "Capricorn"
Case 300 To 330
calcSign = "Aquarius"
Case 330 To 360
calcSign = "Pisces"
End Select
End Function
上面的代碼並不計算所有4個計算字段,現在只是一個計算字段。
我遇到的問題是我的輸入表中有24000行和12列,並且需要很多時間纔將這些數據複製到輸出表中,然後對其進行計算以計算一個更多的值。我必須從一個經度值計算3個字段。
所以,如果你們可以看看代碼,並讓我知道我怎麼可以在這裏最小化運行時間,這將有很大幫助。
如果任何人想看看這裏的工作簿鏈接。 astro.xlsm
在此先感謝所有抽出時間回覆的人。
乾杯
儘管SO說爲了避免感謝和所有,無論如何要感謝你的工作代碼。以下兩行刪除,我認爲這是多餘的。WsOut.Cells(l.Row,2).Value = l.Value WsOut.Cells(l.Row,3).Value = calcSign(l.Value) –
沒問題:)你是對的 - 我忘了刪除那些線。我也從代碼中刪除了這些行,並且它將速度提高了一秒。 –