Excel VBA Scripting.Dictionary计算逐时日均气压丢失首行数据求助
排查Excel VBA Scripting.Dictionary计算逐时均值首行丢失问题
常见原因及修正方案
1. 循环起始行跳过首行
如果代码遍历数据时直接从第2行开始(比如Set rng = Range("A2:C100")),会直接跳过首行数据,导致其未被统计。
修正:调整遍历范围包含首行:
Set rng = Range("A1:C100") ' 确保从数据首行开始遍历
2. Dictionary键初始化逻辑遗漏首行
处理首行数据时,对应的日期+小时键是首次出现,若代码未在此时将首行值存入Dictionary,就会丢失该数据。比如错误逻辑:
' 错误:首次遇到键时未赋值,直接跳过 If dict.Exists(key) Then dict(key) = dict(key) + cell.Value End If
修正:补充首次遇键时的赋值逻辑,若要计算均值,还需同步统计样本数:
Dim dictSum As New Scripting.Dictionary ' 存储逐时气压总和 Dim dictCount As New Scripting.Dictionary ' 存储逐时样本数量 Dim key As String Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 先处理首行数据 key = Format(Cells(1, "A"), "yyyy-mm-dd") & "_" & Format(Cells(1, "B"), "hh") dictSum(key) = Cells(1, "C").Value dictCount(key) = 1 ' 遍历剩余行 For i = 2 To lastRow key = Format(Cells(i, "A"), "yyyy-mm-dd") & "_" & Format(Cells(i, "B"), "hh") If dictSum.Exists(key) Then dictSum(key) = dictSum(key) + Cells(i, "C").Value dictCount(key) = dictCount(key) + 1 Else dictSum(key) = Cells(i, "C").Value dictCount(key) = 1 End If Next i ' 输出逐时均值 For Each key In dictSum.Keys Debug.Print key & " 均值:" & dictSum(key) / dictCount(key) Next key
3. 数据读取偏移错误
如果用Offset获取日期、小时或气压值时偏移量计算错误,会导致首行数据未被正确读取。比如首行气压在C列,却用cell.Offset(0,1)读取,就会读错列。
修正:直接通过列索引或列名读取数据,避免Offset出错,比如Cells(i, "C").Value。
本地窗口排查要点
- 查看
dictSum的Count是否符合预期(比如首小时有4个数据,对应键的计数应为4) - 检查首行对应的
key是否存在于dictSum中,其值是否为1026.8(首行气压值) - 确认
dictCount中对应key的计数是否包含首行的1个样本
内容的提问来源于stack exchange,提问作者Jerry Hsu
相关产品推荐
相关产品推荐

