- ベストアンサー
EXCELで英数字の全角を半角に変換する方法
- EXCELで入力しているデータの英数字が全角と半角で混在しているため、フィルター検索の際に不便を感じています。
- ASC関数を使用して英数字の全角を半角に変換する方法を探していますが、ASC関数はカタカナも半角に変換してしまうため、英数字のみを変換する方法を知りたいと思っています。
- 入力データには漢字、ひらがな、カタカナ、英数字が混在していますが、全角の漢字、ひらがな、カタカナを半角に、英数字を全角に変換したいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 行きがかりで、以下の質問と同じですが、こちらにも書いておきます。 http://oshiete1.goo.ne.jp/kotaeru.php3?qid=4071741 #3 にマクロがあります。 それを手直しし、ユーザー定義関数に変更してみました。 標準モジュールに貼り付けてください。後は、通常の関数のように入れてくださればよいです。ただ、Office の場合は、ExcelのJIS 関数にしても、中身は、単に、1文字ずつを、全角にしているわけではありません。一文字ずつ変換するのは、どちらかというと中途半端な結果になってしまいます。 例えば、 「半角」で、パピプ と入れ、=LEN(A1) とすると、6 それを、JIS関数で変換して、=LEN(A2) とすると、3 が出てきます。 つまり、バ、パ など、半角の濁音、半濁音は、必ずまとめて全角に変換しなければなりません。また、VBA以外で、それを実行するときは、ストリームの中で、半濁音の監視をしないといけないわけですが、幸い、そのようなプログラムは必要ありません。Office に詳しくない方だと、この点を見落としてしまいます。 以下の関数は、フィルタになりますから、そのまま、マクロに入れることも可能です。その場合は、出来れば、VBScrip.RegExp は、参照設定して、そのまま、開放しないままにしておいたほう速いかもしれません。 なお、 >全角→漢字、ひらがな、カタカナ カタカナ以外に対しては、漢字、ひらがなの半角文字はExcelにはないはずです。 また、=Now()関数 で[22時40分](書式:[DBNum3]h"時"mm"分") を表示したものも、[22時40分]と変換することは可能です。 '------------------------------- '標準モジュール Function Zen2Han(strText As Variant) As String '全角:カタカナ,半角:英数字・記号 Dim myPats As Variant Dim Re As Object ' As RegExp '参照設定では、Microsoft VBScript Regular Expressions 5.5 Dim Matches As Object 'As MatchCollection Dim Match As Object 'As Match Dim buf As String Dim i As Integer '半角カタカナ, 全角英数など '半角のカタカナはWebで表示できないので、コードにしてあります。 myPats = Array("([\uFF66-\uFF9F]+)", "([!-}]+)") If IsEmpty(strText) Then Exit Function If StrComp(TypeName(strText), "Range") = 0 Then strText = strText.Text End If Set Re = CreateObject("VBScript.RegExp") 'Set Re = New VBScript With Re .Global = True .IgnoreCase = True buf = strText For i = 0 To 1 .Pattern = myPats(i) Set Matches = .Execute(buf) If Matches.Count > 0 Then For Each Match In Matches buf = Replace(buf, Match, StrConv(Match, (i + 1) * 4), , , vbBinaryCompare) Next Match End If Next End With Zen2Han = buf Set Re = Nothing End Function ---------------------------------- ''変換関数を組み合わせたマクロ(標準モジュール) Sub Main() Dim c As Range Dim rng As Range On Error Resume Next Set rng = ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues) On Error GoTo 0 Application.ScreenUpdating = False If rng Is Nothing Then MsgBox "対象セルが見つかりません", vbExclamation, "終了" Exit Sub End If For Each c In rng.Cells c.Value = Zen2Han(c.Value) Next c Application.ScreenUpdating = True End Sub -----------------------------
その他の回答 (2)
- enunokokoro
- ベストアンサー率74% (3543/4732)
関数を使っても良いのなら、[ ASC関数]ではなく[ユーザー定義関数]を 使用してはいかが。 http://billyboy.blog81.fc2.com/blog-entry-84.html [ユーザー定義関数]が初めてならこちら↓ http://www.konomiti.com/Ex_kan_05.html
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
Excel日本語版は昔からカタカナとASCII文字の区別が出来ないか ら、面倒くさいですね。 私ならテキストファイルに吐き出して、高機能のテキストエディタ で必要な文字だけ一度にまとめて変換し、Excelに戻します。JEdit を愛用していますが、本当に一瞬で終わりますよ。 でなければ、せっかくデータベースとして活用したいのだから表計 算ソフトを卒業して、ファイルメーカーあたりに持ち込みます。検 索で1バイト文字/2バイト文字や大文字/小文字を区別しません。