首页 > 解决方案 > 在工作表 1 的 A 列中搜索一个值,将其复制到工作表 2,然后复制接下来的三行

问题描述

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

这是源文件的样子

地址分散在文本中,我一直在将它们复制并粘贴到 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

标签: vbaexcelvlookup

解决方案


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

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

实施

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

在此处输入图像描述

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

推荐阅读