アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCELで入力しているデータをフィルターを使用して検索できる
データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。
フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。

ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが
ASC関数ですとカタカタも半角カタカナに変換されるので
英数字だけを全角→半角にする関数や方法などあれば教えてください。

入力データは
漢字、ひらがな、カタカナ、英数字が混在しています。

希望
全角→漢字、ひらがな、カタカナ
半角→英数字

宜しくお願い致します。

A 回答 (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

-----------------------------
    • good
    • 0

関数を使っても良いのなら、[ ASC関数]ではなく[ユーザー定義関数]を


使用してはいかが。
http://billyboy.blog81.fc2.com/blog-entry-84.html

[ユーザー定義関数]が初めてならこちら↓
http://www.konomiti.com/Ex_kan_05.html
    • good
    • 0

Excel日本語版は昔からカタカナとASCII文字の区別が出来ないか


ら、面倒くさいですね。

私ならテキストファイルに吐き出して、高機能のテキストエディタ
で必要な文字だけ一度にまとめて変換し、Excelに戻します。JEdit
を愛用していますが、本当に一瞬で終わりますよ。

でなければ、せっかくデータベースとして活用したいのだから表計
算ソフトを卒業して、ファイルメーカーあたりに持ち込みます。検
索で1バイト文字/2バイト文字や大文字/小文字を区別しません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!