识别并复制唯一行

时间:2014-11-26 16:31:02

标签: excel excel-vba vba

我有以下格式的数据文件:

enter image description here

在A栏中,标识符双重出现(例如302_60)或单独出现(例如310_58)。其他信息见B列。

我想做的是:

  1. 标记A列中具有单个标识符的行 C列中的TRUE / FALSE
  2. 对于任何TRUE标记,插入一行BELOW
  3. 将ENTIRE标记行的内容(此处只是A,B列)复制到插入的行中
  4. 我使用= COUNTIF(A:A,A1)= 1

    解决了#1

    enter image description here

    然后我写了一个VBA脚本来解决#2

    Sub ins_below_and_copy()
    Dim c As Range
    For Each c In Range("C1:C100")
    If InStr(1, c, "TRUE", vbTextCompare) > 0 Then
        Rows(c.Offset(1, 0).Row & ":" & c.Offset(1, 0).Row).Insert Shift:=xlDown
    End If
    Next c
    End Sub
    

    enter image description here

    达到预期的最终结果(#3)

    enter image description here

    看起来很简单吧?我一直在尝试.Copy和.Paste命令,但一直遇到类型不匹配错误,这个错误对我来说没有意义(因为我不是一个称职的VBA编码器)。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你已经完成了所有艰苦的工作,填补空白很容易。选择两列,HOME>编辑 - 查找&选择,转到特殊...,空白,确定,=,向上和Ctrl + Enter。

答案 1 :(得分:0)

您可以在创建空行后运行此步骤。

Dim sheet As String
Dim lastRow As Long

sheet = "SheetName"
lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).Row

For r = 2 To lastRow   'Assuming you have a Header Row
    If Sheets(sheet).Cells(r, 1) = "" Then
        Sheets(sheet).Cells(r - 1, 3) = "FALSE"
        Sheets(sheet).Cells(r, 1) = Sheets(sheet).Cells(r - 1, 1)
        Sheets(sheet).Cells(r, 2) = Sheets(sheet).Cells(r - 1, 2)
        Sheets(sheet).Cells(r, 3) = Sheets(sheet).Cells(r - 1, 3)
    End If
Next r