excel - 查找并标记元素的第一次出现

标签 excel vba

假设我在 A 列中有一个元素列表,我想找到每个元素第一次出现的位置,并在 B 列中将其标记为“YES”,如下所示:

<表类=“s-表”> <标题> A 列 B 列 <正文> 苹果 是 奶酪 是 面包 是 奶酪 否 奶酪 否 面包 否 菠萝 是

如何在 VBA 中执行此操作?

最佳答案

标记首次出现(VBA 公式)

Excel 公式

=IF(COUNTIF(A$2:A2,A2)=1,"Yes","No")

紧凑

Sub FlagFirstOccurrencesCompact()
    
    Const SourceFirstCellAddress As String = "A2"
    Const DestinationColumn As String = "B"
    Const YesFlag As String = "Yes"
    Const NoFlag As String = "No"
    
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    
    With ws.Range(SourceFirstCellAddress)
        Dim lRow As Long: lRow = ws.Cells(ws.Rows.Count, .Column).End(xlUp).Row
        If lRow < .Row Then Exit Sub
        Dim Formula As String
        Formula = "=IF(COUNTIF(" & .Address(, 0) & ":" & .Address(0, 0) & "," _
            & .Address(0, 0) & ")=1,""" & YesFlag & """,""" & NoFlag & """)"
        With .Resize(lRow - .Row + 1).EntireRow.Columns(DestinationColumn)
            .Formula = Formula
            .Value = .Value
        End With
    End With

End Sub

有争议

Sub FlagFirstOccurrencesTEST()
    Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
    FlagFirstOccurrences ws.Range("A2"), "B", "Yep", "Nope"
End Sub

Sub FlagFirstOccurrences( _
        ByVal SourceFirstCell As Range, _
        ByVal FlagColumn As String, _
        Optional ByVal YesFlag As String = "Yes", _
        Optional ByVal NoFlag As String = "No")
    
    With SourceFirstCell.Cells(1)
        Dim lRow As Long
        lRow = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row
        If lRow < .Row Then Exit Sub
        Dim Formula As String
        Formula = "=IF(COUNTIF(" & .Address(, 0) & ":" & .Address(0, 0) & "," _
            & .Address(0, 0) & ")=1,""" & YesFlag & """,""" & NoFlag & """)"
        With .Resize(lRow - .Row + 1).EntireRow.Columns(FlagColumn)
            .Formula = Formula
            .Value = .Value
        End With
    End With

End Sub

关于excel - 查找并标记元素的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71427913/

相关文章:

vba - Excel 宏仅从今天创建的文件中读取输入

R导入excel表,单元格a1成为新列中的行值

VBA 单元格突出显示

VBA:找到第二大值

vba - 如何从 Excel VBA 获取总体规划中的 MSP 子项目状态日期

javascript - 如何使用 vba 宏触发特定网页事件

sql - 从excel导入数据并插入sql表

c++ - 从 VBA 中的 (c++ BSTR) 字符串中删除 chr(0)

vba - 如何在 VBA 中将工作表从一个工作簿移动到另一个工作簿

vba - excel vba中打印和打印预览事件的区别