【问题标题】:Marking 1 if word ends with one of the suffixes如果单词以其中一个后缀结尾,则标记 1
【发布时间】:2020-09-03 18:57:00
【问题描述】:

假设我有这个。

Words             Mark                 Suffix
Happily                                ly
Emotional                              dom                              
Emotionally
Surfdom

如果单词以后缀列表中的某个后缀结尾,我想标记为 1,否则标记为 0。

Words             Mark                 Suffix
Happily            1                   ly
Emotional          0                   dom                              
Emotionally        1
Surfdom            1

我尝试了lookupvlookup,但它们不完整。我该怎么做?

【问题讨论】:

  • 如果这三列是 A,B & C 那么 B2 = =IF(OR(RIGHT(A2,LEN($C$2))="ly",RIGHT(A2,LEN($C$3))="dom"),1,0)
  • @NareshBhople 当您单击输入新评论时,它会显示“使用 cmets 询问更多信息或提出改进建议。避免在 cmets 中回答问题。”这意味着:请不要在 cmets 中回答问题。
  • @teylyn 。感谢您的指导。我不确定这是否是答案,我添加评论只是为了找到 OP 的回复,如果这是他/她正在寻找的。​​span>
  • @NareshBhople 好吧,这就是答案的真正意义所在。 OP 可以随时对答案发表评论。答案可以被投票并标记为解决方案。我赞成你的。

标签: arrays excel string excel-formula substring


【解决方案1】:

我相信您正在寻找COUNTIF 本身通过通配符构造OR

=SUMPRODUCT(COUNTIF(A2,"*"&C$2:C$3))

或者如果你有 O365,=SUM() 而不是 =SUMPRODUCT()。如果您不需要引用 C 列本身,我们可以创建自己的数组:

=SUM(COUNTIF(A2,{"*ly","*dom"}))

这总是给你 1 或 0,因为字符串只能有一个结尾 =)


【讨论】:

  • 太棒了!我喜欢它,因为它不需要 IFERROR 掩盖我所做的方式。只是一个疑问,为什么不使用更短的=SUM(COUNTIF(A2,"*"&C$2:C$3))
  • 我同意 CSE 部分,但 SUM+COUNTIF 公式在没有 CSE 的情况下也能正常工作。
  • 啊,是的,这正是它为您工作的原因(您可以看到隐式交集@SUM = 前面被删除)@shrivallabha.redij。因此对于 O365,我们可以将 SUMPRODUCT 更改为 SUM。很高兴谜团解开了。呵呵
  • 太棒了。谢谢!
【解决方案2】:

这是一种方法,可以帮助您扩展 @NareshBhople 在这里提出的建议。

=IFERROR(LOOKUP(2,1/(RIGHT(A2,LEN($C$2:$C$3))=$C$2:$C$3)),0)

  1. 调整 C 列中的范围以适应条件。

  2. 不要选择整列和

  3. 确保条件范围没有空格。

【讨论】:

    【解决方案3】:

    我没有找到一个工作表函数来完成这项工作,但这里有一个 UDF(用户定义函数),它的工作原理与此类似。

    Function Suffixed(Cell As Range) As Integer
    
        Dim Suff        As Variant          ' list of Suffixes
        Dim Word        As String           ' the word extracted from 'Cell'
        Dim L           As Integer          ' length of suffix string
        Dim R           As Long             ' row counter
    
        Word = Cell.Value
        If Len(Word) Then                   ' skip if blank (return 0)
            ' set the range in column D, starting in row 2 to the column's end
            Suff = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp)).Value
            For R = 1 To UBound(Suff)
                L = Len(Suff(R, 1))
                If StrComp(Right(Word, L), Suff(R, 1), vbTextCompare) = 0 Then
                    Suffixed = 1
                    Exit For
                End If
            Next R
        End If
    End Function
    

    在标准代码模块中安装代码。这不是 Excel 设置的任何代码模块。您必须插入它,它的默认名称将是Module1。之后,您可以使用您习惯的语法从工作表中调用该函数。例如,

    =Suffixed(A2)
    

    如果单词以列表中的后缀结尾,该函数将返回 1,否则返回 0。您可以修改代码以将后缀列表移动到您想要的位置。更改列字母的两个实例和指定列表第一行的数字 2 的一个实例。

        ' set the range in column D, starting in row 2 to the column's end
        Suff = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp)).Value
    

    列表的末尾是动态的,代码会找到它。不要在列表中留下空白。

    【讨论】:

      【解决方案4】:

      如果这三列是 A、B 和 C,那么 B2 = =IF(OR(RIGHT(A2,LEN($C$2))=$C$2,RIGHT(A2,LEN($C$3))=$C$3),1,0)

      上述公式提供了灵活性,可以将任何值放入 C2 和 C3 并标记它们。

      您不必参考 C 列 =IF(OR(RIGHT(A2,2)="ly",RIGHT(A2,3)="dom"),1,0)

      如果您在 C 列中有大量数据,这不适合。在这种情况下,您可能需要 VBA 解决方案。

      【讨论】:

      • 谢谢!但是有没有办法将 C 列中的所有内容都取出,而不是一个一个地指定“ly”和“dom”?
      • 如果不可能,公式甚至不需要引用 C 列
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2011-04-06
      • 2017-09-09
      相关资源
      最近更新 更多