- ベストアンサー
エクセルで英語の頭のみ大文字にするマクロについて
Excel2003を使っています 英語の文字列で先頭の文字のみ大文字に変換する下記のマクロを作ってみましたが、記号・・・"("、")"、"/"などを含む文字列の場合、記号の後の先頭文字が小文字になってしまいます。 例 SOMEBODY (WHO) → Somebody (who) これをSomebody (Who) としたいのですがどうしたらよいでしょうか Sub Proper処理x() Dim セル As Range Dim 変換文字 As Strin For Each セル In Selection 変換文字 = StrConv(セル.Text, vbProperCase) セル.Value = 変換文字 Next End Sub ワークシート関数のProper()の場合、記号の後は大文字になります、その代わりCAN'TがCan'Tになってしまします。 Proper関数とStrConv関数では機能が違うのでしょうか 英数文字列の先頭文字を大文字にするマクロで、記号の後の文字を大文字にかつ、アポストロフィーの後のみは小文字にするマクロを作りたいのです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 Sub Proper処理x() Dim セル As Range Dim 変換文字 As String For Each セル In Selection If VarType(セル) = vbString Then 変換文字 = myProper(セル.Text) セル.Value = 変換文字 End If Next End Sub '------------------------------------------------------------ 'ユーザー定義関数(基本的には、標準モジュールに貼り付け) Function myProper(ByVal myText As String) Dim Matches As Object Dim Match As Object myText = StrConv(myText, vbUpperCase) With CreateObject("VBScript.RegExp") .Pattern = "[A-z']{2,}" .Global = True .Ignorecase = False Set Matches = .Execute(myText) For Each Match In Matches myText = Replace(myText, Match.Value, StrConv(Match.Value, vbProperCase)) Next Match End With myProper = myText End Function
その他の回答 (1)
- Yosha
- ベストアンサー率59% (172/287)
ハンドブックで調べてみましたが、2つの関数の相違点の手掛りになるような記事は見つかりませんでした。 分かっている結果を利用して、あまり良い形ではありませんが、変数「変換文字2」を1つ追加して、 変換文字 = StrConv(セル.Text, vbProperCase) 変換文字2 = WorksheetFunction.Proper(セル.Text) 片方がStrConv()による文字列、他方がワークシート関数のProper()による文字列を作成し、If 文で If InStr(セル.Value, "'") Then セル.Value = 変換文字 Else セル.Value = 変換文字2 End If とする方法が簡単で、うまく行きそうです。 こんなもんで、どうですか?
お礼
ありがとうございました ただ、これですと"'"以外の記号が混在しているとき (I'M COMING BACK) → (i'm Coming Back) になっちゃうんです (I'm Coming Back) となってほしいわけです でもWendy02さんの回答で解決しました ありがとうございました
お礼
完璧です ありがとうございました