• ベストアンサー

エクセルで英語の頭のみ大文字にするマクロについて

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関数では機能が違うのでしょうか 英数文字列の先頭文字を大文字にするマクロで、記号の後の文字を大文字にかつ、アポストロフィーの後のみは小文字にするマクロを作りたいのです。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

kkaazzuu
質問者

お礼

完璧です ありがとうございました

その他の回答 (1)

  • Yosha
  • ベストアンサー率59% (172/287)
回答No.1

ハンドブックで調べてみましたが、2つの関数の相違点の手掛りになるような記事は見つかりませんでした。 分かっている結果を利用して、あまり良い形ではありませんが、変数「変換文字2」を1つ追加して、 変換文字 = StrConv(セル.Text, vbProperCase) 変換文字2 = WorksheetFunction.Proper(セル.Text) 片方がStrConv()による文字列、他方がワークシート関数のProper()による文字列を作成し、If 文で If InStr(セル.Value, "'") Then セル.Value = 変換文字 Else セル.Value = 変換文字2 End If とする方法が簡単で、うまく行きそうです。 こんなもんで、どうですか?

kkaazzuu
質問者

お礼

ありがとうございました ただ、これですと"'"以外の記号が混在しているとき (I'M COMING BACK) → (i'm Coming Back) になっちゃうんです (I'm Coming Back) となってほしいわけです でもWendy02さんの回答で解決しました ありがとうございました

関連するQ&A