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

セルに書き込まれた文字列に漢字が含まれるかを調べようとした時に、If Len(Range("c" & i).Value) <> LenB(Range("c" & i).Value) Thenとしてみました。
セルに書き込まれた文字列は、事前に、StrConvのvbNarrow処理していたのですが、2バイトの半角文字になったようです。
lenを使わない方法でもいいのですが、文字列に漢字(漢数字、2バイト半角数字を含む)の有無を識別する方法はありますか?
詳しいかた教えて頂けないでしょうか?
別の言い方をすれば、大文字小文字を含む英数字と"-"のみで成り立つ文字列を抽出したいのです。(今書いているVBAでは、"-"が含まれている文字列の抽出を行っているので、結果的に、大文字小文字を含む英数字となります)
宜しくお願いいたします。

A 回答 (3件)

こんばんは。

Wendy02です。

>2バイトの半角文字を1バイト文字にする方法ってあるのでしょうか?

2バイト文字を半角の1バイトの処理するのは、ANSIに関するだけの話ですが、

 ActiveCell.Value = StrConv(ActiveCell.Value, vbNarrow)
 
ご存知のように、基本的には、これでよいのです。Excelのワークシートは、今でも、S-JIS です。

実際に、VB Editor 上は、Unicode ですので、それを、ワークシートに戻すか、一旦、StrConv(arg, vbFromUnicode)で、ANSIに戻さない限りは、バイト長、もしくは全角・半角は確認しにくいのです。

>セルに書き込まれた文字列は、事前に、StrConvのvbNarrow処理していたのですが、2バイトの半角文字になったようです。

厳密には、Unicode 上でも、2バイトの上位バイトと下位バイトを調べれば、全角は、上位・下位に入っていますが、半角には、2バイトは使っていても、片方しか入っていません。上位に入れるか、下位に入れるか、どちらかの方法があります。そういう調べる方法もありますが、#2 で書いたCheck2byte関数の方が楽です。
    • good
    • 0
この回答へのお礼

追加の質問にも丁寧に教えて頂き有難うございます。
熟読して、マスターしていきたいと思います。
有難うございました。

お礼日時:2006/11/03 10:10

こんばんは。



質問の内容が、それぞれ違っているので、ちょっと理解しにくいです。

>2バイトの半角文字になったようです。
Unicode では、見かけ上だけで2バイトは変わりません。
ANSI なら、二つに分かれます。

'2バイト文字のチェック
Function Check2byte(argText As String) As Boolean
 If LenB(StrConv(argText, vbFromUnicode)) <> Len(argText) Then
  Check2byte = True
 End If
End Function

'漢字チェック(最後に2バイト数字を加えた)
Function KanjiCheck(argText As String) As Boolean
 With CreateObject("VBScript.RegExp")
  .Pattern = "[\u4E00-\u9FA5\uF900-\uFA2D0-9]+"
  .Global = True
  KanjiCheck = .Test(argText)
 End With
End Function

'大文字小文字を含む英数字と"-"のみで成り立つ文字列を抽出したいのです。
こちらは意味がよく分かりませんが、こういうことなのでしょうか。

Function PullOutText(argText As String) As String
 With CreateObject("VBScript.RegExp")
  .Pattern = "^[a-z\d\-]+$"
  .Global = False
  .IgnoreCase = True
  If .Test(argText) Then
   PullOutText = argText
  End If
 End With
End Function

この回答への補足

大変、丁寧な回答有難う御座います。
早速、活用させていただきたく存じます。
便乗的な質問で恐縮なのですが、2バイトの半角文字を1バイト文字にする方法ってあるのでしょうか?
根本的には、そのあたりが私の解決策となりそうなので、あつかましいと思いながら、追加の質問をお許しください。
宜しくお願い致します。

補足日時:2006/11/02 23:49
    • good
    • 0

漢字が入っていないのは、lenb(strconv(変数,vbfromunicode))=len(変数)が成立すればいいと思います


VBAの文字型はUnicodeになるので、半角英数も2バイトになります
    • good
    • 0

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