データが散発的に入力されたシートの週平均が必要なので、以下のコードを思いついた。これは丸めを除いて動作します。セルに丸めが表示されない
Sub Sort_em()
Dim dhold As Date
Dim src As Worksheet
Dim dst As Worksheet
Dim rowCounter As Long
Dim ztorage() As Variant
Dim holdDate As Date
Dim startDate As Date
Dim endDate As Date
Dim rng As Range
Dim lst As Long
Dim holdrack As String
Dim avehold As Single
Dim ztorRow As Integer
Dim ztorCol As Integer
Dim endSrch As String
Dim startSrch As String
Set src = Sheets("Readings")
Set dst = Sheets("Weekly_Avg")
rowCounter = 2
holdDate = src.Cells(rowCounter, 1)
startDate = src.Cells(rowCounter, 1).Text
startDate = Format(startDate, "d-mmm-yy")
holdrack = src.Cells(rowCounter, 1).Text
endDate = src.Cells(rowCounter, 1).Text
endSrch = Format(endDate, "d-mmm-yy")
Do While src.Cells(rowCounter, 1) <> ""
endDate = src.Cells(rowCounter, 1).Text
lst = Get_Last(1, dst.Cells) + 1
Do Until WeekdayName(Weekday(endDate)) = "Wednesday" Or DateDiff("d", startDate, endDate) > 7
endDate = DateAdd("d", 1, endDate)
Loop
endSrch = Format(endDate, "d-mmm-yy")
Set rng = src.UsedRange.Find(endSrch, LookIn:=xlValues, LookAt:=xlWhole)
Do Until Not rng Is Nothing
endDate = DateAdd("d", -1, endDate)
endSrch = Format(endDate, "d-mmm-yy")
Set rng = src.UsedRange.Find(endSrch, LookIn:=xlValues, LookAt:=xlWhole)
Loop
ztorage = src.Range(Cells(rowCounter, 1).Address, Cells(rng.Row, 12).Address)
dst.Cells(lst, 1) = ztorage(1, 1)
dst.Cells(lst, 2) = ztorage(1, 2)
For ztorCol = 3 To UBound(ztorage, 2)
For ztorRow = 1 To UBound(ztorage, 1)
avehold = avehold + ztorage(ztorRow, ztorCol)
Next ztorRow
avehold "avehold" 変数が正しく小数第1位(73.8)
avehold = Round(avehold/(ztorRow - 1), 1)
が、セルに割り当てられたときに、丸めが無視さに丸め番号が含まれています。 (73.8000030517578)
dst.Cells(lst, ztorCol) = avehold
avehold = 0
Next ztorCol
rowCounter = rowCounter + ztorRow - 1
If src.Cells(rowCounter, 1) = "" Then Exit Do
startDate = src.Cells(rowCounter, 1).Text
startSrch = Format(startDate, "d-mmm-yy")
Loop
End Sub
私は間違っていますか?
これはExcelの問題ではなく、浮動小数点表現の問題です。まともな答えと、「各コンピュータ科学者が浮動小数点演算について知っておくべきこと」についての説明は、http://stackoverflow.com/a/30954047/509840を参照してください。VBAをスクラップし、割り当てられたセルを小数点以下1桁を表示します。 – rajah9
@ rajah9ありがとうございます。私は脳卒中のために長い間業界外に出ていて、ずっと忘れていました。これは非常に役に立ちました。 –
迅速かつ完全な復旧を希望します。 – rajah9