Excel2016 32bit版
お世話になります。
ビジネスホンへの電話帳登録をVBAで書いています。
相手先名の入力が全角10文字・半角20文字までという制限があるため、テキストボックスの入力文字数に上限を設けたつもりです。
VBA
1Private Sub TextBox1_Change() 2 Dim convFromUcode As String 3 Dim leftFromUcode As String 4 convFromUcode = StrConv(TextBox1.Text, vbFromUnicode) 5 leftFromUcode = LeftB(convFromUcode, 20) 6 TextBox1.Text = StrConv(leftFromUcode, vbUnicode) 7End Sub
架空の [株式会社川崎インダストリーズ] を入力すると20byteまで表示されますが、
")"を半角にして [株)川崎インダストリーズ本社] を入力すると、最後の"社"の半分までと言いますか中途半端な表示となってしまいます。
LeftBで20と決めずに、20番目のバイト数を判定して2byteなら19にしたいと考えています。
VBA
1leftFromUcode = LeftB(convFromUcode, 20) '20と決め打ちしたくない
20文字目というか LenBの20番目が半角か全角かを判定する方法がわかればと以下のようにしてみましたが、"不明"が出るばかりです…。
VBA
1Private Sub TextBox1_Change() 2'注意 これは動きません 3 4 Dim convFromUcode As String 5 Dim leftFromUcode As String 6 Dim midFromUcode 7 Dim tmp as Integer 8 convFromUcode = StrConv(TextBox1.Text, vbFromUnicode) 9 If LenB(convFromUcode) > 20 Then 10 midFromUcode = MidB(convFromUcode, 20, 1) '20番目? 11 If midFromUcode = StrConv(midFromUcode, vbNarrow) Then 12 tmp = 20 13 ElseIf midFromUcode = StrConv(midFromUcode, vbWide) Then 14 tmp = 19 15 Else 16 MsgBox "不明" 17 End If 18 leftFromUcode = LeftB(convFromUcode, tmp) 19 TextBox1.Text = StrConv(leftFromUcode, vbUnicode) 20 End If 21End Sub
どうかお知恵をお貸しください。
全角、半角の判定方法の前に、どうして”不明”になるのか調べてはどうでしょう。
実際に、StrConv(midFromUcode, vbNarrow)がどういう値になっているのか、
StrConv(midFromUcode, vbWide)がどういう値になっているのか調べてみれば
原因がわかるような気がするのですが。。。
その前の段階で、MidB(convFromUcode, 20, 1) を Debug.Print させても何も表示されず、ローカルウィンドウでは "" なので、MidB で20文字目を判定するのは無理なのかもしれません。
1文字ずつ数えて足していく方向で考え直してみます。ありがとうございました。
回答2件
あなたの回答
tips
プレビュー