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

投稿時間:2004/12/20(Mon) 14:59
投稿者名:NAO
Eメール:
URL :
タイトル:
数字列の長さについて
みなさんこんにちは
実は初歩的な質問です。
テキストボックスに、20040501(小文字)と入力して
len と lenb で値を取得した所、
8 と 16 で返ってきます。
数字なのでコード変換をしなければならないと思うのですが、
やり方が分かりません。
主旨は、上記の場合len と lenbでは同様に8と値が返ってきて欲しい。
事と、20040501(大文字)の場合は、lenbの場合16と返って
きて欲しいです。
どなたかご存知の方教えて下さい。
よろしくお願いします。

投稿時間:2004/12/20(Mon) 15:10
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: 数字列の長さについて
> みなさんこんにちは
> 実は初歩的な質問です。
> テキストボックスに、20040501(小文字)と入力して
> len と lenb で値を取得した所、
> 8 と 16 で返ってきます。
> 数字なのでコード変換をしなければならないと思うのですが、
> やり方が分かりません。
> 主旨は、上記の場合len と lenbでは同様に8と値が返ってきて欲しい。
> 事と、20040501(大文字)の場合は、lenbの場合16と返って
> きて欲しいです。
> どなたかご存知の方教えて下さい。
> よろしくお願いします。

VBは、文字列を内部ではUNICODEで処理しているので、全角・半角とも
2バイトになります。

半角を1バイト、全角を2バイトとして扱いたい場合は、Shift-JISに
変換してやらなければなりませんが、これはStrConv関数で出来ます。

Debug.Print LenB("20040501") '16
Debug.Print LenB("20040501") '16
Debug.Print LenB(StrConv("20040501", vbFromUnicode)) '8
Debug.Print LenB(StrConv("20040501", vbFromUnicode)) '16

投稿時間:2004/12/20(Mon) 15:32
投稿者名:NAO
Eメール:
URL :
タイトル:
Re^2: 数字列の長さについて
返事ありがとうございます。

LenB(StrConv("20040501", vbFromUnicode))の
"20040501"は、実はText1(テキストボックス)に入力したもので、
実際は、LenB(StrConv(Text1, vbFromUnicode))になるのですが、
この場合、
Len(StrConv(Text1, vbFromUnicode)) = 4
LenB(StrConv(Text1, vbFromUnicode)) = 8
になります。
テキストボックスに入力すると、何か違うのでしょうか。
すいませんが、ご返答よろしくお願いします。


> > みなさんこんにちは
> > 実は初歩的な質問です。
> > テキストボックスに、20040501(小文字)と入力して
> > len と lenb で値を取得した所、
> > 8 と 16 で返ってきます。
> > 数字なのでコード変換をしなければならないと思うのですが、
> > やり方が分かりません。
> > 主旨は、上記の場合len と lenbでは同様に8と値が返ってきて欲しい。
> > 事と、20040501(大文字)の場合は、lenbの場合16と返って
> > きて欲しいです。
> > どなたかご存知の方教えて下さい。
> > よろしくお願いします。
>
> VBは、文字列を内部ではUNICODEで処理しているので、全角・半角とも
> 2バイトになります。
>
> 半角を1バイト、全角を2バイトとして扱いたい場合は、Shift-JISに
> 変換してやらなければなりませんが、これはStrConv関数で出来ます。
>
> Debug.Print LenB("20040501") '16
> Debug.Print LenB("20040501") '16
> Debug.Print LenB(StrConv("20040501", vbFromUnicode)) '8
> Debug.Print LenB(StrConv("20040501", vbFromUnicode)) '16

投稿時間:2004/12/20(Mon) 16:40
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: 数字列の長さについて
> 返事ありがとうございます。
>
> LenB(StrConv("20040501", vbFromUnicode))の
> "20040501"は、実はText1(テキストボックス)に入力したもので、
> 実際は、LenB(StrConv(Text1, vbFromUnicode))になるのですが、
> この場合、
> Len(StrConv(Text1, vbFromUnicode)) = 4
> LenB(StrConv(Text1, vbFromUnicode)) = 8
> になります。
> テキストボックスに入力すると、何か違うのでしょうか。
> すいませんが、ご返答よろしくお願いします。

これ自体は別にどこもおかしい所はないと思いますが?
しいて言えばNAOさんが欲しいのは

Len(Text1) = 8

