• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください)

EXCELで英数字の全角を半角に変換する方法

このQ&Aのポイント
  • EXCELで入力しているデータの英数字が全角と半角で混在しているため、フィルター検索の際に不便を感じています。
  • ASC関数を使用して英数字の全角を半角に変換する方法を探していますが、ASC関数はカタカナも半角に変換してしまうため、英数字のみを変換する方法を知りたいと思っています。
  • 入力データには漢字、ひらがな、カタカナ、英数字が混在していますが、全角の漢字、ひらがな、カタカナを半角に、英数字を全角に変換したいです。

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

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

回答No.2

関数を使っても良いのなら、[ ASC関数]ではなく[ユーザー定義関数]を 使用してはいかが。 http://billyboy.blog81.fc2.com/blog-entry-84.html [ユーザー定義関数]が初めてならこちら↓ http://www.konomiti.com/Ex_kan_05.html

回答No.1

Excel日本語版は昔からカタカナとASCII文字の区別が出来ないか ら、面倒くさいですね。 私ならテキストファイルに吐き出して、高機能のテキストエディタ で必要な文字だけ一度にまとめて変換し、Excelに戻します。JEdit を愛用していますが、本当に一瞬で終わりますよ。 でなければ、せっかくデータベースとして活用したいのだから表計 算ソフトを卒業して、ファイルメーカーあたりに持ち込みます。検 索で1バイト文字/2バイト文字や大文字/小文字を区別しません。

関連するQ&A