- ベストアンサー
エクセルで少し複雑な条件付置き換えをしたい
エクセルで "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セット以上が入っていることもあります.その場合,セット間にはカンマが入っています. また,大文字の数は一定ではありません. どうぞよろしくお願いいたします.
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ユーザー定義関数です。 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
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私のも、いろいろなもので試してみてください。 いくつかの例で、決められないものがあります。 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
お礼
お時間を割いていただいて,スクリプトを書いてくださりありがとうございました. 複数のスクリプトを比較できるので,ユーザー定義関数の勉強にもなります. なかなか難しいですが,頑張ってみます.
お礼
ありがとうございました! わざわざスクリプトまで書いていただいて,本当に助かりました. なるほど,ユーザー定義関数というものがあるのですね.はじめて知りました. これからも複雑な変換をする必要が生じると思うので,勉強してみたいと思います.