查找以“电子邮件”VBA开头的列

时间:2013-02-12 15:03:58

标签: excel vba excel-vba

我对VBA的了解非常有限。但是,在谷歌的帮助下,我做了一个搜索名为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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

使用InStr功能:

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

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

答案 2 :(得分:1)

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

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

Cells.Replace...行看起来也不奇怪。这对你有用吗?