Excel宏将单元格数据转换为多列

时间:2014-07-14 21:03:30

标签: excel vba excel-vba

我在Excel中有一大堆单元格如下所示:

FName LName,Loc JB

缩写很糟糕,所以:名字,姓氏,位置,工作。

我需要移动它,所以看起来像这样:

FName LName || LOC || JB

注意事项:

  1. 必须删除名称后的。
  2. 必须将该位置大写(它是2或3个字母,不一致大写。我想让它们全部上限)。
  3. JB最后是1到4个字符。我只需要拿最后一点并将其转储。
  4. 他们都被至少一个空格隔开(第一个有逗号和空格)。
  5. 我想要一个宏来做这个,因为我必须以相对频率来做,并且用手做200行这是一个痛苦。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

听起来你需要的只是下一栏中的公式。如果您的值位于以单元格A1开头的A列中,请尝试:

=LEFT(A1,FIND(",",A1)-1)&" || "&UPPER(MID(A1,FIND(",",A1)+2,FIND(" ",A1,FIND(",",A1)+2)-FIND(",",A1)-2))&" || "&RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND(",",A1)+2))

此公式将逗号左侧的所有内容都添加到" || "。然后它找到下一个空格开始搜索逗号后的两个字符。然后使用该索引可以提取位置并使其成为大写。然后我们再次添加" || "。然后知道该空间的索引,我们可以抓住所有权利来抓住工作。同样的逻辑可以应用于VBA,但这可能是一种更快的解决方案,更容易在计算机之间传递。

答案 1 :(得分:0)

您不一定需要宏。你可以用一系列right()的left()的mid()和find()来实现。还需要使用Upper()作为loc。

例如,如果您的数据位于A列中,要获取B列中名字和姓氏的列,您可以使用:

=LEFT(A1,FIND(",",A1)-1)

这将返回所有内容,但不包括逗号。对于Loc,假设C1中的Loc和JB之间有逗号,你可以使用:

=UPPER(MID(A1,FIND(",",A1)+2,FIND(",",A1,FIND(" ",A1)+1)-FIND(" ",A1)-3))

那将返回字符串中间的大写版本,在第一个逗号之后开始2个字符(因此你没有获得空格),并且结束2比第一个和第二个逗号之间的差异小。如果没有逗号,您可以执行类似的搜索,以查找最后一个空格的位置。

最后的IN d1是:

=RIGHT(A1,LEN(A1)-FIND(" ",A1,FIND(",",A1)+2))

在澄清逗号和空格后编辑。