ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6701|回复: 64

求助各位大佬:用VBA调整位置,使各列没有重复值。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-31 08:20 | 显示全部楼层 |阅读模式
电子表中共有3列,各列有30行,里面有的姓名出现三次,有的出现两次。想用VBA达到以下效果:
调整各人姓名位置(各人姓名所在的行不能变,仅改变所在列),使每列中各人的姓名不出现重复,即每一列中没有重复值。


附件1.rar

9.48 KB, 下载次数: 59

TA的精华主题

TA的得分主题

发表于 2024-7-31 11:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
就你这个数据,应该做不到行数不变的情况下同列不重复。你可以自行验证。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-31 12:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ykcbf1100 发表于 2024-7-31 11:00
就你这个数据,应该做不到行数不变的情况下同列不重复。你可以自行验证。

能呀,调整后的效果如图的右三列。
调整后效果如右边列.png

TA的精华主题

TA的得分主题

发表于 2024-7-31 14:33 | 显示全部楼层
关键字:filter
GIF 2024-07-31 14-32-50.gif

附件1.zip

20.08 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-7-31 14:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub limonet()
    Dim Arr As Variant, Brr As Variant, Crr As Variant, Drr As Variant, i%, j%, Tmp$
    i = Range("A" & Rows.Count).End(xlUp).Row
    Arr = Application.Transpose(Range("A2:A" & i))
    Brr = Application.Transpose(Range("B2:B" & i))
    Crr = Application.Transpose(Range("C2:C" & i))
    Drr = Range("A2:C" & i)
    For j = i - 1 To 1 Step -1
        Tmp = Drr(j, 2)
        If UBound(Filter(Arr, Drr(j, 1))) > 0 Then
            If UBound(Filter(Brr, Drr(j, 2))) > 0 Then
                If UBound(Filter(Crr, Drr(j, 3))) > 0 Then
                    Drr(j, 2) = Drr(j, 1)
                    Brr(j) = Drr(j, 1)
                    Drr(j, 1) = Drr(j, 3)
                    Arr(j) = Drr(j, 3)
                    Drr(j, 3) = Tmp
                    Crr(j) = Tmp
                Else
                    Drr(j, 2) = Drr(j, 3)
                    Brr(j) = Drr(j, 3)
                    Drr(j, 3) = Drr(j, 1)
                    Crr(j) = Drr(j, 1)
                    Drr(j, 1) = Tmp
                    Arr(j) = Tmp
                End If
            End If
        End If
    Next j
    Range("D2").Resize(i - 1, 3) = Drr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-31 15:07 | 显示全部楼层
本帖最后由 仁声 于 2024-7-31 15:30 编辑

limonet 大佬,看你旁边的统计,以为达到了效果,用重复格式一看,同一列中还是有好多重复项。没有达到每一列中没有重复项的效果,红字的为重复了的。
还是有重复项.png

TA的精华主题

TA的得分主题

发表于 2024-7-31 17:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
抱歉,重新写。

TA的精华主题

TA的得分主题

发表于 2024-8-1 14:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-1 15:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-1 15:59 | 显示全部楼层
仁声 发表于 2024-7-31 12:21
能呀,调整后的效果如图的右三列。

你这个有解的结果是怎么来的,手工调的吗
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 14:49 , Processed in 0.036381 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表