【问题标题】:How to check if three columns have similar like value in Excel如何检查三列是否在Excel中具有相似的值
【发布时间】:2018-03-09 11:19:52
【问题描述】:

我在下面提到了excel表。

ID  column1    column2     column3
1   Apple      apple - x   Apple - le
2   Mango      banana      cat
3   Dog        DOG - A     DOG - B

我想匹配column1、column2和column3的字符串(其中至少一个单词在这三列中相似)。

所需输出:

ID  column1    column2     column3     Status
1   Apple      apple - x   Apple - le  True
2   Mango      banana      cat         False
3   Dog        DOG - A     DOG - B     True

【问题讨论】:

  • 我想知道为什么这个问题被赞成。 OP根本没有展示他自己的任何研究。

标签: r excel vba


【解决方案1】:

LO BO 想法的代码。

在带有 VBA 的 Excel 中,尝试以下用户定义函数:

Public Function ThreeWay(s1 As String, s2 As String, s3 As String) As Boolean
    Dim a As String, b As String, c As String

    a = Split(s1, " ")(0)
    b = Split(s2, " ")(0)
    c = Split(s3, " ")(0)
    ThreeWay = False
    If a = b And a = c Then ThreeWay = True
End Function

编辑#1:

只有两列,使用:

Public Function TwoWay(s1 As String, s2 As String) As Boolean
    Dim a As String, b As String, c As String

    a = Split(s1, " ")(0)
    b = Split(s2, " ")(0)
    TwoWay = False
    If a = b Then TwoWay = True
End Function

编辑#2:

要忽略大小写差异,请尝试:

Public Function ThreeWayIC(s1 As String, s2 As String, s3 As String) As Boolean
    Dim a As String, b As String, c As String

    a = Split(UCase(s1), " ")(0)
    b = Split(UCase(s2), " ")(0)
    c = Split(UCase(s3), " ")(0)
    ThreeWayIC = False
    If a = b And a = c Then ThreeWayIC = True
End Function

【讨论】:

  • 如何只为 2 列运行此 VBA,我应该在哪里更改代码。
  • @Gray 的学生 如果 column1 是 Abc-Xyz 而 column2 是 ABC Xve,则它不适用于字符串
  • 当然不是,我建议自己做一些研究,即看看 StrComp
  • @Rahulshah 您希望代码忽略大小写差异还是尊重它们??
  • @Gary'sStudent 我想忽略大小写差异。
【解决方案2】:

base R 中有类似的东西吗?

lst1 <- lapply(strsplit(as.character(df$column2), " - "), function(x)
    trimws(tolower(x)));
lst2 <- lapply(strsplit(as.character(df$column3), " - "), function(x)
    trimws(tolower(x)));

df$Status <- sapply(1:nrow(df), function(i)
    any(lst1[[i]] %in% lst2[[i]]));
df;
#  ID column1   column2    column3 Status
#1  1   Apple apple - x Apple - le   TRUE
#2  2   Mango    banana        cat  FALSE
#3  3     Dog   DOG - A    DOG - B   TRUE    

说明:在" - "的基础上拆分column2column3中的条目,修剪所有空格并将所有术语转换为小写;然后检查any 术语是否存在于column2column3 中。


样本数据

df <- read.table(text =
    "ID  column1    column2     column3
1   Apple      'apple - x'   'Apple - le'
2   Mango      'banana'      cat
3   Dog        'DOG - A'     'DOG - B'", header = T);

【讨论】:

    【解决方案3】:

    如果您使用Split function 获取单元格的第一个单词,它应该可以工作(请参阅“从文本字符串的开头返回文本,直到第一个空格”)然后使用 @ 计算匹配数987654322@.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多