• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2010英数字のみ半角にする方法)

Excel2010英数字のみ半角にする方法

このQ&Aのポイント
  • Excel2010で、漢字やひらがなはそのまま表示され、全角カタカナはそのまま、半角カタカナは全角カタカナになり、全角英数字は半角英数字になり、半角英数字はそのまま、全角スペースはそのまま、半角スペースは全角スペースになり、連続するスペースは1つの全角スペースになります。
  • 例えば、既存の入力されている列が「AE列」の場合、関数を入力できるのは「AR列」以降です。
  • Excelで指定の条件に合わせて英数字のみを半角にする方法についてお教えします。条件を設定すれば、漢字やひらがなはそのまま表示され、全角カタカナはそのまま、半角カタカナは全角カタカナに変換されます。全角英数字は半角英数字に変換され、半角英数字はそのまま表示されます。また、全角スペースはそのまま、半角スペースは全角スペースに変換され、連続するスペースは1つの全角スペースに変換されます。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

期待通りに動いてくれると良いのですが、 自前の関数を作成します。 下記の Function myConv(ByVal myArg As String) As String ~中略~ End Function までをコピーします。 Excelに戻って、Alt + F11 を押してVBEの画面にします。 Alt + i を押して、プルダウンから標準モジュールを選択します。 新たなウィンドウが出ますのでそこへ先ほどのコピーをペーストします。 Alt + F11 を押してExcelに戻ります。 AR列で =myconv(AE1) 等とすれば結果が返ります。 条件1~8と例として挙げられているのが矛盾しているようです。 条件の方で作成しています。 Function myConv(ByVal myArg As String) As String Dim myReg As Object, myMC As Object, myM As Object Set myReg = CreateObject("VBScript.RegExp") 'スペースを全角一個だけに myConv = Replace(myArg, " ", " ", compare:=vbTextCompare) With myReg .Pattern = " +" .Global = True End With myConv = myReg.Replace(myConv, " ") '半角カタカナは全角カタカナ With myReg .Pattern = "[\uff66-\uff9f]+" .Global = True Set myMC = .Execute(myConv) End With For Each myM In myMC myConv = Replace(myConv, myM.Value, StrConv(myM.Value, vbWide), compare:=vbTextCompare) Next '全角英数字は半角英数字 With myReg .Pattern = "[0-9A-Za-z]+" .Global = True Set myMC = .Execute(myConv) End With For Each myM In myMC myConv = Replace(myConv, myM.Value, StrConv(myM.Value, vbNarrow), compare:=vbTextCompare) Next Set myMC = Nothing: Set myReg = Nothing End Function

miya_HN
質問者

お礼

回答ありがとうございます。 前者の通りVBAのことはほとんど分かりません。 なので、そのままコピーさせて試してみます。 あと、また関数ではなくVBAで新たに質問するかもしれませんがその時はよろしくお願いします。 ありがとうございました。

その他の回答 (2)

回答No.2

こんばんは。 関数に詳しくないとかなら、Wordで処理する方法もありかとは思います。 Wordの置換のワイルドカードを使います。 それが面倒なら、以下をVBEditor に貼り付けて一発変換という方法もあります。 正規表現を利用していますから、VBAでの処理が嫌なら、テキストエディタでも可能です。 数回の処理にはなるかと思いますが、基本的には、全角数字とスペースの統一です。 '// Sub RegExpExchange()  Dim myRange As Range  Dim objReg As Object  Dim Matches As Object  Dim Match As Variant  Dim c As Range  Dim Dspc As String  Dspc = Chr(&H8140) '一般的な全角スペース  Application.ScreenUpdating = False  With ActiveSheet   'データはA列にあるとする   Set myRange = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))  End With  Set objReg = CreateObject("VBScript.RegExp")  With objReg   For Each c In myRange    buf = c.Value    .Pattern = "[0-9]+"    .Global = True    If .Test(buf) Then     Set Matches = .Execute(buf)     For Each Match In Matches      buf = Replace(buf, Match, StrConv(Match, vbNarrow))     Next Match    End If    .Pattern = "[" & Dspc & Space(1) & "]+" '全角・半角スペース1つずつ入れる    .Global = True    If .Test(buf) Then     Set Matches = .Execute(buf)     For Each Match In Matches      buf = Replace(buf, Match, Dspc)     Next Match    End If    c.Offset(, 1).Value = buf   Next c  End With  Application.ScreenUpdating = True  Set objReg = Nothing End Sub

miya_HN
質問者

お礼

回答ありがとうございます。 VBAですか。 VBAのことはちんぷんかんぷんなので、どのような処理をしているのか分かりません。 なので、どうお礼をしたらいいのか分かりませんがとりあえずありがとうございました。

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

簡単にはできませんね。 マクロを使用しないのであれば… 全角の英数字とカタカナを半角文字にする場合はASC関数、その逆はJIS関数を使います。 カタカナは全角という縛りがありますので、とりあえず全角に変換した後 英数字をひとつずつ置換で置き換えるくらいしか思いつきません。

miya_HN
質問者

お礼

回答ありがとうございます。 やはり難しいですか。 自分としましてもASC関数、JIS関数は知っていますが、すべて条件を満たすような条件は厳しいですね。 ありがとうございました。

関連するQ&A