プロが教えるわが家の防犯対策術!

マクロを使って、次の処理を行うマクロを作りたいのですが、

まず、漢字・ひらがな・カタカナ・数時・アルファベットを識別するコードの抽出方法と、コードの一覧がわかりません。

それから、文字列の処理の関数がなかなか思いつきません。

2年ほどマクロを使っていません。エクセルも2007になり、かなり勝手が違います。

できれば、マクロを示していただければありがたいのですが、

重要なヒントを示していただいても構いません。

-----------------------------------------------


セル(H、5)の中に、いろいろな文字列があります。

例えば、

「東京1月アメリカEUやまとChinaイギリス日本2009年おわり」

ですが、

これを

漢字をA列に1行から順に、

東京

日本


ひらがなをB列に1行から順に、

やまと
おわり

カタカナをC列に1行から順に、

アメリカ
イギリス

数字をD列に1行から順に、


2009

アルファベットをE列に1行から順に、

EU
China

というように出力するマクロを作りたいのです。

よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

感謝申し上げます。
勉強になります。

お礼日時:2009/01/18 05:39

エクセルであれば、


=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
    • good
    • 0

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