• ベストアンサー

文字列変換

他人が作ったExcelデータを修正しなければいけなくなったのですが時間がかかって手間取っています。 する作業は、選択した文字列を ・カタカナは全角 ・ローマ字は半角 ・数字は半角 とすることです。 手作業ですると時間がかかるので、 マクロとかVBAで作業に無駄をなくせればと思いました。 それで調べてみたのですがStrConv関数というのが出てきましたが、 文字種ではしてくれなさそうなのです。 参考になりそうなものはないでしょうか?

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

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

こんにちは。 >文字種ではしてくれなさそうなのです。 ご指摘のとおりです。マクロの流れは見えていらっしゃるようですね。 それなら、少し、解説させていただきます。 Replace関数は、分かっても、そこから、半角カタカナをどう抜き出すか分からなければ、これは解決しません。今回、実験していませんが、VBAの場合は、一文字ずつ、半角カタカナを全角にすると、半濁点や濁点がバラバラになってしまうようです。そこで、一まとめにして、StrConv(文字列,vbWide) としなければならないのです。それが、この全角・半角の注意点です。 それで、ここでは、正規表現を使います。本来、正規表現の「\uFF66-\uFF9F」の部分は、半角カタカナを使えばよいのですが、Webサイトでは、表示できないので、あえて、Unicode の半角コードで表現しています。この種のマクロは、何度も書いているはずなのに、今回のマクロは、今までとは変えてみました。お時間がありましたら、解読してみてください。 それと、私のWordのマクロに似せて作りました。Wordは、該当する文字や文字列は、Replace で、Document で、一括で出来ますが、Excelは、セルひとつずつに当たらなくてはなりません。 標準モジュールに貼り付けてください。 ------------------------------------------------------------ Sub ChangeOneByteChars()   Dim rng As Range   Dim c As Range   Dim i As Long   On Error Resume Next   Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)   On Error GoTo 0   If rng Is Nothing Then Exit Sub   Application.ScreenUpdating = False   For Each c In rng     c.Value = myRegExp(c.Value, i)   Next c   Application.ScreenUpdating = True   MsgBox i & "個のセルに対して置換・終了", vbInformation End Sub Private Function myRegExp(ByVal strText, ByRef i As Long)   Dim Matches As Object 'MatchCollection   Dim Match As Object 'as Match   Dim buf As String      With CreateObject("VBScript.RegExp")     .Pattern = "[\uFF66-\uFF9F0-9A-z]+"     .IgnoreCase = False     .Global = True     If .Test(strText) Then       i = i + 1       buf = StrConv(strText, vbNarrow)       .Pattern = "([\uFF66-\uFF9F]+)"       .Global = True       Set Matches = .Execute(buf)       If Not Matches Is Nothing Then         For Each Match In Matches           buf = Replace(buf, .Replace(Match.Value, "$1"), _            StrConv(Match.Value, vbWide))         Next Match       End If     End If     If buf <> "" Then      myRegExp = buf     Else      myRegExp = strText     End If   End With End Function ------------------------------------------------------------

nyororo-n
質問者

お礼

親切に解説までしてくれてありがとうございます。

その他の回答 (2)

noname#79209
noname#79209
回答No.3

以下のような、正規表現による検索・置き換えダイアログが使えるフリーのエクセル用アドインがあります。 http://srcedit.pekori.jp/tool/excelre.html

nyororo-n
質問者

お礼

フリーのアドインって手もありましたか。 ありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

VBAで行うなら StConv関数でカタカナ、数字、記号、英字を全角または半角にしてから Replace関数で数字、記号、英字を半角かカタカナのみを全角にすればいいのでは? フリーソフトを使うなら、下記にいろいろあります。 http://search.vector.co.jp/search?query=%95%B6%8E%9A%95%CF%8A%B7

nyororo-n
質問者

お礼

お早い回答ありがとうございます。

関連するQ&A

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

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

  • 文字を打つときに文字に下線が毎回つくのを無くしたい

    文字を打つときに、必ず最初に文字の下に..............みたいのがついて英語の小文字になります。 全角半角キーを押して、カタカナひらがなローマ字キーを押す、全角半角キーを押すという3つの操作を毎回必要とします。 ブラウザ→ワード→エクセル→IE と新しいソフトを使った時には毎回この作業を必要とします。 今までは全角と半角キーだけで変えられたので元に戻したいんですがどうすればいいんですか? Google入力 Win8

  • 文字変換が変です。

    ローマ字入力でひらがなは出ます。 それを漢字に変換はできるのでこのような文章は打てるのですが 半角/全角を押すと‘ が出ます。 また半角/全角を押してもタスクバーがアルファベットに切り替わらず あ の表記のままです。 緑のAltを押しながら半角/全角を押すとタスクバーの表記は Aになります。 タスクバーが あ になっている時に =の印のあるところを押すとーが出ます。 その横のへを押すと=になってしまいます。 どうしてこうなったのかわからないのですが もとのような入力の仕様に戻すには どのようにしたらよろしいでしょうか? ローマ字入力の際、今まで小文字で入っていたのが 大文字入力にもなっています。 よろしくお願いいたします。 わかりにくくてすみません。

  • 文字入力の途中で半角に変わってしまう。

    文字入力(ローマ字)をしていると、たまに 半角入力に変わってしまい、全角に戻らなく なる事があります。 おそらく、どこかのキーに触れてその様になると 思うのですが、元に戻す方法をお教え下さい。 ちなみに、半角/全角のキーを押してもカタカナひらがなローマ字の キーを押しても、半角のままです。 いつも仕方なく再起動して元に戻しております。 パソコンはXPです。

  • 全角大文字ローマ字になるのですが・・・

    最近、キーボードを打ってると全角大文字ローマ字になるんです。今までは『半角/全角』のキーを押したら、半角ローマ字になってたのですが突然、全角大文字ローマ字になるんです。どーやったら、治せますか?教えてください。お願いします。

  • パソコンでの文字入力について

    パソコンの文字入力についての質問です。 全角で、ローマ字入力をしていると、エンターを押した時点で、突然半角となり、全角入力ができなくなってしまいます。 対策として、 1 半角/全角キーを押す 2 カタカナひらがなローマ字キーとAITキーを同時に押す 3 入力モードをひらがなに設定する。 4 カタカナひらがなローマ字キーとCtrlキーを同時に押す 等行いますが、なかなか変換できません。 時折、何か押していたら、いつの間にか元に戻ったという状態です。 対策を教えてください。

  • 文字変換でなかなかひらがなにならないときがある。

    文字変換でローマ字の半角全角変換になって、なかなかひらがな変換にならないときどうすればよいですか?

  • WORDで、全角と半角を一括変換するとき

    Wordで作成した文書にある全角のカタカナ・ローマ字を 半角に、またその逆に変換する作業を一括で実行できる 方法があれば、教えてください。 よろしくお願いします。

  • 文字入力のデフォルト切り替えについて

    おはようございます。 タイトル通りなのですが、いつのまにかIEの文字入力のデフォルトが半角カタカナ(ローマ字入力)になってしまっていて、全角ひらがな(ローマ字入力)にデフォルト設定を戻したいのですが方法がわからなく教えていただけると助かります。

  • エクセルで半角文字に色を付けるVBA

    エクセルで半角文字を全角に変換しつつ、変換した文字には色を付けるマクロを考えています。 半角→全角の変換はこの記述でできましたが、 myTEXT = StrConv(myTEXT, vbWide) 変換した文字(変換後の文字)に色を付ける、というのが分かりません・・・。 そのような記述は可能でしょうか?お時間あるときにでもご教授いただけると助かります。

専門家に質問してみよう