みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

海外購入PCでLENB関数を機能させるには?

掲題の件ですがお力を貸していただけますと幸いです。

LENBを使って文字数をカウントしたいのですが、
海外購入パソコンのため全角認識がないのか、
ひらがなや漢字をいれても`1`とカウントしてしまいます。

きちんと半角は1、全角は2としてカウントさせたいのですが
何かいい方法はないでしょうか?

このエクセルファイルは人に提出して記入してもらうもののため
(提出先の人も海外購入パソコンを使用している可能性大)
PCのハード側をいじるのではなく、
エクセル内の関数などで解決したいです。。。

どうぞよろしくお願いいたします。

投稿日時 - 2011-01-21 13:36:18

QNo.6463936

すぐに回答ほしいです

質問者が選んだベストアンサー

>ひらがなや漢字をいれても`1`とカウントしてしまいます。

VBAを使うしか手はないと思いますが……。
VBAでも、一般のコード、InstrConv で、Ascii に戻す、vbFromUnicode オプションが利きません。もともと、英語バージョンも、ローカルバージョンですから、たぶん、CODE関数でも取れないはずです。「1」と出ているのは、単に、ワークシート上で「?」になった文字を数えているだけだと思います。ちょうと、以前の#1のmike_gさんのご質問の裏返しのようなものではないでしょうか?

今回の質問は、時々、VBカテゴリなどで出る質問と同質だと思いますが、バイナリにして文字長を数えます。VBAは、本来、Unicodeだけですから、Unicodeの上位桁・下位桁のチェックをすればよいわけです。ワークシート関数では、そういうことは出来ないと思います。VBAは、禁止だとすれば、今回は無理だと思います。

'標準モジュールに貼り付けてください。
Public Function fLenB(arg As Variant)
 Dim buf As String
 Dim b() As Byte
 Dim i As Long, cnt As Long
 If TypeName(arg) = "Range" Then
  buf = arg.Value
 Else
  buf = arg
 End If
 b = buf
 For i = LBound(b) To UBound(b)
  If b(i) > 0 Then
   cnt = cnt + 1
  End If
 Next i
 fLenB = cnt
End Function

投稿日時 - 2011-01-21 20:44:34

お礼

ありがとうございます。
VBAでやってみます。

ありがとうございました。

投稿日時 - 2011-01-22 11:32:27

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

LENB関数は日本語版限定の機能なので…

なのでやれる可能性があるとしたら、

1)LEFTあるいはRIGHT関数で端から1文字ずつ取り出す。
2)それをCODE関数に入れて文字コードを調べる。
3)CODE関数の戻り値が255以下だったら半角なので文字数+1,そうでなければ+2。
4)上記を全ての文字を調べるまで繰り返す。

という動作をするユーザー定義関数を作るくらいしか手がないんじゃないでしょうか。

投稿日時 - 2011-01-21 14:32:34

お礼

ありがとうございます。
ただ上記の関数でもただしくcodeがでずでした。。。

投稿日時 - 2011-01-22 11:31:36

当該PCにインストールされている Excel は英語版ですか、それとも、日本語版?

投稿日時 - 2011-01-21 13:54:04

補足

英語版のexcelです。。。
やはり難しいでしょうか?

投稿日時 - 2011-01-21 13:59:14

あなたにオススメの質問