• ベストアンサー

エクセルで少し複雑な条件付置き換えをしたい

エクセルで "Tom ABC"   →"Tom A.B.C." "Yamada CD, Tanaka KK"  →"Yamada C.D., Tanaka K.K." "Sachiko PPPP" →"Sachiko P.P.P.P."    ・    ・    ・ のように人名+スペースの後の,複数の大文字の間に,それぞれピリオドを入れたいのですが,一括してやる方法はないでしょうか? なお,2番目の例のように,一つのセルに2セット以上が入っていることもあります.その場合,セット間にはカンマが入っています. また,大文字の数は一定ではありません. どうぞよろしくお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

ユーザー定義関数です。 1) エクセル画面で Alt + F11 キーを押して VBE を起動 2) 「挿入」->「標準モジュール」で、右空白部分に、下記コードを貼り付ける。 3) X をクリックしてウィンドウを閉じ、エクセル画面に戻る。 セルに =ennogyoja(A1) という具合に使ってください。 Function ennogyoja(txt As String) As String Dim x, i, a() As String, comma As String x = Split(Trim(txt)) For i = 0 To UBound(x) If Len(x(i)) > 0 And x(i) = UCase(x(i)) Then Select Case Right(Trim(x(i)), 1) Case Chr(44) comma = Chr(44) x(i) = Left(Trim(x(i)), Len(Trim(x(i))) - 1) Case Else comma = Empty End Select ReDim a(Len(x(i)) - 1) For ii = 1 To Len(x(i)) a(ii - 1) = Mid(x(i), ii, 1) Next x(i) = Join(a, ".") x(i) = x(i) & "." & comma End If Next ennogyoja = Join(x, Chr(32)) End Function

ennogyoja
質問者

お礼

ありがとうございました! わざわざスクリプトまで書いていただいて,本当に助かりました. なるほど,ユーザー定義関数というものがあるのですね.はじめて知りました. これからも複雑な変換をする必要が生じると思うので,勉強してみたいと思います.

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 私のも、いろいろなもので試してみてください。 いくつかの例で、決められないものがあります。 Yamada CD, Tanaka KK の変換も可能ですが、   →"Yamada C.D., Tanaka K.K." ただ、こういう場合は、 Yamada CD, Tanaka KK.  →"Yamada C.D., Tanaka K.K." 今の段階では、こうなります。 また、以下の場合は、 Tom A.B.C.  →"Tom A.B.C." 変換されません。 '----------------------------------- Function CommaEnter(ByVal Argument As Variant) As String Dim Matches As Object Dim Match As Object Dim i As Long Dim myStr As String Dim buf As String If VarType(Argument) = vbString Then  myStr = Argument Else  CommaEnter = Argument End If With CreateObject("VBScript.RegExp")  .Pattern = "([A-Z][A-Z]+)"  .Global = True  .IgnoreCase = False  If .Test(myStr) Then   Set Matches = .Execute(myStr)  For Each Match In Matches   For i = 1 To Len(Match.Value)    buf = buf & "." & Mid$(Match.Value, i, 1)   Next i   myStr = Replace(myStr, Match.Value, Mid$(buf, 2))   buf = ""  Next  End If End With   CommaEnter = myStr End Function

ennogyoja
質問者

お礼

お時間を割いていただいて,スクリプトを書いてくださりありがとうございました. 複数のスクリプトを比較できるので,ユーザー定義関数の勉強にもなります. なかなか難しいですが,頑張ってみます.

関連するQ&A