写一个vba代码实现以下需求,1遍历表格的C列,记录每个单元格的个数,2.编辑D列的值,记录单元格每个值的个数,3.将C列的值返回给E列,值的个数返回给F列,4.将D列的值返回给I列,值的个数返回给H列,
时间: 2024-02-16 10:05:16 浏览: 59
以下是实现需求的VBA代码:
```VBA
Sub RecordCount()
Dim lastRow As Long
Dim countDict As Object
Dim valueDict As Object
Dim i As Long
Dim cellValue As String
Dim count As Long
'获取最后一行行号
lastRow = ActiveSheet.Cells(Rows.Count, "C").End(xlUp).Row
'初始化字典对象
Set countDict = CreateObject("Scripting.Dictionary")
Set valueDict = CreateObject("Scripting.Dictionary")
'遍历C列,记录每个单元格的个数和每个值的个数
For i = 1 To lastRow
cellValue = ActiveSheet.Cells(i, "C").Value
If countDict.exists(cellValue) Then
countDict(cellValue) = countDict(cellValue) + 1
Else
countDict(cellValue) = 1
End If
If valueDict.exists(cellValue) Then
If InStr(1, valueDict(cellValue), ActiveSheet.Cells(i, "D").Value) = 0 Then
valueDict(cellValue) = valueDict(cellValue) & "," & ActiveSheet.Cells(i, "D").Value
End If
Else
valueDict(cellValue) = ActiveSheet.Cells(i, "D").Value
End If
Next i
'将C列的值返回给E列,值的个数返回给F列
For i = 1 To lastRow
cellValue = ActiveSheet.Cells(i, "C").Value
ActiveSheet.Cells(i, "E").Value = cellValue
ActiveSheet.Cells(i, "F").Value = countDict(cellValue)
Next i
'将D列的值返回给I列,值的个数返回给H列
For i = 1 To lastRow
cellValue = ActiveSheet.Cells(i, "C").Value
ActiveSheet.Cells(i, "I").Value = valueDict(cellValue)
ActiveSheet.Cells(i, "H").Value = Len(valueDict(cellValue)) - Len(Replace(valueDict(cellValue), ",", "")) + 1
Next i
End Sub
```
使用方法:
1. 打开Excel表格,按下Alt+F11键,打开VBA编辑器;
2. 在左侧的项目窗格中,选择需要编辑的表格所在的工作簿;
3. 在菜单栏中选择“插入”->“模块”,打开新建模块;
4. 将以上代码复制到新建模块中;
5. 返回Excel表格界面,按下Alt+F8键,打开宏对话框,选择刚才新建的宏;
6. 点击“运行”按钮,即可开始执行宏。
该代码会遍历选定表格的C列,记录每个单元格的个数和每个值的个数,并将结果返回给E、F、I、H列。请注意,代码中的字典对象需要在使用前进行初始化,否则会出现错误。另外,代码中使用了InStr函数判断是否重复,该函数会忽略大小写,如果需要区分大小写,可以使用InStrB函数。
阅读全文