[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/17(Thu) 11:48
投稿者名:つとむ
Eメール:
URL :
タイトル:
全角文字が入力されている文字列中の全角スペースのチェック
全角文字が入力されている文字列中に、全角スペースが存在するかチェック
したいのですが、方法としては、全角スペースを直接比較すればいいのでしょうか。

1)
    For I = 1 To Len(Text1.Text)
        mozi = Mid$(Text1.Text, I, 1)
        If mozi = " " Then
            Check_sub = False
            Exit Function
        End If
    Next I

2)
    zen_sp = " " & " "
    For I = 1 To Len(Text1.Text)
        mozi = Mid$(Text1.Text, I, 1)
        If mozi = zen_sp Then
            Check_sub = False
            Exit Function
        End If
    Next I

投稿時間:2005/02/17(Thu) 12:03
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: 全角文字が入力されている文字列中の全角スペースのチェック
試してみればわかると思いますが、正解は1番ですね。
といいたいけど、これだと全角スペースがあった場合にCheck_subがFalseに
なりますが、なかった場合はCheck_subがTrueということでしょうか?
その部分のコードがないので、ひょっとしたらなかった場合もFalseになる
可能性もあります。

2番は、全角のスペースと半角のスペース2文字は別物なので
>         If mozi = zen_sp Then
このIf文が成り立つことはないです。

投稿時間:2005/02/17(Thu) 12:15
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: 全角文字が入力されている文字列中の全角スペースのチェック
> 全角文字が入力されている文字列中に、全角スペースが存在するかチェック
> したいのですが、方法としては、全角スペースを直接比較すればいいのでしょうか。

質問内容をそのまま受け取ると下記の方が簡単で早いのですが。
    If InStr(Text1.Text, " ") Then
      Check_sub = True
    Else
      Check_sub = False
    End If

# こう言った質問は質問内容を詳しく書かないと処理のやり方がかなり変って
 きますよ、全角スペースが見つかったらどうしたいのかによっても処理方法が
 変ってくるし、単に有る無しだけ解ればいいと言う場合とその位置や個数を知りたい
 等でも処理方法が色々変ってきます。

投稿時間:2005/02/17(Thu) 12:50
投稿者名:つとむ
Eメール:
URL :
タイトル:
Re: 全角文字が入力されている文字列中の全角スペースのチェック
ご指摘ありがとうございます。

実際にしたいことは、文字列の先頭と終わりに全角スペースが
ないかをチェックし、存在した場合は、終了し(返却し)、
存在しない場合は、次の処理に進むというものです。

<per>
    For I = 1 To Len(Text1.Text)
        mozi = Mid$(Text1.Text, I, 1)
        If ((I = 1 Or I = Len(Text1.Text)) And Asc(mozi) = " ") Then
            Check_subt = False
            Exit Function
        End If

    処理

    Next I
</per>I

投稿時間:2005/02/17(Thu) 12:59
投稿者名:いな
Eメール:
URL :
タイトル:
Re^2: 全角文字が入力されている文字列中の全角スペースのチェック
> ご指摘ありがとうございます。
>
> 実際にしたいことは、文字列の先頭と終わりに全角スペースが
> ないかをチェックし、存在した場合は、終了し(返却し)、
> 存在しない場合は、次の処理に進むというものです。

同一関数内で書かない方が使いまわしが利くように思いますが・・・。

> <p>
>     関数名=True
>     For I = 1 To Len(Text1.Text)
>         mozi = Mid$(Text1.Text, I, 1)
>         If ((I = 1 Or I = Len(Text1.Text)) And Asc(mozi) = " ") Then
>             Check_subt = False
>             関数名=False
>             Exit For
>         End If
>     Next I
> </p>

呼び出し元で、処理を続けるか否かを判断されては?

投稿時間:2005/02/17(Thu) 13:49
投稿者名:
Eメール:
URL :
タイトル:
Re^2: 全角文字が入力されている文字列中の全角スペースのチェック
> 実際にしたいことは、文字列の先頭と終わりに全角スペースが
> ないかをチェックし、存在した場合は、終了し(返却し)、
> 存在しない場合は、次の処理に進むというものです。

先頭と終わりだけのチェックであればTrim$の結果と比較するだけでいけるかな?
For文で1文字ずつ回すと文中のスペースにも反応してしまうかと。

投稿時間:2005/02/17(Thu) 14:03
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re^3: 全角文字が入力されている文字列中の全角スペースのチェック
> 先頭と終わりだけのチェックであればTrim$の結果と比較するだけでいけるかな?
> For文で1文字ずつ回すと文中のスペースにも反応してしまうかと。
Trim$ってホワイトスペース全部に反応しなかったけか・・?
・・・違うみたいだな。

MSDN参照:
1 バイト (半角)、2 バイト (全角) にかかわらず、文字列の先頭あるいは末尾のスペースを削除しま
す。

投稿時間:2005/02/17(Thu) 15:18
投稿者名:
Eメール:
URL :
タイトル:
Re^4: 全角文字が入力されている文字列中の全角スペースのチェック
> Trim$ってホワイトスペース全部に反応しなかったけか・・?
> ・・・違うみたいだな。
>
> MSDN参照:
> 1 バイト (半角)、2 バイト (全角) にかかわらず、文字列の先頭あるいは末尾のスペースを削除
します。

半角スペースの事をコロッと忘れておりました…失礼しました。

投稿時間:2005/02/17(Thu) 15:41
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^5: 全角文字が入力されている文字列中の全角スペースのチェック
>実際にしたいことは、文字列の先頭と終わりに全角スペースが
>ないかをチェックし、存在した場合は、終了し(返却し)、
>存在しない場合は、次の処理に進むというものです。

何で最初からこう質問しないのでしょう?

↓こういう事で良いのだろうか?
Private Sub Command1_Click()

    If chkSpace(Text1.Text) = False Then
        Exit Sub
    End If

    '何らかの処理    
       ・
       ・
End Sub

Private Function chkSpace(inText As String) As Variant

    chkSpace = True
    
    If InStr(inText, " ") = 1 And _
       InStrRev(inText, " ") = Len(inText) Then
        chkSpace = False
    End If

End Function

投稿時間:2005/02/17(Thu) 22:13
投稿者名:つとむ
Eメール:
URL :
タイトル:
Re^6: 全角文字が入力されている文字列中の全角スペースのチェック
皆様、ありがとうございます。

黒影さんが書き込みしていただいた例は参考になります。