• ベストアンサー

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

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

  • EXCEL VBA 記号の削除

    A列3行目からはじまる(A列2行目タイトル=FA)データより"!"や"#"などの記号を取り除いた ものをE列に表したいと思っています。 データを半角にして、ASC関数を使って記号を取り除こうとしたのですが、半角になるだけで 記号を取り除くことができません。 If の後、ASC関数は使用せず、"!"や"#"を指定しても結果が同じだったんですが REPLACEの使い方が間違っているのでしょうか? Dim セル As Range Dim TARGET As Range Dim 変換文字 As String Dim i As Long Dim W As Worksheet Set W = Sheets("DATA転記") Set TARGET = W.Range("A3", Range("A65536").End(xlUp)) For Each セル In TARGET 変換文字 = StrConv(セル.Text, vbNarrow) For i = 1 To Len(変換文字) If Asc(変換文字) >= 32 And Asc(変換文字) <= 47 And _ Asc(変換文字) >= 58 And Asc(変換文字) <= 64 And _ Asc(変換文字) >= 91 And Asc(変換文字) <= 96 And _ Asc(変換文字) >= 123 And Asc(変換文字) <= 126 Then _ 変換文字 = WorksheetFunction.Replace(変換文字, i, 1, "") End If Next i セル.Cells(, 5).Value = StrConv(セル.Text, vbWide) Next セル

  • Excelのマクロ教えてください

    初めまして。 以下のようなマクロが欲しいのですが、知識不足のため、どうしたらよのかわからず困っております。 ウェブで色々と調べてやってみましたが、期待どおりの結果を得られませんでした。 どなたかお教えいただけたら幸いです。 行いたいのは、例えば、   セルA1に文字列『1. abc』が入っているとき、先頭の番号『1』の部分だけ取り出し   (または . 以下を除いて)、セルA1の内容を数字型の『1』に書き換える という動作です。 複数のセルをドラッグして選択し、マクロのショートカットで一発変換 できたら…と思っております。 変換したい部分のセルの内容はすべて、『1. abc』のように、文字列で 「1~7の数字」、「半角の.」、「半角スペース」、「英単語」 の順になっています。 簡単なことなのかもしれませんが、自分にはさっぱりでした… どなたか回答をお願いいたします。m(_ _)m

  • 全て英語大文字の文章で先頭だけを大文字に

    お世話になります。 EXCELで全て英語大文字の文章で先頭だけを大文字、先頭以外を小文字に変換する方法を教えて下さい。 例)ABCDE/FGHIJKLM/NOPQ → Abcde/Fghijklm/Nopq このように/あるいはスペースなど、文字列間には何らかの区切りが有るものとし、それも選択出来るのが良いです。 このような文字列が何千行もあるので、セルに関数などを入れて、行数分ドラッグしてコピーするだけとか、セルで済むのが良いですが、無理ならマクロでも構いません。 セルでの関数などが複数セルに分かれても結構です。 例)A1~:該当文章、B1~:該当文章A1の置換1段階、C1~:該当文章A1の置換1段階、D1:置換完了文章 以上、宜しくお願い致します。  

  • Excel 2007 文字列について

    Excel 2007 文字列について 郵便番号に「-」を入れたいです。 1つのセルに例えば「0001111」とある場合に 「000-1111」と変換したいです。 どのような関数またはマクロを作成すればよろしいでしょうか。

  • マクロ(VBA)での文字列操作

    こういうことできますか? Dim str as String str = Cells(1, 10) Length = Find("会計", str) つまり、エクセル上のセル内の文字列を取ってきて、 会計という文字列を含む場所が何文字目か知りたい。 ところが、Find関数か認識されずエラーが出ます。 Searchにしても同じです。 エクセル関数としては使えるのですが、マクロでは使えないのですか?

  • エクセルにてマクロで先頭に文字を入れたいのですが・・・・

    はじめまして。 質問なのですが、 「指定した範囲のセルの先頭のみ 好きな文字を入れるマクロ が作りたいのですが・・・」 マクロ初心者でいまいちわかりません。 よろしくお願いします。

  • エクセルのマクロで質問です

    B列に氏名の頭文字(カタカナ)1文字があいうえお順に1000行くらい並んでいて、例えば「カ」の先頭のセルをアクティブセルにするマクロの組み方を教えていただけますでしょうか? よろしくお願いします。

  • Excel 2003のマクロについて

    セルにある文字列に”-”を加え、別のセルに移したいです。 例/ABCDEFGHIJ→ABC-DEFGH-IJ としたいです。 文字列の“-”の入る位置は、「例/」の位置で固定です。 Excel2003を使用しています。 マクロ等で一発変換できる方法はありますか? マクロ初心者なので、教えて下さい。宜しくお願い致します。

  • エクセルVBAのコードを簡単に表現したい

    お世話になっています。 エクセルVBAでコードを書いたのですが、なにぶん初心者のためゴテゴテしたものになってしまいました。 A列にはA2からA11まで15文字以内の文字列が入っています。 同じ行のB列からP列に、濁点も1文字として1セルに1文字づつ抜き出すようにコードを書きました。 以下です。 Sub test() Dim i As Integer Dim m As Integer Dim s1 As Worksheet Set s1 = Sheets("sheet1") For i = 2 To 11 For m = 1 To 15 変換 = s1.Cells(i, 1) 変換 = StrConv(変換, vbKatakana) 変換 = Application.WorksheetFunction.Asc(変換) 変換 = Mid(変換, m, 1) 変換 = StrConv(変換, vbWide) s1.Cells(i, m + 1) = StrConv(変換, vbHiragana) Next Next End Sub そこで質問なのですが、上記のコードをもっとスマートに表現するとどのようなコードになるのでしょうか。(特に「変換」が連なっているところ) よろしくお願いします。

  • VBA(Excel)で文字列内の"~"記号だけ半角変換したくない

    VBA(Excel)で、StrConvを用いて、文字列内に存在する記号を全角→半角に変換して、再び文字列内に格納するようにしています。   strValue = StrConv(strValue, vbNarrow) しかし、"~"も"~"に変換されてしまいます。 "~"は半角変換しないようにしたいのですが、何か良い手法はありますでしょうか? どなたかご教授下さいませ。 よろしくお願い致します。

専門家に質問してみよう