• ベストアンサー

VBA エクセル 全角 半角

全角ならOK、半角ならNGと表示させるなら以下の計算式でいいと思います。 これを最終行を取得し、再終行までを判断させるマクロを教えて下さい。 =IF(LEN(A1)*2-LENB(A1)=0,"OK","NG") よろしくお願いいたします。

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

  • ベストアンサー
回答No.3

Option Explicit Sub 全角だけならOK() Dim xChar As Range Columns("B").ClearContents For Each xChar In Range("A1", Cells(Rows.Count, "A").End(xlUp)) If Not IsEmpty(xChar.Value) Then If (StrConv(xChar.Value, vbWide) = xChar.Value) Then xChar.Offset(, 1).Value = "OK" '全角だけ Else xChar.Offset(, 1).Value = "NG" End If End If Next End Sub

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

何をしたいのですか。 >再終行までを判断させる sub macro1()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)   if len(strconv(h, vbfromunicode)) * 2 - lenb(strconv(h, vbfromunicode)) <> 0 then    msgbox "NG"    exit sub   end if  next  msgbox "OK" end sub sub macro2() range("B1:B" & range("A65536").end(xlup).row).formula = "=IF(LEN(A1)*2-LENB(A1)=0,""OK"",""NG"") end sub sub macro3()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)   h.select   if len(strconv(h, vbfromunicode)) * 2 - lenb(strconv(h, vbfromunicode)) <> 0 then    msgbox "NG"   else    msgbox "OK"   end if  next end sub

回答No.1

2つの方法があります。 ひとつは、質問の数式通りの方法で、もうひとつは、全角にして比較する方法です。 VBAの扱う文字は、Unicodeですから、一旦、JISに戻さないと、LenBのバイトデータが取れません。 なお、他にも、もう一つ代表的な方法があります。 '// Sub Test1() Dim c As Variant For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))  If LenB(StrConv(c.Value, vbFromUnicode)) = LenB(c.Value) Then    c.Offset(, 1).Value = "OK" '全角   Else    c.Offset(, 1).Value = "NG" '半角  End If Next c End Sub Sub Test2() Dim c As Variant For Each c In Range("A1", Cells(Rows.Count, 1).End(xlUp))  If StrConv(c.Value, vbWide) = c.Value Then    c.Offset(, 1).Value = "OK" '全角   Else    c.Offset(, 1).Value = "NG" '半角  End If Next c End Sub

