• ベストアンサー

Excelで22バイトの文字を数えたい

lark_0925の回答

  • ベストアンサー
  • lark_0925
  • ベストアンサー率63% (37/58)
回答No.1

>最悪その文字が全角か半角かの区別がつけば対応できると思います。 ↑これを判断する方法を二つほど・・・。 '========================================================== Sub test()   Dim idx As Long   Dim aa As String   Dim result As String   Range("a1").Value = "私はhungryです"   MsgBox "セルA1の文字列の全角。半角を判断します"   aa = Range("a1").Value   For idx = 1 To Len(aa)    result = "「" & Mid(aa, idx, 1) & "」は、"    If LenB(StrConv(Mid(aa, idx, 1), vbFromUnicode)) = 2 Then      result = result & "全角文字です"    Else      result = result & "半角文字です"      End If    MsgBox result    Next End Sub '========================================================== Sub test2()   Dim idx As Long   Dim aa As String   Dim result As String   Range("a1").Value = "私はhungryです"   MsgBox "セルA1の文字列の全角。半角を判断します"   aa = Range("a1").Value   For idx = 1 To Len(aa)    result = "「" & Mid(aa, idx, 1) & "」は、"    If Evaluate("LenB(""" & Mid(aa, idx, 1) & """)") = 2 Then      result = result & "全角文字です"    Else      result = result & "半角文字です"      End If    MsgBox result    Next End Sub 検討してみてください。

Sinogi
質問者

お礼

LenB(StrConv(Mid(aa, idx, 1), vbFromUnicode)) を利用し以下のような文字列検査で目的を得ました。ありがとうございました。 ※変数"文字列"に検査したい文字列を代入し、本体マクロから"文字列検査"マクロを呼び出し バイト数・ 調整文字 を得て本体に戻ります。 Sub 文字列検査() ReDim 文字長(Len(文字列)) As Integer バイト数 = 0 調整文字 = "" For 文字回数 = 1 To Len(文字列) 文字長(文字回数) = LenB(StrConv(Mid(文字列, 文字回数, 1), vbFromUnicode)) If バイト数 > 0 And 文字長(文字回数) <> 文字長(文字回数 - 1) Then バイト数 = バイト数 + 1 Select Case 文字長(文字回数) Case 1 If バイト数 < 22 Then バイト数 = バイト数 + 文字長(文字回数) 調整文字 = 調整文字 + Mid(文字列, 文字回数, 1) End If Case 2 Select Case バイト数 Case 20 バイト数 = バイト数 + 1 Case 0, 19 バイト数 = バイト数 + 文字長(文字回数) + 1 調整文字 = 調整文字 + Mid(文字列, 文字回数, 1) Case 1 To 18 バイト数 = バイト数 + 文字長(文字回数) 調整文字 = 調整文字 + Mid(文字列, 文字回数, 1) If 文字回数 = Len(文字列) Then バイト数 = バイト数 + 1 End Select End Select Next 文字回数 End Sub

関連するQ&A

  • エクセル:文字列のバイト数が欲しい

    セルB1に、  半角スペース、全角2文字、半角スペース、 と入力しました。 このシートの別のセルに、 =Len(B1)と入力すると4と表示され、 =LenB(B1)と入力すると6と表示されますので、 間違いなく「半角スペース・全角2文字・半角スペース」がB1に入っているはずです。 このシートのコードに、 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Address = "$L$1" Then     MsgBox LenB(Cells(1, 2).Value)   End If End Sub と打ちました。 ここでシート上のセルL1に何か入力するとメッセージボックスが出るのですが、 メッセージボックスに出る値は8です。 何が原因でしょうか。 6が表示されて欲しいのですが(文字列のバイト数が欲しい)、 どのようにコードを書けばよいでしょうか。 実際にB1に入れていた文字は、 1B です。 (半角スペース・全角数字1・全角英字B・半角スペース)

  • EXCELのVBAでLenB関数について

    VBA初心者の質問です。 EXCELのVBAでセルの文字数バイト数を取得したくてLenB関数を使用しました。 しかし半角で入力してある文字(数字)でも1文字2バイトになってしまいます。 具体的に言うと以下の通りです。 ---コード--------------  Dim test As Integer  test = Len(Activecell.Value) -----------------------  Activecellのセル内容「東京1234」  TEST→「8」と取得したいのに「12」になってしまう。 -------------------- EXCEL上ではキチンと「12」になるのですがVBAでは違うのでしょうか。 どなたかご存じでしたら、よろしくお願いいたします。

  • Accessの文字数を調べたい

    住所項目で半角と全角の混ざった状態になっており、半角1文字は1として全角は1文字は2として合計文字数を算出したいのですが、良い方法を教え下さい。 例 ○○県☐☐市1-2-3 Len  11 LenB 22 求めたい値は、全角6文字×2 + 半角5文字×1 = 17

  • エクセルの半角、全角

    エクセルで、半角文字、全角文字が混在するセルを関数等で全て全角にする(半角文字を全角文字に)方法はあるでしょうか?また、文字が1バイト文字か2バイト文字かを簡単に見分ける方法はありますか?

  • 半角/全角文字混在データの分割方法

    VB6.0にて、あるデータ項目の内容を、画面上の2つの表示領域に分割して セットする方法を教えて下さい。 あるファイルの項目として、「住所」という項目があるとします。 このデータを取得し、画面に表示する際に、「住所1」「住所2」とに分割して、 セットします。 この場合、ファイル上の「住所」は、キャラクタタイプで40バイトと定義されており、 ”半角/全角文字混在”でデータが格納されています。 画面上の、「住所1」「住所2」はそれぞれ、20バイトとします。 この様な条件で、単純に取得したデータを2分割すると、 取得したデータが、全て半角か全角なら問題はないのですが、 例えば、1文字目が半角で、以降が全て全角文字だった場合に、 最後の全角文字がぴったり収まらなくなり、うまく表示できないように思います。 また、文字を取得する際に、使用している、Mid(MidB)関数やLen(LenB)関数も、 うまく利用できていないようです。(コード体系の違いでしょうか?) どなたかご教授下さい。 よろしくお願いします。

  • エクセルで、DBCSをSBCSに変換

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

  • バイト数

    こんにちわ。 VB6でのすごく初歩的な質問なんですが、テキストボックスの中の文字のバイト数をLenB関数で取得して表示させようとしたのですが、半角も全角も1文字2バイトとでてしまいますがなぜでしょうか? お暇なときで結構ですのでどなたか回答をおねがいします。

  • エクセル2003で、1つのセルに全角文字、半角文字

    エクセルで文字数制限のあるセルに 全角、半角文字が混在している場合 A1 上下ABCDひだりみぎ ←対象となるセル B1全角文字数 7 C1半角文字数 4 というように対象のセルの全角文字数、半角文字数を別々のセルに表示できる方法があれば おしえてください。

  • セル内の文字で半角2文字で1文字とカウントしたい

    openofficeを利用しています。 セル内の全角と半角が混じった文章から半角2文字で1文字とカウント 全角はそのまま1文字とカウント して文字数を数えることはできますでしょうか? LENBが利用できないので困っています。 よろしくお願いします。

  • Excelで文字の長さを揃えるには

    excel95とExcel2000を使っています。 漢字やひらがな全角カタカナ全角英数字は2バイト、 半角カタカナ英数字は1バイト、 2バイトと1バイトの混在入力して20バイトの長さの文字列を比べると見た目の長さが違う。 同じ20バイトの文字列を見た目を揃える方法を教えてください。