LenB(StrConv(Text1, vbFromUnicode)) = 8

だったんじゃないですか??

投稿時間:2004/12/20(Mon) 17:09
投稿者名:NAO
Eメール:
URL :
タイトル:
Re^4: 数字列の長さについて
返事ありがとうございます。
私の書き方がまずかったのですね。
単刀直入に言うと、VBFROMUNICODEの正確な意味が分からない
という事です。
Len(StrConv(Text1, vbFromUnicode)) = 4
となるのは、どうしてなのかと思いました。
vbFromUnicodeはHELPで見ても詳しく書いておらず
もしどなたかご存知なら教えていただきたいと思いました。







> > 返事ありがとうございます。
> >
> > LenB(StrConv("20040501", vbFromUnicode))の
> > "20040501"は、実はText1(テキストボックス)に入力したもので、
> > 実際は、LenB(StrConv(Text1, vbFromUnicode))になるのですが、
> > この場合、
> > Len(StrConv(Text1, vbFromUnicode)) = 4
> > LenB(StrConv(Text1, vbFromUnicode)) = 8
> > になります。
> > テキストボックスに入力すると、何か違うのでしょうか。
> > すいませんが、ご返答よろしくお願いします。
>
> これ自体は別にどこもおかしい所はないと思いますが?
> しいて言えばNAOさんが欲しいのは
>
> Len(Text1) = 8
> と
> LenB(StrConv(Text1, vbFromUnicode)) = 8
>
> だったんじゃないですか??

投稿時間:2004/12/21(Tue) 08:45
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re^3: 数字列の長さについて
> 返事ありがとうございます。
>
> LenB(StrConv("20040501", vbFromUnicode))の
> "20040501"は、実はText1(テキストボックス)に入力したもので、
> 実際は、LenB(StrConv(Text1, vbFromUnicode))になるのですが、
> この場合、
> Len(StrConv(Text1, vbFromUnicode)) = 4
> LenB(StrConv(Text1, vbFromUnicode)) = 8
> になります。
> テキストボックスに入力すると、何か違うのでしょうか。
> すいませんが、ご返答よろしくお願いします。

これは、テキストボックスでも変数に代入しても同じです。

最初の回答にも書きましたが、StrConv(Text1, vbFromUnicode) は
VBの内部で扱っているUNICODEからSHIFT-JISへ変換するものです。
したがって、そのバイト数を求めるLenB(StrConv(Text1, vbFromUnicode))には
意味がありますが、文字数を求めるLen(StrConv(Text1, vbFromUnicode))は
StrConv(Text1, vbFromUnicode)で変換したSHIFT-JISのデータを無理矢理
文字としてその長さを求めるもので、はっきりいって意味がないものです。
MsgBox StrConv(Text1, vbFromUnicode)としてみると、意味不明の文字が
表示されるのがわかると思います。

投稿時間:2004/12/21(Tue) 12:40
投稿者名:NAO
Eメール:
URL :
タイトル:
Re^4: 数字列の長さについて
返事ありがとうございます。
おかげ様で解決しました。
ありがとうございました。




> > 返事ありがとうございます。
> >
> > LenB(StrConv("20040501", vbFromUnicode))の
> > "20040501"は、実はText1(テキストボックス)に入力したもので、
> > 実際は、LenB(StrConv(Text1, vbFromUnicode))になるのですが、
> > この場合、
> > Len(StrConv(Text1, vbFromUnicode)) = 4
> > LenB(StrConv(Text1, vbFromUnicode)) = 8
> > になります。
> > テキストボックスに入力すると、何か違うのでしょうか。
> > すいませんが、ご返答よろしくお願いします。
>
> これは、テキストボックスでも変数に代入しても同じです。
>
> 最初の回答にも書きましたが、StrConv(Text1, vbFromUnicode) は
> VBの内部で扱っているUNICODEからSHIFT-JISへ変換するものです。
> したがって、そのバイト数を求めるLenB(StrConv(Text1, vbFromUnicode))には
> 意味がありますが、文字数を求めるLen(StrConv(Text1, vbFromUnicode))は
> StrConv(Text1, vbFromUnicode)で変換したSHIFT-JISのデータを無理矢理
> 文字としてその長さを求めるもので、はっきりいって意味がないものです。
> MsgBox StrConv(Text1, vbFromUnicode)としてみると、意味不明の文字が
> 表示されるのがわかると思います。