VBA - 将字符串中的字符拆分,复制并粘贴到另一个单元格中(具有条件)

时间:2017-05-04 18:33:16

标签: vba excel-vba excel

我开始使用VBA并且正在努力处理需要清理的工作表。 我有一个字符串列,混合了zipcodes和城市名称。我想从列A中提取邮政编码并放在B列中,并在城市名中用下划线从C列中提取。

我的(示例)输入:

A 
55442
11211
1
12
11211_brooklyn
1002_new_york
new_york
brooklyn

我想要什么

A
55442
11211
1
12
11211_brooklyn
1002_new_york
new_york
brooklyn

B
55442
11211
1
12
11211
1002


C




brooklyn
new_york
new_york
brooklyn

我理解如何使用Left公式提取字符,但这还不够。

有什么想法吗? 谢谢。

3 个答案:

答案 0 :(得分:2)

B2:
=IF(ISNUMBER(A2),A2,IFERROR(1*LEFT(A2,FIND("_",A2)-1),""))

C2:
=MID(A2, 1+LEN(B2)+ISNUMBER(B2),99)

enter image description here

编辑 - 因为看起来像00010_alaska这样的情况;包含前导零的邮政编码,应该用于列C

C2:
=IF(B2="",A2, IFERROR(MID(A2,1+FIND("_",A2),99),""))

答案 1 :(得分:1)

在A列中放置您的源列表 在B栏(邮政编码)中放入公式:

clCreateCommandQueue()

在C列(城市)中放置公式

clSetCommandQueueProperty()

答案 2 :(得分:0)

我经历过并使用帮助列来确定数据是否以数字开头。如果是的话,我想出它是否也有一个名字。然后我返回完整的数据集或截断的数据集,直到城市名称。 B栏:

=IF(ISNUMBER(INT(MID(A1,1,1))),MID(A1,1,IF(ISERROR(SEARCH("_",A1)),LEN(A1),SEARCH("_",A1)-1)),"")

然后我通过并确定数据是否以数字以外的其他内容开头。如果是的话,它就是一个城市,我使用整个数据集来记录该记录。如果没有,我测试看它是否有下划线。如果确实如此,那就有一座城市在场。然后我使用帮助列来确定下划线开始的位置并返回城市名称。我在帮助列中留下了空白,只得到一个名字。然后,我将它连接起来以得到我的最终答案。由此产生的超级公式为:

=CONCATENATE(IF(NOT(ISNUMBER(INT(MID(A1,1,1)))),A1,""),IF(IF(IF(NOT(ISNUMBER(INT(MID(A1,1,1)))),A1,"")="",IFERROR(SEARCH("_",A1),""),"")="","",MID(A1,IF(IF(NOT(ISNUMBER(INT(MID(A1,1,1)))),A1,"")="",IFERROR(SEARCH("_",A1),""),"")+1,LEN(A1))))

这很难看,但它会完成工作。我建议直接复制并粘贴到工作表中而不是使用VBA。但是,如果必须使用VBA,请遍历B列和C列,并将提供的公式应用到单元格公式属性中。我希望有所帮助。