[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]excel表A列内容有不同数量的重复,A列相同的行,取B列数字最大的那一行

本帖最后由 13545876873 于 2024-9-19 09:59 编辑

求助大哥们:这个要怎么实现啊 ;  如果A列相同的行对应的B列数值,是一样的,只需要复制其中的一个就行了

本帖最后由 ppll2030 于 2024-9-16 20:42 编辑

回复 1# 13545876873


    这个直接操作表格,比写脚本还要快啊。
在C列之前插入一列空白列,然后在C2单元格填写公式 “=MAX(IF(A:A=A2,B:B))”,然后下拉填充所有单元格。
在C2单元格使用条件格式,新建规则,使用公式 “=B2=C2”,然后点格式选择一个颜色,当条件成立是就会显示该颜色了。
选择C2单元格,双击下拉填充得到符合条件的结果。
在通过颜色筛选,把无颜色标记的所有行全部删除,剩下的就是你要的结果了。

GIF太大,点击或是拖拽到新窗口查看吧

1

评分人数

TOP

本帖最后由 aloha20200628 于 2024-9-17 11:23 编辑

回复 1# 13545876873

将表1电子表格文件存为 1.csv,运行以下代码生成 2.csv,再用 excel 打开即可...
备注:以下代码存为 test.bat 运行和 1.csv 同目录...
  1. @echo off &setlocal enabledelayedexpansion
  2. sort /rec 8192 1.csv /o 11.csv
  3. (for /f "delims=" %%A in (11.csv) do for /f "tokens=1-2 delims=," %%a in ("%%~A") do (
  4. if "%%~a"=="!_a!" if %%b gtr !_b! set "v=%%A"
  5. if "%%~a" neq "!_a!" if defined v echo,!v!&set "_b=" &set "v="
  6. set "_a=%%a" &if not defined _b set "_b=%%b" &if not defined v set "v=%%A"
  7. )
  8. if defined v echo,!v!)>2.csv
  9. ::del /q 1.csv 11.csv
  10. endlocal&pause&exit/b
复制代码
1

评分人数

TOP

回复 2# ppll2030 大哥,你的图片看不太清哈。 我试了你的方法,
这个函数得到的结果,是B列的最大值,不行啊

TOP

回复 3# aloha20200628
大哥,我试了你的这个方法,有点问题呀
这是文件夹里的内容:
这是表1内容:
这是2.csv内容:

TOP

回复 4# 13545876873


    GIF太大,点击或是拖拽到新窗口查看吧
不行就把下面地址复制到新窗口打开

图片地址: https://ibb.co/RDWW6Cf

TOP

回复 5# 13545876873

你的电脑肯定有问题。

大佬的脚本,我也测试了。结果是一致的。除了没有颜色

TOP

回复 8# 13545876873


    啊。对了,忘了说了,输入了函数后,同时按下Ctrl+Shift+Enter完成才能得到正确的值。

TOP

本帖最后由 aloha20200628 于 2024-9-16 22:12 编辑

回复 5# 13545876873

输出 1.csv 之前一定先按A列排完序的!
3楼代码已订正,先对 1.csv 排序再处理...
如须删除 1.csv, 11.csv 文件可剔除第9行开头的 :: 前缀即可...

TOP

在ThisWorkbook新建VBA宏
  1. Sub SortAndFilter()
  2. ' Order by Column A Asc,B Desc,and select B Max value rows into Sheet2.
  3. On Error Resume Next
  4. Dim rng As Range, oSort As Sort, sht1 As Worksheet, sht2 As Worksheet, i As Long, ii As Long
  5. Dim col1, col2, aValue
  6. col1 = 1 ' 第一列,有重复值
  7. col2 = 2 ' 第二列,取最大值
  8. Application.ScreenUpdating = False
  9. With ThisWorkbook
  10.     Set sht1 = .Worksheets(1)
  11.     Set sht2 = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))
  12.     Set rng = sht1.UsedRange
  13.     Set oSort = sht1.Sort
  14.     With oSort
  15.         .SortFields.Clear
  16.         .SortFields.Add rng.Columns(col1), xlSortOnValues, xlAscending
  17.         .SortFields.Add rng.Columns(col2), xlSortOnValues, xlDescending
  18.         .SetRange rng
  19.         .Header = xlYes
  20.         .MatchCase = False
  21.         .SortMethod = xlPinYin
  22.         .Apply
  23.     End With
  24.     rng.Rows(1).Copy sht2.Rows(1)
  25.     ii = 2
  26.     aValue = Null
  27.     For i = 2 To rng.Rows.Count
  28.         If IsNull(aValue) Or aValue <> rng.Cells(i, col1).Value Then
  29.             'copy this row
  30.             rng.Rows(i).Copy sht2.Cells(ii, 1)
  31.             ii = ii + 1
  32.             aValue = rng.Cells(i, col1).Value
  33.         End If
  34.     Next
  35. End With
  36. Application.ScreenUpdating = True
  37. End Sub
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

本帖最后由 13545876873 于 2024-9-18 17:12 编辑

回复 9# ppll2030
可以了呢
感谢大哥们的帮助


但是对于9万多行的excel表来说,运算太慢了

TOP

本帖最后由 13545876873 于 2024-9-18 17:40 编辑

回复 10# aloha20200628
哦哦

TOP

本帖最后由 13545876873 于 2024-9-18 17:40 编辑

回复 11# flashercs
这个也可以,但宏针多数万行的excel数据,运行有点慢
谢谢大哥!

TOP

本帖最后由 13545876873 于 2024-9-16 22:33 编辑

回复 10# aloha20200628
大哥,修改后的test.bat , 出来的11.csv和2.csv,都是空白呢

1.csv的内容和5楼一样哈

TOP

回复 15# 13545876873

1.csv 似乎超出 sort.exe 的最大排序长度,致使 11.csv 未能成功创建... 只好在 excel 里先按A列排序后再输出 1.csv 了... 代码还须用第一版,如下:
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%A in (1.csv) do for /f "tokens=1-2* delims=," %%a in ("%%~A") do (
  3. if "%%~a"=="!_a!" if %%b gtr !_b! set "v=%%A"
  4. if "%%~a" neq "!_a!" if defined v echo,!v!&set "_b=" &set "v="
  5. set "_a=%%a" &if not defined _b set "_b=%%b" &if not defined v set "v=%%A"
  6. )
  7. if defined v echo,!v!)>2.csv
  8. endlocal&pause&exit/b
复制代码
1

评分人数

TOP

返回列表