搜索工作表1,A列中的值,将其复制到工作表2中,然后复制接下来的三行

时间:2018-08-22 01:05:33

标签: excel vba excel-vba vlookup

我有100多页的文件,其中包含有关本组织潜在资助者的信息。我想制作一个Excel宏,该宏从此文档中提取联系人信息,并将其放入Excel电子表格中。这是文档的样子:

Here's what the source file looks like

地址分散在文本中,我一直在复制并将其粘贴到Excel中,但是由于该地址位于多行中,因此会粘贴到电子表格的多行中。然后,我需要手动将该字符串解析为可用格式。

我想做的是有一个宏,它搜索单词"Contact",然后接受同一列中的下三行(因此,VLookUp无法正常工作对我来说),并将它们解析为一行中不同列中的普通地址格式。

我想要一个可以打开它的宏:

      A
1: Contact:
2: Kate Bull
3: 123 High Road, Whetstone, London
4: N20 8HL

对此:

       A               B              C          D       E
1: Kate Bull   123 High Street    Whetstone   London  N20 8HL

1 个答案:

答案 0 :(得分:1)

用逗号分隔示例字符串将产生3个字符串:

  1. Contact: Kate Bull 123 High Road
  2. Whetstone
  3. London N20 8HL

实施

  1. 在excel文件上,A1 = Original StringB1 = ContactC1 = State D1 = Country/Zip
  2. A2下方粘贴字符串
  3. 打开VBE>插入Module>在代码下方粘贴
  4. 在代码行3中更改工作表名称以匹配您的工作表名称(当前代码为Sheet1
  5. 运行代码(下面的示例工作表设置/输入/输出)

enter image description here

Option Explicit

Sub CSV()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim Contact As Range, Contacts As Range, ContactString, i

Set Contacts = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)

For Each Contact In Contacts
    ContactString = Split(Contact, ", ", , vbTextCompare)
        For i = LBound(ContactString) To UBound(ContactString)
            Contact.Offset(, i + 1) = ContactString(i)
        Next i
    ContactString = ""
Next Contact

End Sub