- ベストアンサー
Excel2010英数字のみ半角にする方法
- Excel2010で、漢字やひらがなはそのまま表示され、全角カタカナはそのまま、半角カタカナは全角カタカナになり、全角英数字は半角英数字になり、半角英数字はそのまま、全角スペースはそのまま、半角スペースは全角スペースになり、連続するスペースは1つの全角スペースになります。
- 例えば、既存の入力されている列が「AE列」の場合、関数を入力できるのは「AR列」以降です。
- Excelで指定の条件に合わせて英数字のみを半角にする方法についてお教えします。条件を設定すれば、漢字やひらがなはそのまま表示され、全角カタカナはそのまま、半角カタカナは全角カタカナに変換されます。全角英数字は半角英数字に変換され、半角英数字はそのまま表示されます。また、全角スペースはそのまま、半角スペースは全角スペースに変換され、連続するスペースは1つの全角スペースに変換されます。
- みんなの回答 (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
その他の回答 (2)
- WindFaller
- ベストアンサー率57% (465/803)
こんばんは。 関数に詳しくないとかなら、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
お礼
回答ありがとうございます。 VBAですか。 VBAのことはちんぷんかんぷんなので、どのような処理をしているのか分かりません。 なので、どうお礼をしたらいいのか分かりませんがとりあえずありがとうございました。
- Cupper-2
- ベストアンサー率29% (1342/4565)
簡単にはできませんね。 マクロを使用しないのであれば… 全角の英数字とカタカナを半角文字にする場合はASC関数、その逆はJIS関数を使います。 カタカナは全角という縛りがありますので、とりあえず全角に変換した後 英数字をひとつずつ置換で置き換えるくらいしか思いつきません。
お礼
回答ありがとうございます。 やはり難しいですか。 自分としましてもASC関数、JIS関数は知っていますが、すべて条件を満たすような条件は厳しいですね。 ありがとうございました。
お礼
回答ありがとうございます。 前者の通りVBAのことはほとんど分かりません。 なので、そのままコピーさせて試してみます。 あと、また関数ではなくVBAで新たに質問するかもしれませんがその時はよろしくお願いします。 ありがとうございました。