在单元格中搜索文本并将文本复制到VBA中的另一个单元格?
我有一个列,其中包含包含参数的行。比如说 W2=[PROD][FO][2.0][Customer] W3=[PROD][GD][1.0][P3] W4=客户生产中的问题 我有一个将其他列复制到另一个工作表的函数,但是对于这个列,我需要执行以下操作在单元格中搜索文本并将文本复制到VBA中的另一个单元格?,vba,excel,Vba,Excel,我有一个列,其中包含包含参数的行。比如说 W2=[PROD][FO][2.0][Customer] W3=[PROD][GD][1.0][P3] W4=客户生产中的问题 我有一个将其他列复制到另一个工作表的函数,但是对于这个列,我需要执行以下操作 搜索单元格并查找[P*] 星号表示1到5之间的数字 如果找到[P*],则将P*复制到第4列的“计算”表中 基本上,移除单元格中的所有内容,除了有一个方括号,后面是P、数字和方括号的地方 有人知道我怎么做吗?或者,可以更轻松地跨列复制,然后删除所有不
- 搜索单元格并查找[P*]
- 星号表示1到5之间的数字
- 如果找到[P*],则将P*复制到第4列的“计算”表中
- 基本上,移除单元格中的所有内容,除了有一个方括号,后面是P、数字和方括号的地方
有人知道我怎么做吗?或者,可以更轻松地跨列复制,然后删除所有不符合上述条件的内容。编辑:修复了错误的解决方案 如果你对空格没意见,也不在乎*>5,我会这样做,然后复制第4列:
=IF(ISNUMBER(SEARCH("[P?]",FirstSheet!$W2)), FirstSheet!$W2, "")
需要注意的重要事项:
- ??是单个字符的通配符;如果可以在该位置使用多个字符,则可以使用*
- 如果找到,将显示单元格的原始值,否则留空
=MID(FirstSheet!$W2,SEARCH("[P",FirstSheet!$W2)+2,1)
=IF(AND(ISNUMBER($E2),$E2>0,$E2<=5,MID($W2,SEARCH("[P",FirstSheet!$W2)+3,1))), FirstSheet!$W2, "")
=MID(FirstSheet!$W2,搜索(“[P],FirstSheet!$W2)+2,1)
=如果(和)(ISNUMBER($E2),$E2>0,$E2秒编辑:
我在这里编辑是为了使用正则表达式而不是循环。这可能是实现您的目标最有效的方法。请参见下文,并告知我们它是否适用于您:
Function MatchWithRegex(sInput As String) As String
Dim oReg As Object
Dim sOutput As String
Set oReg = CreateObject("VBScript.RegExp")
With oReg
.Pattern = "[[](P[1-5])[]]"
End With
If oReg.test(sInput) Then
sOutput = oReg.Execute(sInput)(0).Submatches(0)
Else
sOutput = ""
End If
MatchWithRegex = sOutput
End Function
Sub test2()
Dim a As String
a = MatchWithRegex(Range("A1").Value)
If a = vbNullString Then
MsgBox "None"
Else
MsgBox MatchWithRegex(Range("A1").Value)
End If
End Sub
第一次编辑:
我的解决方案如下。我会编写一个函数,首先测试字符串中是否存在模式,如果存在,我会根据括号将其拆分,然后选择与模式匹配的括号。让我知道这是否适用于您
Function ExtractPNumber(sInput As String) As String
Dim aValues
Dim sOutput As String
sOutput = ""
If sInput Like "*[[]P[1-5][]]*" Then
aValues = Split(sInput, "[")
For Each aVal In aValues
If aVal Like "P[1-5][]]*" Then
sOutput = aVal
End If
Next aVal
End If
ExtractPNumber = Left(sOutput, 2)
End Function
Sub TestFunction()
Dim sPValue As String
sPValue = ExtractPNumber(Range("A2").Value)
If sPValue = vbNullString Then
'Do nothing or input whatever business logic you want
Else
Sheet2.Range("A1").Value = sPValue
End If
End Sub
旧职位:
在VBA中,您可以使用带模式的Like
运算符表示一个开括号、字母p、1-5之间的任意数字,然后使用以下语法表示一个闭括号:
Range("A1").Value LIke "*[[]P[1-5][]]*"
到目前为止,你有什么代码?你可以使用Worksheetfunction.Search()
,或者搜索精确的字符串。到目前为止,我所掌握的只是将一列复制到另一张工作表的代码,这对这些工作表是有效的。我刚刚补充说,复制该列可能更容易,然后删除所有不适用的文本[P*]但我不知道从哪里开始我该如何将其输入VBA,使其删除除此之外的所有内容though@K20GH查看我的编辑,让我知道这是否对您有效。非常好。这很有效。现在我只需要找出如何循环遍历每一行/单元格,然后将结果放入另一行/单元格cell@K20GH那应该一点也不难,如果你如果你觉得有困难,就写一篇新的帖子,其中的细节会阻碍你,我相信你会得到立即的帮助:)我有一些问题,但我认为这可能与正则表达式有关。如果[P*]之前或之后有空格,它似乎找不到模式