VBA查找单元格中的数字,字母和字符,并仅用数字/字母替换单元格的内容

时间:2018-07-13 04:23:21

标签: excel string vba excel-vba

还有另一个问题。

我正在工厂中创建另一个Excel工具,目前我从采购订单跟踪网站中提取数据并过滤掉多余的数据,仅留下采购标签本身,单引号和结尾括号。我需要删除引号和结尾括号,所以我只有PO本身,因为我需要将此PO注入另一个站点的URL。我尝试将通配符与我编写的某些代码一起使用,但是PO将被替换为几个星号,也称为“通配符”。我可能忽略了一些显而易见的事情,但我无法弄清楚。

数据示例:

enter image description here

代码示例:

Sub Filter_DockMaster_Data2()

Dim Main As Worksheet
    Set Main = Worksheets("Main")
Dim ISA_List As Worksheet
    Set ISA_List = Worksheets("ISA_List")
Dim ISA_Results As Worksheet
    Set ISA_Results = Worksheets("ISA_Results")
Dim ISA_Raw As Worksheet
    Set ISA_Raw = Worksheets("ISA_Raw")

Worksheets("ISA_Results").Select
Range("A1").Select
    Do Until IsEmpty(ActiveCell)
        ActiveCell.replace What:="********"" ]", Replacement:="********", LookAt:= _
            xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
        ActiveCell.Offset(1, 0).Select
    Loop

End Sub

希望这是有道理的。

快速说明,PO的长度会随着时间的流逝而变化,因此,我想尽可能使它动态。谢谢您的帮助。

2 个答案:

答案 0 :(得分:2)

编码网址

用于使文本成为URL友好的功能预期如何? :)

=ENCODEURL(A1)

例如,此:

1234ABCD']

...被编码为:

1234ABCD%27%5D

...准备插入查询参数(URL)字符串中。请参阅下面的链接中的文档,包括更多示例。


文本功能,例如LEFT

也就是说,还有其他几种方法可以做到这一点。

您说过“替换”,但看起来您只需要剪掉最后两个字符?

这会剪切A1中文本的最后2个字符:

=LEFT(A1,LEN(A1)-2)

SUBSTITUTE功能

如果要做要在单元格中“替换”文本,则可以使用SUBSTITUTE

示例:

如果单元格A1包含:

1234ABCD']

...您可以输入另一个单元格:

=SUBSTITUTE(A1,"]","")

...仅删除]。您还可以嵌套功能。要同时删除{{1}的],请使用以下公式:

'

=SUBSTITUTE(SUBSTITUTE(A1,"]",""),"'","") 函数语法:

SUBSTITUTE SUBSTITUTE( text, old_text, new_text, [instance_num]

)函数语法具有以下参数:

  • SUBSTITUTE-(必需)文本或对包含要替换字符的文本的单元格的引用。
  • Text-(必需)您要替换的文本。
  • Old_text-(必需)您要替换为New_text的文本。
  • old_text-(可选)指定要替换为Instance_num的{​​{1}}。如果指定old_text,则仅替换new_text的该实例。否则,文本中每次出现的instance_num都将更改为old_text

Source & More Info


更多信息:

答案 1 :(得分:1)

您的问题不应该与修复从某些来源提取的数据有关。确实应该与修复检索过程有关,这样您就不会得到流氓字符。

话虽如此,该子过程应迅速从A列中删除所有流氓字符。

Option Explicit

Sub posOnly()

    Dim i As Long, str As String, rgx As Object

    Set rgx = CreateObject("VBScript.RegExp")
    'pattern for A-Z (case sensitive) or 0-9 exactly 8 characters/digits in length
    rgx.Pattern = "[A-Z0-9]{8}"

    With Worksheets("ISA_Results")
        For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            str = .Cells(i, "A").Value2
            If rgx.Test(str) Then
                str = rgx.Execute(str).Item(0)
                .Cells(i, "A") = str
            End If
        Next i
    End With

End Sub