1

VBA についての知識は非常に限られています。ただし、Google の助けを借りて、Email という列を検索するスクリプトを作成しました。次に、それが見つかった場合、この列にコンマがあるかどうかを調べます。はいの場合、コンマをドットに変更します。ただし、このソリューションでは大文字と小文字が区別されます。列名がわずかに異なる場合、機能しません。これまでのところ、このスクリプトがクリーニングするファイルで使用された 2 つの異なるオプションがあることを私は知っています。 1. 電子メール 2. 電子メール - 個人の電子メール

このスクリプトを、すべてのメール開始列で機能するようにしたいと考えています。これを「Email*」として指定しようとしましたが、うまくいきませんでした。誰かが私を助けることができますか?

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/シートの名称に置き換えてください。

さらに、列内のデータをさらに処理するために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 に答える