関連するQ&A

  • Excel VBAで半角

    Excel VBAで半角 A列が半角のときに、B列にoと表示させるために下記のソースを考えたのですがうまくいきません。初歩的な質問だとは思いますがよろしくお願いします。 Sub 半角判定() Dim i For i = 2 To Range("g65536").End(xlUp).Row If Application.Len(Cells(i, 1)) = Application.LenB(Cells(i, 1)) Then Cells(i, 2) ="o" End If Next End Sub

  • 【Excel VBA】A列の全角・半角文字をチェック

    【Excel VBA】A列の全角・半角文字をチェック Excel VBAの初心者です。 仕事で必要なため、教えていただけると助かります。 【やりたいこと】 Excel VBAで、入力が完了したExcelシートのA列(A1からA10)が、 半角のみであること、または全角が入力されていないこと、を チェックしたいです。 半角以外の文字があった場合は、メッセージを表示します。 また、半角以外のセルがあった場合は、そのセルの色を水色にします。 入力チェックの方法は、ボタンにマクロを登録して、 そのボタンを押下することで行います。 以下に、僕が試したプログラムを記します。 アドバイスをいただけると幸いです。よろしくお願いします。 Sub 入力チェック() Dim cellValue As String Dim strANSI As String Dim i As Integer For i = 0 To 10 cellValue = Cells(1, i + 1) strANSI = StrConv(cellValue, vbFromUnicode) If Len(cellValue) = LenB(strANSI) Then MsgBox "セルは半角のみ" myColor = 8 Else MsgBox "セルの内容は全角のみ" End If MsgBox "セルの内容は全角と半角があり" Next i End Sub

  • 全角・半角混在の文字列から半角文字のみ取り出す

    エクセル勉強中です。問題集で理解できないところがあります。 数式がどういう意味をもつのか教えて頂けるとありがたいです。 よろしくお願いします。 画像添付の問題になります。 A列に製品名が入っています。(製品番号:半角文字)(製品名:全角文字) B列に半角文字の製品番号だけを取り出しなさいというものです。 半角文字の開始位置がバラバラになっているところが問題のポイントになっています。 回答ですが B2: =MID(A2,MATCH(1,INDEX(LENB(MID(A2,COLUMN(2:2),1))*1,0),),LEN(A2)*2-LENB(A2)) こちらで半角文字のみ取り出せるようです。回答には数式のみで何故この関数を使うのか? 使うことでどういった結果を導くなどの解説が一切ありません。(ちなみに出版会社の便利技的な問題集です) MID関数で製品名A2から開始位置を指定して、全角半角をLEN関数LENB関数で半角文字数を 算出して文字列を抽出するという事は理解できます。 ただ、この開始位置の指定の所が理解できません。 数式を分割してみましたが =MID(A2,COLUMN(2:2),1)の所はどの行も製品名の1文字目ですよね・・・ その値にLENB関数で文字数? 数式の検証で見てみると配列のような結果が次々と現れて・・・ MATCH関数もありますしINDEX関数が何か関係しているような気はしているのですが、 INDEX関数と言えば配列に行番号・列番号と例えば表の該当するセルの位置抽出の 知識しかありません。一つのセルでINDEX関数? すいません。独学で勉強していてこの程度の知識ですが、この数式の考え方教えてくださる方よろしくお願いします。

  • PHPでの全角、半角判断について

    PHP5にて、入力フォムから入力された文字を全角か半角か判断しています。 半角だとフラグを立ててエラーにしております。 しかし、「ソ」だけ全角で入力しても 半角と判断されてしまい困っております。 0x5c と関係していると思うのですが 対処方法がわかりません。 ご教示頂けると助かります。 //名前(性)フリガナ if($_POST['name3'] == ""){ echo "【名前(性)フリガナ】が未入力です。<BR>"; $errflg = 1; } $len = strlen($_POST['name3']); $mblen = mb_strlen($_POST['name3'], "Shift_JIS") * 2; if($len != $mblen){ $errflg = 1; } 以上、宜しくお願いいたします。

    • 締切済み
    • PHP
  • エクセルvba カタカナは全角、それ以外は半角に

    セルにはカタカナ、数字、漢字、文字がすべて混在しています。 カタカナは全角に、カタカナ以外(数字や記号)は半角に統一しようかと思っています。 一度すべてを半角にし、カタカナだけ全角に戻そうかと考えました。 Sub test() Dim e As Range Dim f As Integer Dim rData As Variant, ansData As Variant Range("A1:A10").Select For Each e In Selection ansData = "" For f = 1 To Len(e.Value) rData = StrConv(e.Value, vbNarrow) If Mid(rData, f, 1) Like "[ア-ン]" Then ansData = ansData & StrConv(Mid(rData, f, 1), vbWide) Else ansData = ansData & Mid(rData, f, 1) End If Next f e.Value = ansData Next e End Sub しかしこれでは、 「ッ」「ァ」など小さい文字や、「ー(長音)」が半角から全角に戻りません。 また、「ズ」など濁音が「ス゛」と2文字になってしまいます。 これらの正しく変換されないものをすべて列挙し、Replaceなどを使って修正するしかないのでしょうか? 実は最初に、すべてを「全角→半角」にするようマクロ作成したのですが、半角にする文字をReplaceですべて列挙しるのは大変だと思い、「半角→全角」にしたらうまくいくかと思ったのですが、それでもうまくいきませんでした・・・ よろしくお願いします。

  • 半角文字と全角文字の区別

    以下のように、Stringに文字列を読み込んで、 400文字(半角)以上の場合は、メッセージを出したいのですが、 全角でも400文字まで、NGになりません。 どうすれば、判定できるのでしょうか? 教えて下さい。 例 JTextArea txtArea = new JTextArea(); String memo = txtArea.getText(); if(memo.length()>400){ // 400文字(半角)以内にして下さい。 // NG ! }else{ // OK ! }

    • ベストアンサー
    • Java
  • 列ごとに全角英数・全角カナ・半角カナしか入力できないフォーマットをつくりたい

    エクセルで基本フォーマットを作り、他の人に配布&入力してもらった後、全てを集計&データベース化する必要があるのですが。 各列に設けた項目により、‘全角英数のみ’‘全角カナのみ’‘半角カナのみ’の入力規則を設けた後、ロックをかけてみたのですが、変換できてしまう…? 全角英数&カナに関しては【=LEN()*2=LENB()】で逃げれたように思うのですが、‘半角カナのみ’の入力設定がわかりません…;; ちなみに、別の列に入力したものを数式で半角に変換する方法は、今回のフォーマットには使いたくないのですが…?? どなたか、お助けください…**

  • 全角と半角を確認するには

    受け取ったデータ表の中で全角と半角が入り混じっている場合、セルによっては半角「A」とか全角「A」に入力モードが切り替わって判別できるものもありますが、全角なのにそのセルをポインタすると半角モードのままというセルもあります。(半角だとカウントせず、全角だとカウントされるので全角だと判断できます) どうしてなのか実験してみたところ、全角で入力後に半角での入力規則を設定しているみたいです。 この判別を簡便にする方法はありますか。 全角か半角か判別して回答をしてくれるような数式はありますか? (例えば、作業列に「全」「半」などと表示されるような) データの種類が多いため意図的に全角、半角の使い分けを入れている箇所もあるようなのですが。

  • \はエクセルでは全角?

    半角文字の\はエクセル(VBA)では全角扱いなのでしょうか? 添付のマクロを実行すると結果は"全角だろう"になります。 \はStrConvでvbWideを指定しても全角になりません。 全角の¥はStrConv/vbNarrowで半角になります。 どういう理由でこうなっているのでしょうか? \以外にもこのような文字があるのでしょうか? ご存知の方、教えていただけないでしょうか。 Sub Macro1() ch1 = "\" ch2 = StrConv(ch1, vbWide) If ch1 = ch2 Then Debug.Print "全角だろう" Else Debug.Print "半角だろう" End If End Sub

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

    Excel2002です。 VBAでセルの文字列を取得する時に全角制御文字(2バイト)を含めて22バイトの制限を考慮したいのですがその方法がわかりません。 全角文字だけなら10文字、  半角文字だけなら22文字の取得ができます。 その後の作業の都合上、22バイトを基準に条件判断したいのですが現在はその方法がわからないためLEN()で10を上限としています。LENB()でも同じ結果(文字数が返される)になります。 対象のセルには全角文字/半角文字が混在しており、全角-半角-全角-半角のような混在であれば制御文字を2回考慮する必要があります。 最悪その文字が全角か半角かの区別がつけば対応できると思います。 よい方法をご教授いただきたくお願いいたします。

専門家に質問してみよう