dポイントプレゼントキャンペーン実施中!

セル内(C3)にある文字列に、漢字・ひらがな・全角カタカナ・半角カタカナのうち、1個でもあれば、その文字列すべてを、右隣のセル(C4)に移し、それ以外の場合はさらにその右隣(C5)に移したいのですが、


たとえば、

(C3)「AMERICA/JAPAN」の場合は、(C5)に「AMERICA/JAPAN」と移します。

(C3)「AMERICA/Japan」の場合は、(C5)に「AMERICA/Japan」と移します。

(C3)「AMERICA/JAPAN#$%?<>」の場合は、(C5)に「AMERICA/JAPAN#$%?<>」と移します。


しかし

(C3)「日本とアメリカ#$%?<>」の場合は、(C4)に「日本とアメリカ#$%?<>」と移します。

(C3)「日本/america」の場合は、(C4)に「日本/america」と移します。

(C3)「日本/アメリカ」の場合は、(C4)に「日本/アメリカ」と移します。

(C3)「Japanとamerica」の場合は、(C4)に「Japanとamerica」と移します。

VBAで処理する場合、文字コード、Chr関数、Mid関数を使えばいいと思ってプログラムを組むところです。

ところが、漢字のコード番号が何番から何番までか、よくわかりません。カタカナ・ひらがなは調べられます。

正確でなくとも<>=の数値処理の範囲指定ですので、漢字コードの範囲を教えてくださいませんか。

また、この処理目的のために、よりシンプルなプログラムがありましたら教えてくださいませんか。
よろしくお願いします。

※簡単に言いますと、セル内が日本語の文章か英語の文章かを識別する作業です。

A 回答 (5件)

日本語かどうかの判定関数です。


引数の中身が日本語ならTrueをそれ以外ならFalseを返します。

------------------
Function IsJapan(Arg As String) As Boolean
IsJapan = Not (LenB(StrConv(StrConv(StrConv(StrConv(Arg, vbWide), vbHiragana), vbNarrow), vbFromUnicode)) = Len(Arg))
End Function

この回答への補足

目からうろこ・・です。皆さん有難うございます。

補足日時:2006/02/07 09:45
    • good
    • 1

#1です。


文字列として"ABC"と"いろは"とあるとします。

JIS関数で全角変換をすると
"ABC"→"ABC"
"いろは"→"いろは"
この変換後の文字列数をLENB関数で数えると(文字数をバイト単位で数える)
"ABC"→6文字
"いろは"→6文字
となります。

ASC関数で半角変換をすると
"ABC"→"ABC"
"いろは"→"いろは"
この変換後の文字列数を同じくLENB関数で数えると
"ABC"→3文字
"いろは"→6文字

ここで JIS関数で変換した文字数=ASC関数で変換した文字数*2 だったら英語、イコールでなければ日本語が混じっていると判断しています。
ただ、ここで書いていて気づいたのですがカタカナは半角カタカナがあるためうまくいきませんね。「漢字・ひらがなが1個でも」という条件にしか適合しません。申し訳ありません。
(例題はカタカナと一緒に漢字またはひらがながあったためたまたまうまくいっていました)

もう一件追加の質問は、その質問のリンク先か質問Noがあるとありがたいです...
    • good
    • 1

こんにちは。


以下は、Web サイトの自動変換機能で、全角になっていますから、以下の部分だけ半角に変換をしてください。

Function FindJapanese(Text As String) の中の

→ If Text Like "*[ヲ-゜]*" Or _

なお、一応、大ざっばに考えたものですから、細かいチェックはなされておりません。


'--------------------------------------------
Sub CheckCharMacro()
Dim c As Range
For Each c In Range("C3")  'Selection
 If FindJapanese(c.Value) Then
   c.Offset(1).Value = c.Value '入っている
 Else
   c.Offset(2).Value = c.Value '入っていない
 End If
Next c
End Sub

Function FindJapanese(Text As String)
'漢字・ひらがな・全角カタカナ・半角カタカナ
'注意 最初のカタカナは、半角に変更してください。
If Text Like "*[ヲ-゜]*" Or _
  Text Like "*[ぁ-ヶ]*" Or _
  Text Like "*[一-龠]*" Then
 FindJapanese = True
Else
  FindJapanese = False
End If
End Function
'--------------------------------------------


>漢字のコード番号が何番から何番までか、よくわかりません。

VBAならば、漢字コードは、Unicodeの範囲を指定すればよいのでは? 

[&H4E00-&H9FA5]

一-龠(これ以上は、ShifJISにありません。4文字漢字が足りません。正確さを記すなら、Unicode入力をするか、コードで指定してください)正規表現でも可能です。その場合は、直接コードを指定すればよいです。
    • good
    • 0
この回答へのお礼

感謝。もう一つ質問を関連で書きました。
よろしかったら。お助けください。

お礼日時:2006/02/03 18:45

>漢字コードの範囲を教えてくださいませんか。



下記は、逆に「半角コード以外」が含まれるかで判断しています。

Sub sample()

Dim str As String
Dim i As Integer
Dim flg As Boolean

str = "japan/にほん"

For i = 1 To Len(str)
If AscB(Mid(str, i)) > 127 Or AscB(Mid(str, i)) < 32 Then
flg = True
Exit For
End If
Next

If flg Then
MsgBox "日本語が含まれています。"
Else
MsgBox "日本語は含まれていません。"
End If

End Sub
    • good
    • 0
この回答へのお礼

感謝。少し時間をください。理解してみます。

お礼日時:2006/02/03 18:44

下記のような関数で例に挙げられている内容を満足できましたが、このようなものでも大丈夫でしょうか。



セルC4に =IF(LENB(JIS(C3))=LENB(ASC(C3))*2,C3,"")
セルC5に =IF(LENB(JIS(C3))<>LENB(ASC(C3))*2,C3,"")

内容としては元セルの文字列を全角変換したときの文字数(バイト単位)が元セルの文字列を半角変換した時の文字数*2の値だったら英語と判断するというものです。
全ての文字列で満足するかわかりませんが、参考に。

この回答への補足

関数処理出来るんですね。ほんとうに目からうろこです。少し、理論をご教授願いたいのですが。文字コードに関する知識が少し弱いものですから。・・・

それから、もう1件追加の質問も書きました。関連です。関数で処理できれば、有難いのですが、・・・。感謝。

補足日時:2006/02/03 18:39
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A