按键精灵去重复表格内容问题
a = 1
b = 2
c = 3
//循环读取表格文档内容
For i = 1 To 999
a = a + 1
b = b + 1
c = c + 1
//读取规格
Gug = LazyExcel.ExcelRead(1, i, 1)
Chf = LazyExcel.ExcelRead(1, a, 1)
If Gug = Chf Then
Call LazyExcel.ExcelRows(1,a,"删除","",Index)
End If
If Gug = "" Then
Exit For
Next
以上代码如果Gug获取的第一行内容=Chf获取的第二行内容 就删除Chf获取的内容所在行,但是这样只能删除两个重复的保留一个,如果重复的有三行不能删除2个保留一个。
运行前 |
---|
小明 |
小明 |
小红 |
小红 |
小红 |
运行后 |
---|
小明 |
小红 |
小红 |
怎么修改为 |
---|
小明 |
小红 |
' 打开Excel文件
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("C:\test.xlsx")
Set objWorksheet = objWorkbook.Worksheets("Sheet1")
' 获取表格总行数和总列数
intRowCount = objWorksheet.UsedRange.Rows.Count
intColCount = objWorksheet.UsedRange.Columns.Count
' 创建字典对象,用于去重复
Set dict = CreateObject("Scripting.Dictionary")
' 循环读取表格内容,并将不重复的内容保存到字典对象中
For i = 1 To intRowCount
For j = 1 To intColCount
' 获取单元格内容
strCellValue = objWorksheet.Cells(i, j).Value
' 如果字典对象中不存在该内容,则保存到字典对象中
If Not dict.Exists(strCellValue) Then
dict.Add strCellValue, 1 ' 将数量初始化为1
Else
dict.Item(strCellValue) = dict.Item(strCellValue) + 1 ' 如果存在,则数量加1
End If
Next
Next
' 清空表格内容
objWorksheet.UsedRange.ClearContents
' 将去重后的内容写入表格,并将重复项数量写入第二列
intRow = 1
For Each strCellValue In dict.Keys
objWorksheet.Cells(intRow, 1).Value = strCellValue
objWorksheet.Cells(intRow, 2).Value = dict.Item(strCellValue)
intRow = intRow + 1
Next
' 关闭Excel文件
objWorkbook.Close True
objExcel.Quit
GPT 回答
参考GPT和自己的思路:
您可以尝试使用以下代码来实现保留第一个出现的重复行,删除后续重复行的功能:
1. a = 1
2. b = 2
3. c = 3
4. //循环读取表格文档内容
5. For i = 1 To 999
6. a = a + 1
7. b = b + 1
8. c = c + 1
9. //读取规格
10. Gug = LazyExcel.ExcelRead(1, i, 1)
11. Chf = LazyExcel.ExcelRead(1, a, 1)
12. If Gug = Chf Then
13. If i > 1 Then
14. Pre = LazyExcel.ExcelRead(1, i-1, 1)
15. If Pre <> Gug Then
16. Call LazyExcel.ExcelRows(1, a, "删除", "", Index)
17. End If
18. Else
19. Call LazyExcel.ExcelRows(1, a, "删除", "", Index)
20. End If
21. End If
22. If Gug = "" Then
23. Exit For
24. End If
25. Next
通过增加第13 ~ 20行的代码,当Gug和Chf相等时,先判断当前行是否为第一行,如果不是则获取上一行的内容,如果上一行的内容和当前行的内容不相等,则删除当前行。这样就可以保留第一个出现的重复行,删除后续的重复行。希望对您有所帮助!
该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用一个哈希表(Hash table)来记录每一行出现的次数,如果次数大于1,就删除该行。
以下是C++的示例代码:
C++代码:
#include <iostream>
#include <string>
#include <unordered_map>
#include "LazyExcel.h"
using namespace std;
int main() {
unordered_map<string, int> countMap;
for (int i = 1; i < 999; ++i) {
string value = LazyExcel.ExcelRead(1, i, 1);
if (value.empty()) break;
++countMap[value];
}
for (int i = 1; i < 999; ++i) {
string value = LazyExcel.ExcelRead(1, i, 1);
if (value.empty()) break;
if (countMap[value] > 1) {
LazyExcel.ExcelRows(1, i, "删除", "", Index);
--countMap[value];
}
}
return 0;
}