- ベストアンサー
マクロを使って文字列を分類したい。
マクロを使って、次の処理を行うマクロを作りたいのですが、 まず、漢字・ひらがな・カタカナ・数時・アルファベットを識別するコードの抽出方法と、コードの一覧がわかりません。 それから、文字列の処理の関数がなかなか思いつきません。 2年ほどマクロを使っていません。エクセルも2007になり、かなり勝手が違います。 できれば、マクロを示していただければありがたいのですが、 重要なヒントを示していただいても構いません。 ----------------------------------------------- セル(H、5)の中に、いろいろな文字列があります。 例えば、 「東京1月アメリカEUやまとChinaイギリス日本2009年おわり」 ですが、 これを 漢字をA列に1行から順に、 東京 月 日本 年 ひらがなをB列に1行から順に、 やまと おわり カタカナをC列に1行から順に、 アメリカ イギリス 数字をD列に1行から順に、 1 2009 アルファベットをE列に1行から順に、 EU China というように出力するマクロを作りたいのです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 「東京1月アメリカEUやまとChinaイギリス日本2009年おわり」 この文には、助詞がありません。だから可能ですが、助詞の区分けをしなくてはならないとしたら、もっと複雑になりますが、本格的に行うなら、Perl を使ったり、VB系では、BREGEXP を使ったりします。 なお、VBEditor 内では、Unicode ですから、JISの並びとは違いますから、ややこしいです。以下を参考にしてみてください。 '--------------------------------------------- Sub Test1() Dim mText As String Dim objRe As Object Dim Matches As Object Dim Match As Object Dim buf As String Dim v As Variant Dim i As Integer Dim j As Integer Dim Ar() As Variant ReDim Ar(4, 0) If Range("H5").Value <> "" Then mText = Range("H5").Value Else Exit Sub '文字がない場合 End If '漢字,ひらがな,半角カタカナ/全角カタカナ,数字、アルファベット For Each v In Array("[一-龠]+", "[ぁ-ん]+", "[\uFF66-\uFF9Fァ-ヶ]+", "[\d0-9]+", "[A-zA-z]+") With CreateObject("VBScript.RegExp") .Global = True .Pattern = v If .Test(mText) Then Set Matches = .Execute(mText) For Each Match In Matches If UBound(Ar, 2) < i Then ReDim Preserve Ar(4, i) End If buf = Match.Value If IsNumeric(buf) Then buf = "'" & buf Ar(j, i) = buf i = i + 1 Next j = j + 1 i = 0 End If End With Next v Range("A1").Resize(UBound(Ar, 2) + 1, UBound(Ar, 1) + 1).Value = _ Application.Transpose(Ar) End Sub
その他の回答 (1)
- abe_onesel
- ベストアンサー率52% (20/38)
エクセルであれば、 =CODE("A")→65 =CHAR(65)→A(半角のA) =CODE("東京")→17772(先頭の文字を処理) =CHAR(17772)→東 VBAであれば、ASC関数がCODE関数、CHR関数がCHAR関数と同じような機能みたいです。 私は使い慣れていない関数なので、実際に試してみると良いと思います。 以前マクロを使用されていたとの事ですので、詳しく書く必要もないと思いますが、 関数の性質上、一文字ずつ処理していけばできるでしょう。 参考までに私がエクセルのCODE関数で試したものです。 A~Z 65~90 a~z 97~122 A~Z 9025~9050(全角) a~z 9057~9082(全角) 0~9 48~57 0~9 9008~9017(全角) ぁ~ん 9249~9331 ァ~ン 9505~9587 亜 12321 腕 20307
お礼
感謝申し上げます。 勉強になります。