컴퓨터/엑셀
vba 합계 application.function.sum vs 배열 합계
풍경소리^^
2021. 2. 20. 09:02
Option Explicit
Sub sumif하기()
Dim str As Variant
Dim cot As Integer
str = "가"
cot = Application.WorksheetFunction.SumIf(Range("B2:B12"), str, Range("C2:C12"))
MsgBox cot
End Sub
Sub f_randbetween()
Dim i As Long
Dim start_time As Date
Dim end_time As Date
Dim running_time As Date
start_time = Timer
For i = 2 To 65000
Sheets("Sheet1").Range("a" & i) = Application.WorksheetFunction.RandBetween(60, 99)
Next i
end_time = Timer
running_time = end_time - start_time
MsgBox Format(running_time, "0.000000초")
End Sub
Sub f_sum()
Dim start_time As Date
Dim end_time As Date
Dim running_time As Date
start_time = Timer
Sheets("Sheet1").Range("F" & 1) = Application.WorksheetFunction.Sum(Range("A2", "A65000"))
end_time = Timer
running_time = end_time - start_time
' MsgBox start_time & vbCrLf & end_time & vbCrLf & Format(running_time, "0.000000초")
Sheets("Sheet1").Range("E" & 1) = "함수"
Sheets("Sheet1").Range("G" & 1) = Format(running_time, "0.000000초")
End Sub
Sub f_sum_arr()
Dim start_time As Date
Dim end_time As Date
Dim running_time As Date
Dim a(64998)
Dim i As Long
Dim sum_i As Long
Dim s As Long
start_time = Timer
s = 0
For i = 0 To 65000 - 2
s = s + Sheets("Sheet1").Range("A" & i + 2)
Next i
end_time = Timer
running_time = end_time - start_time
' MsgBox "합계는 " & s & "입니다." & vbCrLf & Format(running_time, "0.0000초")
Sheets("Sheet1").Range("E" & 2) = "배열"
Sheets("Sheet1").Range("F" & 2) = s
Sheets("Sheet1").Range("G" & 2) = Format(running_time, "0.000000초")
End Sub
Sub con()
Call f_sum
Call f_sum_arr
Call f_sum_Evaluate
MsgBox "계산완료"
End Sub
Sub f_sum_Evaluate()
Dim wbTemp As Workbook
Dim strSum As String
Dim start_time As Date
Dim end_time As Date
Dim running_time As Date
' For Each wbTemp In Workbooks
' If wbTemp.Name Like "파트#*" Then
' strSum = strSum & "+'[" & wbTemp.Name & "]Sheet1'!A2:C2"
' End If
' Next wbTemp
start_time = Timer
' strSum = ThisWorkbook.Path + "Sheet1!A2:A65000"
strSum = "sum(A2:A65000)"
Range("F3").Value = Application.Evaluate(strSum)
end_time = Timer
running_time = end_time - start_time
' MsgBox "합계는 " & s & "입니다." & vbCrLf & Format(running_time, "0.0000초")
Sheets("Sheet1").Range("E" & 3) = "Evaluate"
Sheets("Sheet1").Range("G" & 3) = Format(running_time, "0.000000초")
End Sub
Sub workbook_sum2()
Dim wbTemp As Workbook
Dim varSum As Variant
Dim i As Long
' For Each wbTemp In Workbooks
' If wbTemp.Name Like "파트#*" Then
' varTemp = wbTemp.Sheets(1).Range("A2:C2").Value
' varSum = arr_sum(varSum, varTemp)
' End If
' Next wbTemp
Range("A2:C2").Value = varSum
End Sub
Function arr_sum(arr1 As Variant, arr2 As Variant) As Variant
'2차원 배열간의 합계
Dim lngi As Long, lngj As Long
Dim lngk As Long, lngl As Long
Dim arrTemp() As Variant
lngi = UBound(arr2, 1)
lngj = UBound(arr2, 2)
If IsArray(arr1) Then
ReDim arrTemp(1 To lngi, 1 To lngj)
For lngk = 1 To lngi
For lngl = 1 To lngj
arrTemp(lngk, lngl) = arr1(lngk, lngl) _
+ arr2(lngk, lngl)
Next lngl
Next lngk
arr_sum = arrTemp
Else
arr_sum = arr2
End If
End Function