总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
1 实现功能
如下图所示表格中,A列记录了各个部门的名称,B列则记录了每个部门对应的实际员工人数

现需要根据预设的“区间”(如下图D列所示),统计出每个“区间”分别包含了多少个部门,并将最终的统计数量填写到E列
另外,关于D列“区间”,可以根据需要自由设置区间范围,只要遵循“数字下限 + 分隔符 + 数字上限”的格式(例如“0~39”),代码就能自动识别这些区间,并完成相应的计算。如下图所示,
2.1 操作步骤
- 在VBA编辑器左侧的“工程资源管理器”窗口中,右键点击你的工作簿名称,选择“插入” -> “模块”
2.2 代码实现
整体思路:读取D列的区间定义,统计B列数据落在各区间内的数量,并将统计结果(包括区间名称和对应数量)输出到E列
核心技术:使用Dictionary对象来管理区间和计数,无论D列中有多少个不同的区间(例如0~39, 40~59, 60~79等),都能自动识别并为其创建计数器,无需预先知道区间的数量和具体内容
参考代码如下:
Sub CountDataByIntervalToColumnE() Dim ws As Worksheet Dim lastRowB As Long, lastRowD As Long Dim i As Long, j As Long Dim dataValue As Double Dim intervalStr As String Dim lowerBound As Double, upperBound As Double Dim intervalDict As Object Dim outputRow As Long Dim key As Variant ' 设置要操作的工作表,这里使用活动工作表 Set ws = ActiveSheet ' 创建字典对象用于存储每个区间及其对应的计数 Set intervalDict = CreateObject("Scripting.Dictionary") ' 获取B列和D列的最后一行数据行号 lastRowB = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row lastRowD = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row '初始化区间字典。遍历D列,将每个区间字符串作为键,计数值初始化为0 For i = 2 To lastRowD intervalStr = Trim(ws.Cells(i, "D").Value) If intervalStr <> "" Then ' 确保每个唯一的区间只在字典中出现一次 If Not intervalDict.exists(intervalStr) Then intervalDict.Add intervalStr, 0 End If End If Next i ' 遍历B列数据,进行区间判断和计数 For i = 2 To lastRowB If IsNumeric(ws.Cells(i, "B").Value) And ws.Cells(i, "B").Value <> "" Then dataValue = ws.Cells(i, "B").Value ' 遍历字典中的所有区间键,判断数据值属于哪个区间 For Each key In intervalDict.Keys intervalStr = CStr(key) ' 解析区间字符串,例如将 "0~39" 分解为下限和上限,分隔符波浪号"~" Dim splitArr() As String splitArr = Split(intervalStr, "~") If UBound(splitArr) >= 1 Then lowerBound = Val(Trim(splitArr(0))) upperBound = Val(Trim(splitArr(1))) ' 判断数据是否在区间内(包含边界) If dataValue >= lowerBound And dataValue <= upperBound Then intervalDict(key) = intervalDict(key) + 1 Exit For ' 找到一个匹配区间后立刻跳出内层循环 End If End If Next key End If Next i ' 将统计结果输出到E列 ' 先清空E列可能存在的旧结果(从第1行开始) ws.Columns("E").ClearContents outputRow = 1 ' 从E列的第1行开始输出 ' 写入表头 ws.Cells(outputRow, "E").Value = "数量" outputRow = outputRow + 1 ' 遍历字典,将每个区间对应计数写入工作表 For Each key In intervalDict.Keys ws.Cells(outputRow, "E").Value = intervalDict(key) ' 数量写入E列 outputRow = outputRow + 1 Next key MsgBox "区间统计已完成!", vbInformation, "完成" ' 清理对象 Set intervalDict = Nothing Set ws = NothingEnd Sub
3 结尾
好了,今天的编程知识到此结束了。最后分享一个冷知识:磁盘碎片
磁盘碎片,更准确地应称为文件碎片,它是指一个文件被分散存储在整个硬盘的不同物理位置上。这主要是由于长期对硬盘进行文件的写入、删除和修改操作造成的。另外,下载大文件或系统频繁使用虚拟内存时,也会产生大量碎片
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识