首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA Excel :删除excel行

VBA Excel :删除excel行
EN

Stack Overflow用户
提问于 2014-07-31 08:24:19
回答 2查看 252关注 0票数 1

我有一个excel文件,如下所示:

代码语言:javascript
复制
Collumn B         Collumn C

John               4000
John               4000
John               4000
John               3201

我想删除相同的行: John 4000,但保留行John 3201。我在用

Cells.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

但是这删除了John 3201行和John 4000行,结果是John 4000。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-31 08:37:13

你提供了一个错误的范围论点。在本例中,Cells指的是从单元格A1开始的整个工作表,因此如果您的第一个真实数据列位于B中(如您的示例所示),则您将索引(空)列A加上名称,所以Excel留给您一个独立的A1是正确的。

将您的范围对象修改为。

代码语言:javascript
复制
Range("B1:C6").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

再试一次。

票数 0
EN

Stack Overflow用户

发布于 2014-07-31 08:44:19

为了改变现状,我决定用手动的方法来代替。这实际上是扫描整个范围,查找重复的行并删除它们:

代码语言:javascript
复制
Dim vRange As Range
Dim vRow As Long
Dim vRowStart As Long
Dim vRowCount As Long
Dim vDict As Object
Dim vCol As Long
Dim vColStart As Long
Dim vColEnd As Long
Dim vLine As String

Set vRange = ActiveSheet.UsedRange
vRowCount = vRange.Rows.Count
Set vDict = CreateObject("Scripting.Dictionary")
vDict.CompareMode = TextCompare
vRowStart = 1
vColStart = 1
vColEnd = 2

vRow = vRowStart
Do While vRow <= vRowCount
    vLine = ""
    For vCol = vColStart To vColEnd
        vLine = vLine & Chr(0) & vRange(vRow, vCol).Value
    Next
    If vDict.Exists(vLine) Then
        vRange(vRow, 1).EntireRow.Delete
        vRow = vRow - 1
        vRowCount = vRowCount - 1
    Else
        vDict.Item(vLine) = True
    End If
    vRow = vRow + 1
Loop
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25054098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档