如何在 Excel 中修剪和添加字母

如何在 Excel 中修剪和添加字母

我有四个案例,结果应该如“输出”中所述。基本计划是单元格不应给出以“-”结尾的输出,同时如果单词之间有任何“-”,它应该出现。

有人能帮助我吗?

擅长

答案1

根据我对您查询的理解,我建议使用辅助列来解决问题。此外,您使用的是 Excel 2016,而我使用的是 Excel 2016 或更高版本中提供的名为 TEXTJOIN 的函数。

样本数据位于单元格 F3:F10 中。相邻的是辅助列,下一个单元格 H3 是最终输出。

在此处输入图片描述

G3 中的公式是

=IF(F3="-",IF(COUNTIF(F3:$F$10,"-")=COUNTA(F3:$F$10),"",IF(ISBLANK(F3),"",F3)),IF(ISBLANK(F3),"",F3))

沿着目标行将其向下拖动。

最终输出 H3 中的公式是

=TEXTJOIN(,TRUE,G3:G10)

请参阅下文了解其工作原理。

在此处输入图片描述


没有辅助列的解决方案

请参阅下面的屏幕截图。

在此处输入图片描述

F3 中的公式是

=TEXTJOIN(,TRUE,E3:INDEX(E3:E10,MAX(IF(E3:E10="-",0,ROW(E3:E10)))-ROW(E2)))

CTRL++创建数组公式。公式将自动括在花括号中,以表明它是数组公式SHIFTENTER

如果您盯着第 1 行,则-ROW(E2)不需要最后一部分。

答案2

我认为这可以通过一个简单的函数来实现,比如=LEFT(CONCATENATE(range,x)x 是最后一个“-”,但我不知道如何正确获取 x。

因此,如果您对 VBA 满意,则可以使用“用户定义函数”。否则,您可能必须使用辅助列。

至于 UDF,你可以使用类似这样的方法:

Function TrimText(value_range As Range, trim_this As String) As String
   Dim text As String, x As Long, i As Long, c As Variant
   text = ""
   i = 1
   For Each c In value_range
      text = text & c.Value
      If Not c.Value = trim_this Then x = i
      i = i + 1
   Next c

   TrimText = Left(text, x)

End Function

这只是一个简单的循环,计算最后一个字母的位置

并在输出中输入:=TrimText(your range,"-")

忽略我的语言对函数使用“;”而不是“,”

在此处输入图片描述

答案3

如果您有 Excel 2016+,则可以使用该CONCAT函数。无需辅助列:

=CONCAT($A$4:INDEX($A:$A, LOOKUP(2,1/($A$4:$A$11<>"-"),ROW(A4:A11))))

算法

  • 用于LOOKUP确定范围内不包含的最后一行-
  • A4是第一个包含数据的单元格(行)
  • 使用该INDEX函数创建没有连字符的最后一个地址

如果要使用整列引用,或者可能包含最后一个连字符后的空格(要排除)的引用,则稍微修改一下以排除空格:

=CONCAT($A$4:INDEX($A:$A,LOOKUP(2,1/(($A:$A<>"-")*($A:$A<>"")),ROW($A:$A))))

在此处输入图片描述

相关内容