1

我对VBA的了解非常有限。但是,在 google 的帮助下,我编写了用于搜索名为 Email 的列的脚本。然后,如果它找到它,它会查看此列中是否有任何逗号。如果是,那么它将逗号变为点。但是,此解决方案区分大小写。如果列名略有不同,则它不起作用。到目前为止,我知道在此脚本将清理的文件中使用了 2 个不同的选项 1. 电子邮件 2. 电子邮件 - 个人电子邮件

我希望能够使这个脚本在所有电子邮件起始列中工作。我试图将其指定为“电子邮件*”,但它不起作用。有人能帮我吗?

Sub mySample()
Sheets("Data").Activate
Dim cell As Excel.Range
Dim ws As Excel.Worksheet
Dim i As Integer
Dim j As Integer

For Each ws In Excel.ThisWorkbook.Sheets
i = ws.Cells(1, Excel.Columns.Count).End(Excel.xlToLeft).Column

For j = 1 To i
    If ws.Cells(1, j).Value = "Email" Then
        Cells.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
    End If
Next j
Next ws
Sheets("Automation").Activate
MsgBox "Removing commas in emails - Done!"

End Sub
4

3 回答 3

5

我建议您使用不同的方法:而不是循环第一列的槽单元格 - 只需使用Excel 搜索来识别电子邮件列:

LookupString = "Email"
Set SearchRange = ActiveWorkbook.ActiveSheet.Range("1:1").Find(LookupString, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False)

使用给定的选项,您将找到正确的任何LookupString值匹配,无论列名中的位置和大小写如何。根据需要将部分替换ActiveWorkbook.ActiveSheet.为WB / sheet的名称。

此外,您可以使用返回的SearchRange属性,例如Column来进一步处理列中的数据。祝你好运!

于 2013-02-12T15:26:44.570 回答
1

至于If ws.Cells(1, j).Value = "Email"更具包容性,我建议InStr改用。这将在单元格中的任何位置搜索字符串“email”,并让您知道它出现的位置。如果它不是 0,则表示找到了该字符串。(更多关于InStr 这里。)

For j = 1 To i
    If Instr(1,ws.Cells(1, j).Value,"email",vbTextCompare) > 0 Then
        Cells.Replace...

Cells.Replace...条线对我来说也有点奇怪。这对你来说是否正常工作?

于 2013-02-12T15:19:47.287 回答
1

使用InStr功能:

   If InStr(UCase(ws.Cells(1, j).Value), UCase("Email")) Then

UCase函数将字符串转换为全部大写,因此您的比较不再区分大小写

于 2013-02-12T15:15:21.100 回答