1

私はいくつかの弦操作を任されており、予想以上に困難であることが証明されているため、今日は私の悪い一日になるに違いありません.

1 列目と 2 列目と 3 列目から 1 番目と 2 番目と 3 番目の名前のイニシャルを姓名と共に取得する必要があります。

さらに、タイトルを保持する必要があります。

現在の長い名前の例を次に示します。

Mr C Chrysostomou & Mr N Chrysostomou & Mrs A Chrysostomou

Mrs M Karseras & Ms P Hadjisoteriou & Mrs E Athanasiou

Mrs A Theodorou & Mr A Aristotelou & Mrs G Naziri & M Karmiou Mrs L Vazanias & Mrs G

Braithwaite & Mrs Helen West Mrs L Vazanias & Mrs G Braithwaite & Mrs

ヘレン・ウェスト夫人オリンピア・ピエリドゥ & Mrs T&mr M & Mr C & Mrs K

Michaelides Miss JA Santamas& Mrs MT Santama- Solomonides& Mrs Lida

Santama Miss JA Santamas& Mrs MT Santama- Solomonides& Mrs Lida

サンタマ ポリドロス・ポリドロウさん&マロ・テミストクレオスさん&シルヴィアさん

Polydorou テミス氏 & アンドルーラ夫人 & ニコラス氏 & ヴァッソ ジーナ夫人

Demetriou Mrs SK Makkofaides & Mrs Z Koullas & Mrs Y Koullas & Mrs R

Kleopa Mr. G Zorzy & Mrs H Louca Zorzy & Mr. S Stavropoulos & Mrs Y

Stavropoulos Mrs M Franceschina & Ms C Eugeniou & Ms OL Toumazides

T/a The Three Cupcakes Mr David & Mrs Eileen Nixon Dhnixon & Co. - Office Account

ご覧のとおり、これらは 2 人または 3 人の共同銀行口座と見なすことができます。Mr、Miss、Ms、Dr、Doctor、または Messrsの名前と姓名のイニシャルを合わせて、合計で 35 文字未満にする必要があります。

だから、これが私がウェブで検索した後に試したことです:

=IF(LEN(TRIM(E:E))-LEN(SUBSTITUTE(TRIM(E:E)," ",""))>=1,MID(TRIM(E:E),FIND(" ",TRIM(E:E))+1,1),"")& " " &IF(LEN(TRIM(E:E))-LEN(SUBSTITUTE(TRIM(E:E)," ",""))>=2,MID(SUBSTITUTE(TRIM(E:E)," ","",1),FIND(" ",SUBSTITUTE(TRIM(E:E)," ","",1))+1,1),"")

イニシャルを取得しますが、最初の2つだけです

=RIGHT(J:J,LEN(J:J)-FIND(" ",J:J)+1)

姓を取得しますが、正しく機能していません。

私はこれを考えすぎていますか、それとも考えすぎていますか?

データへの最善のアプローチは何ですか?

ありがとうフィリップ

4

1 に答える 1

1

これで始められるはずです。

あなたのデータがこのように見えるとしましょう

ここに画像の説明を入力

このコードをモジュールに貼り付けます。(注: このコードは広範囲にテストされていませんが、メッセージを伝えています)

Option Explicit

Sub Sample()
    Dim MyAr As Variant
    Dim FinalAr() As String, TmpAr() As String
    Dim ws As Worksheet
    Dim lrow As Long, i As Long, n As Long, j As Long

    '~~> Set this to the relevant sheet
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        '~~> get last row of col A
        lrow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Store the values in an array
        MyAr = .Range("A1:A" & lrow)

        '~~> Loop through the array and split it on "&" and store it in another array
        For i = LBound(MyAr) To UBound(MyAr)
            If InStr(1, MyAr(i, 1), "&") Then
                TmpAr = Split(MyAr(i, 1), "&")

                For j = LBound(TmpAr) To UBound(TmpAr)
                    n = n + 1
                    ReDim Preserve FinalAr(n)
                    FinalAr(n) = Trim(TmpAr(j))
                Next j
            Else
                n = n + 1
                ReDim Preserve FinalAr(n)
                FinalAr(n) = Trim(MyAr(i, 1))
            End If
        Next i

        '~~> Past the outcome in Col B
        .Range("B1").Resize(UBound(FinalAr) + 1, 1).Value = Application.Transpose(FinalAr)

        '~~> Replace all mrs/mr etc
        .Columns(2).Replace What:="MRS", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        .Columns(2).Replace What:="MR", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        .Columns(2).Replace What:="MISS", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

        '~~> Find Last Row of Col B
        lrow = .Range("B" & .Rows.Count).End(xlUp).Row

        '~~> Loop through col B and split the names
        For i = 2 To lrow
            If InStr(1, .Range("B" & i), " ") Then
                TmpAr = Split(Trim(.Range("B" & i)), " ")

                n = 1

                For j = LBound(TmpAr) To UBound(TmpAr)
                    .Range("B" & i).Offset(, n).Value = TmpAr(j)
                    n = n + 1
                Next
            Else
                .Range("C" & i).Value = .Range("B" & i).Value
            End If
        Next i
    End With
End Sub

結果 (スクリーンショット)

ここに画像の説明を入力

于 2013-04-16T12:16:50.677 に答える