【问题标题】:Excel concatenation by using formula or vlookup使用公式或 vlookup 进行 Excel 连接
【发布时间】:2016-04-23 11:52:11
【问题描述】:

我在 Excel 工作簿中有两张工作表。 我需要匹配 SITEID 并将 3 个值连接到 1 的公式,由 / 分隔。 我尝试将 Vlookup 与范围一起使用,但没有得到实际结果。

第一页包含(4 列):

SiteId  Cell    Sector  Bore
MDLH1238    12381   1   10
MDLH1238    12382   2   20
MDLH1238    12383   3   40
MDLH1239    12391   1   60
MDLH1240    12401   1   50
MDLH1240    12402   2   20

第二张表包含(2 列):

SiteId  Bore
MDLH1238
MDLH1239
MDLH1240    

预期的结果应该是这样的:

SiteId  Bore
MDLH1238 10/20/30
MDLH1239 60 
MDLH1240 50/20

【问题讨论】:

  • 匹配,然后索引值,因此 match 根据 ID 获取行,然后索引范围(col x,此行结果)。匹配和索引。
  • 我认为 INDEX 并不可靠,因为并非所有网站都有 3 个条目...您最终会索引到不同的网站吗?

标签: excel vba excel-formula vlookup


【解决方案1】:

您希望能够使用“/”作为分隔符连接数组的元素。不幸的是,原生 Excel 无法做到这一点,但是已经编写了很多好的 VBA 函数,例如描述的那个here

所以我建议这个解决方案:-

=StringConcat("/",IF(Sheet1!A$2:A$7=A2,Sheet1!D$2:D$7,""))

从第二张纸的单元格 B2 开始,并根据需要向下拉。这是一个数组公式,必须使用 CtrlShiftEnter 输入。

为了使用StringConcat函数,需要从网页复制代码,按AltF11,选择Insert|Module,然后粘贴代码.

【讨论】:

    【解决方案2】:

    假设每个站点只有 3 个扇区,并使用您的工作表名称,并假设您的单元格从 A1 开始,在 Sheet2 中输入这些,与 SiteID 相邻:

    单元格 B2:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,1)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,2)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,3)
    

    单元格 B3:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,1)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,2)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,3)
    

    单元格 B4:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,1)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,2)&"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,3)
    

    这应该产生如下内容:

    SiteId    Bore
    MDLH1238  10/20/40
    MDLH1239  60/0/0
    MDLH1240  50/20/0
    

    在扇区 2/3 不存在的地方有额外的“/0”条目,但要做到这一点,公式会变得更长且更难阅读。

    编辑:添加处理“/0”的公式

    单元格 B2:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,1)&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,2)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,2),"")&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,3)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A2,Sheet1!$C$2:$C$7,3),"")
    

    单元格 B3:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,1)&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,2)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,2),"")&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,3)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A3,Sheet1!$C$2:$C$7,3),"")
    

    单元格 B4:

    =SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,1)&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,2)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,2),"")&IF(SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,3)>0,"/"&SUMIFS(Sheet1!$D$2:$D$7,Sheet1!$A$2:$A$7,A4,Sheet1!$C$2:$C$7,3),"")
    

    输出:

    SiteId    Bore
    MDLH1238  10/20/40
    MDLH1239  60
    MDLH1240  50/20
    

    【讨论】:

    • SUBSTITUTE function 会让事情变得更整洁吗?例如=SUBSTITUTE(SUMIFS(D:D,A:A, G2,C:C, 1)&"/"&SUMIFS(D:D,A:A, G2,C:C, 2)&"/"&SUMIFS(D:D,A:A, G2,C:C, 3), "/0", "")(需要工作表名称,但您可以理解)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多