0

私はこれに対する答えを見つけるのに苦労しています...

毎月、ある種の CRM ソフトウェアからの生の抽出物であるクライアント データでいっぱいのスプレッドシートが提供されますが、そのデータは混乱しています。結合されるセルと結合されないセルがあります。シート全体のマージを解除すると、1 つの列を意図したデータが 3 つの列にランダムに分散し、別のデータと混在することになります。つまり、電子メール アドレスが 3 つの列に分散し、郵便番号が混在しています。

私ができるようにしたいのは、「@」を含む列 S、T、および U 内のセルを検索し、電子メール アドレス全体を同じ行の列 V に移動 (コピーではない) することです。

どうすればそれを達成できますか?

4

2 に答える 2

0

Alt+F11 を押して Visual Basic Editor を開き、[挿入]、[モジュール] の順にクリックします。これを貼り付けます。または、ここからサンプル ファイルをダウンロードしてください。次に、View/Macros の下に、この movemail() ルーチンがあります。それを実行します。

小切手、郵便為替、ペイパル、ビットコインを受け取ります... :-) j/j お楽しみください。

Sub moveemail()

Dim ws As Worksheet
Dim thisCell As Range, nextCell As Range, lookAt As Range
Dim foundAt As String, lookFor As String
Dim lastRow As Long
lookFor = "@"
On Error GoTo Err

'get last populated cell
Set ws = Application.ActiveSheet
With ws
    If WorksheetFunction.CountA(Cells) > 0 Then
        lastRow = Cells.Find(what:="*", SearchOrder:=xlByRows, _
        SearchDirection:=xlPrevious).Row
    End If
End With

' go cell by cell looking for @ from row 1 to row 10000
Set lookAt = ActiveSheet.Range("S1:U" & lastRow)
Set thisCell = lookAt.Find(what:=lookFor, LookIn:=xlValues, lookAt:=xlPart, SearchDirection:=xlNext)
    If Not thisCell Is Nothing Then
        Set nextCell = thisCell
        Do
            Set thisCell = lookAt.FindNext(After:=thisCell)
            If Not thisCell Is Nothing Then
                foundAt = thisCell.Address

                            thisCell.Copy Range("V" & thisCell.Row)
                            thisCell.ClearContents
            Else
                Exit Do
            End If
            If thisCell.Address = nextCell.Address Then Exit Do
        Loop
    Else
        'MsgBox SearchString & " not Found"
        Exit Sub
    End If
Err:
    'MsgBox Err.Number
    Exit Sub
End Sub
于 2015-06-12T21:18:58.123 に答える