0

Excelファイルにある一連の電子メールアドレスを修正しようとしています。何らかの理由で、過去に一部のインポート ルーチンで、長すぎるメール アドレスを切り取ったり、最後の文字が削除されたりすることがありました。これは、当社のニュースレターのリストです。

So I have 100's of emails in my list that end in .ne or .co or .or instead of .net, .com, or .org.

I can use Excel's replace utility to find broken emails by using the search term of *.ne and selecting find exact matches only.

But when I indicate I want to replace that found item with *.net, the actual content of the offender is replaced with that: *.net instead of the first portion of the email address.

Is there any function or can I use that tool to find and replace in this scenario?

Regards; Ricky

4

6 に答える 6

5

このマクロを作成し、.com、.net、および .org で終わる 3 つの異なる電子メール アドレスでテストしました。エラー チェックは行われず、このマクロは電子メール アドレスが列 AZ 内のどこかにあると想定します。また、「.co」などの条件に一致する他のデータに「m」、「t」、または「g」を追加しようとする場合もあります。

このマクロは、基本的に A1 と Z30000 の間のセルをスキャンし (アドレスが多数あると述べたように)、.co .ne または .or で終わるものを探します。適切な文字を追加して、アドレスを「完全」にします。これが役立つことを願っています。

Sub Fix_Email()

Dim i As Integer
Dim rngEmail As Range
Set rngEmail = Range("A1:A30000")

For i = 1 To 30000

   'Checks to see if the last 3 characters of a cell's value end in .co, .ne, or .or

    If Right(rngEmail(i).Value, 3) = ".co" Then
        rngEmail(i).Value = rngEmail(i).Value & "m"

    ElseIf Right(rngEmail(i).Value, 3) = ".ne" Then
        rngEmail(i).Value = rngEmail(i).Value & "t"

    ElseIf Right(rngEmail(i).Value, 3) = ".or" Then
        rngEmail(i).Value = rngEmail(i).Value & "g"

    ElseIf Right(rngEmail(i).Value, 2) = ".c" Then 
        rngEmail(i).Value = rngEmail(i).Value & "om" 

    ElseIf Right(rngEmail(i).Value, 2) = ".n" Then 
        rngEmail(i).Value = rngEmail(i).Value & "et"

    ElseIf Right(rngEmail(i).Value, 2) = ".o" Then
        rngEmail(i).Value = rngEmail(i).Value & "rg"

    End If

Next i

End Sub
于 2012-09-18T19:15:23.903 に答える
4

セルをループして、「。」で分割するだけです。次に、バリアント配列の最後の要素で正しい用語を確認します。これらの線に沿ったもの。

Sub fixEmails()
ScreenUpdating = False
For Each cell In ActiveSheet.Cells
Dim v As Variant
    If cell.Value <> "" Then
    v = Split(cell.Value, ".")
        If v(UBound(v)) = "ne" Then
        cell.Value = cell.Value + "t"
        Else
            If v(UBound(v)) = "co" Then
                cell.Value = cell.Value + "m"
            Else
                If v(UBound(v)) = "or" Then
                    cell.Value = cell.Value + "g"
                End If
            End If
        End If
    End If
Next

ScreenUpdating = True

End Sub
于 2012-09-18T19:11:02.780 に答える
3

数式を使用して必要な文字を表示する列を追加することをお勧めします。次に、もう 1 つの列を使用して連結します。次に、元の列に大きな「値の貼り付け」を行います。

=IF(RIGHT(A1,3)=".ne", "t",IF(RIGHT(A1,3)=".co", "m",""))

これにより、アイデアが得られます。列 A をメールにすると、 と を処理netしましcomた。

于 2012-09-18T18:59:06.437 に答える
2

Excel で検索と置換を使用する場合、ワイルドカードを使用する必要はありません。find '.ne' を実行して '.net' などに置き換えて '.co' と '.or' を実行すると、これが機能します。

ただし、電子メール アドレスに .ne、.co、または .or が先に表示されるという別の問題に直面する場合があります。

これを避けるために、私は Smandoli のソリューションを拡張し、メール アドレスと共に次の関数を使用します。

=IF(RIGHT(A1,3)=".ne", A1&"t",IF(RIGHT(A1,3)=".co", A1&"m",IF(RIGHT(A1,3)=".or",A1&"g",A1)))

その後、値をコピーして列に貼り付けます。

于 2012-09-18T21:08:50.567 に答える
1

Aがメールアドレスの列である場合の詳細を示すには、列Bを次のように設定します。= IF(RIGHT(A3,2)= "co"、 "m"、IF(RIGHT(A3,2)= "ne" 、"t"、IF(RIGHT(A3,2)= "or"、 "g")))

そして列Cは=CONCATENATE(A3、B3)

于 2012-09-18T19:13:23.667 に答える
0

このタイプのタスクでは、セルのループは本質的に非常に遅くなります。バリアント配列を使用すると、はるかに高速になります

Sub email()
    Dim v As Variant
    Dim rng As Range
    Dim i As Long
    Set rng = Range([A1], [A1].End(xlDown)) ' assuming no blank cells in the list
    v = rng
    For i = 1 To UBound(v, 1)
        Select Case Right(v(i, 1), 3)
            Case ".co"
                v(i, 1) = v(i, 1) & "m"
            Case ".ne"
                v(i, 1) = v(i, 1) & "t"
            Case ".or"
                v(i, 1) = v(i, 1) & "g"
        End Select
    Next
    rng = v
End Sub

約 60,000 行で 0.5 秒未満で実行

于 2012-09-19T07:43:41.053 に答える