Vba 查找不同的文本并将其复制到相邻单元格

Vba 查找不同的文本并将其复制到相邻单元格,vba,excel,Vba,Excel,这是我的第一篇帖子,我不是程序员,但我希望你们能帮我 我有一个包含300个单元格的列表,所有单元格都引用了包含在单元格文本中的一本书的特定章节。每个单元格的内容各不相同,但我需要提取的内容始终采用以下格式: “…可在第A01章:蓝调历史中找到。” “…可在D27章:蓝调的许多面孔中找到。” 我只想提取章节号文本“A01”或“D27”等,并将其复制到与找到文本的位置相邻的单元格中 在单元格中,我要复制的章节号前面总是有单词“chapter”和空格,后面总是有冒号 我在论坛上搜索了几个小时,你们都已

这是我的第一篇帖子,我不是程序员,但我希望你们能帮我

我有一个包含300个单元格的列表,所有单元格都引用了包含在单元格文本中的一本书的特定章节。每个单元格的内容各不相同,但我需要提取的内容始终采用以下格式:

“…可在第A01章:蓝调历史中找到。”

“…可在D27章:蓝调的许多面孔中找到。”

我只想提取章节号文本“A01”或“D27”等,并将其复制到与找到文本的位置相邻的单元格中

在单元格中,我要复制的章节号前面总是有单词“chapter”和空格,后面总是有冒号

我在论坛上搜索了几个小时,你们都已经帮我弄明白了如何使用VB查找、复制和粘贴精确的文本匹配到另一个单元格,我确实找到了这个答案,看起来很有希望,但我不知道如何修改细节使其适合我


谢谢你能给我的任何帮助

如果文本位于单元格A1中,则将此公式粘贴到B1中:

=MID(A1,SEARCH("Chapter ",A1)+8,3)

然后,您可以将B1复制到B2:B100以在那里进行提取。

如果您的文本位于单元格A1中,则将此公式粘贴到B1:

=MID(A1,SEARCH("Chapter ",A1)+8,3)

然后,您可以将B1复制到B2:B100以在那里进行提取。

以下是VBA代码。我假设您的数据在
范围(“A1:A300”)


这是VBA代码。我假设您的数据在
范围(“A1:A300”)


虽然其他人所说的是正确的(您不需要VBA宏来实现这一点),但这里有一些方法是可行的。即使您的章节长度超过三个字符(可变章节号文本长度),这也会起作用

子SEFindStrings()
将搜索范围变暗为范围
'无论搜索范围在哪里,请修改。我的是从B4开始的,所以我用它作为开始
在我的Cells方法中,我使用了“B”。更改以适合您的数据
设置搜索范围=范围(“B4”,单元格(行数,“B”)。结束(xlUp))
暗淡的迈塞尔山脉
Dim locationStart为整数
Dim locationEnd为整数
将关键字设置为字符串
关键词=“可在第章中找到”
'通过,如果单元格不是空的,它会找到短语'can found in Chapter'
'然后获取接下来的三个字符。
对于searchRange中的每个myCell
如果myCell.Value为“”,则
locationStart=InStr(myCell.Value,关键字)
如果位置开始0,则
locationEnd=InStr(locationStart,myCell.Value,“:”)-1
myCell.Offset(0,1).Value=(Mid(myCell.Value_
(locationStart+Len(关键字)),locationEnd-Len(关键字)))
如果结束
如果结束
下一个迈塞尔
端接头

虽然其他人所说的都是真的(你不需要VBA宏来实现这一点),但这里有一些方法是可行的。即使你的章节长度超过三个字符(可变章节号文本长度),这也会起作用

子SEFindStrings()
将搜索范围变暗为范围
'无论搜索范围在哪里,请修改。我的是从B4开始的,所以我用它作为开始
在我的Cells方法中,我使用了“B”。更改以适合您的数据
设置搜索范围=范围(“B4”,单元格(行数,“B”)。结束(xlUp))
暗淡的迈塞尔山脉
Dim locationStart为整数
Dim locationEnd为整数
将关键字设置为字符串
关键词=“可在第章中找到”
'通过,如果单元格不是空的,它会找到短语'can found in Chapter'
'然后获取接下来的三个字符。
对于searchRange中的每个myCell
如果myCell.Value为“”,则
locationStart=InStr(myCell.Value,关键字)
如果位置开始0,则
locationEnd=InStr(locationStart,myCell.Value,“:”)-1
myCell.Offset(0,1).Value=(Mid(myCell.Value_
(locationStart+Len(关键字)),locationEnd-Len(关键字)))
如果结束
如果结束
下一个迈塞尔
端接头

您应该在该范围内循环(请参见:),如果Instr(cell.value,“可在第章中找到”)0,则您可以操作cell.value字符串,以提取cell.value的下3个字符,并将其写入cell.offset(1,0)。字符串操作:。一步一步来,边走边发布你的进度(编辑你的问题),我们可以帮助你调试!我想你并不真的需要VBA。一个在字符串中查找“Chapter”的公式,然后在下面剪切相关的文本位,应该做同样的事情。中(A1,查找(“章节”,A1,1)+8,3)你们都很棒。这个解决方案和下面使用搜索的解决方案只给了我章节号的前两个字符,所以我把3改成了4,效果非常好。非常感谢。您应该在该范围内循环(请参见:),如果Instr(cell.value,“可在第章中找到”)0,则您可以操作cell.value字符串,以提取cell.value的接下来3个字符,并将它们写入cell.offset(1,0)。字符串操作:。一步一步来,边走边发布你的进度(编辑你的问题),我们可以帮助你调试!我想你并不真的需要VBA。一个在字符串中查找“Chapter”的公式,然后在下面剪切相关的文本位,应该做同样的事情。中(A1,查找(“章节”,A1,1)+8,3)你们都很棒。这个解决方案和下面使用搜索的解决方案只给了我章节号的前两个字符,所以我把3改成了4,效果非常好。非常感谢。
Sub SEFindStrings()

Dim searchRange As range

'wherever your search range is, modify. Mine started at B4 so I used that as the start
'cell and in my Cells method I used "B". Change so it fits your data
Set searchRange = range("B4", Cells(Rows.count, "B").End(xlUp))

Dim myCell As range
Dim locationStart As Integer
Dim locationEnd As Integer
Dim keyWords As String

keyWords = "can be found in Chapter "

'Goes through, and if the cell isn't empty it finds the phrase 'can be found in Chapter '
'and then gets the next three characters.
For Each myCell In searchRange
    If myCell.Value <> "" Then
    locationStart = InStr(myCell.Value, keyWords)
        If locationStart <> 0 Then
        locationEnd = InStr(locationStart, myCell.Value, ":") - 1
            myCell.Offset(0, 1).Value = (Mid(myCell.Value, _
            (locationStart + Len(keyWords)), locationEnd - Len(keyWords)))
        End If
    End If
Next myCell


End Sub