我对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
答案 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...
行看起来也不奇怪。这对你有用吗?