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

我对VBA的知识非常有限。 但是,在谷歌的帮助下,我做了search名为电子邮件列的脚本。 然后,如果它发现它看起来是否在这个列是任何逗号。 如果是,那么它将逗号变成点。 但是,此解决scheme是区分大小写的。 如果列名稍有不同,那么它不起作用。 到目前为止,我知道这个脚本将清理的文件中有两个不同的选项。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 

我build议您使用不同的方法:而不是循环第一列的低谷单元格 – 只需使用Excelsearch来识别电子邮件列:

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

通过给出的选项,您可以正确地find任何LookupString值匹配,而不pipe列名中的位置和大小写。 replaceActiveWorkbook.ActiveSheet. 部分的WB / sheet的名称是必需的。

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

使用InStr函数:

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

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

至于制作If ws.Cells(1, j).Value = "Email"更具包容性,我build议使用InStr来代替。 这将search单元格中任何位置的string“email”,并让您知道它出现的位置。 如果它不是0,那就意味着find了string。 (更多关于InStr 信息 )

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

Cells.Replace...行对我来说也不是很奇怪。 这对你是否正常工作?