• ベストアンサー

ExcelのVBAでカタカナをチェックしたい

ExcelのVBAで、あるセルの値が半角カタカナであった場合エラーとしたいのですが、 セルの値が半角カタカナという条件式の構文がわかりません。 困っています。どなたかお助けくださいませ! また、できることならば、半角カタカナ→全角カタカナに自動修正させたいのですが、 無理ならば上記のエラーチェックだけでもよいです。 もし、こちらもおわかりになる方いらっしゃいましたら教えてください。よろしくお願いいたします。

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

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

  > 具体的なコーディング例を教えていただけませんでしょうか? 参考までに・・・。↓ Option Explicit Option Compare Binary Public Const MaxRow = 65536 Public Const AscKuten As Integer = &HA1 '半角句点のAscii文字コード Public Const AscDakuOn As Integer = &HDE '半角濁音   〃 Public Const AscHanDakuOn As Integer = &HDF '半角半濁音  〃 Public Sub Test(ByRef wkSht As excel.Worksheet, _ ByVal colNumber As Long, _ Optional ByVal startRow As Long = 2, _ Optional ByVal endRow As Long = MaxRow) Dim i As Long With wkSht For i = startRow To endRow .Cells(i, colNumber).Value = KanaWideConv(.Cells(i, colNumber).Value) Next i End With End Sub Public Function KanaWideConv(ByVal strSource As String) As String Dim strTmp As String Dim lngStrLength As Long Dim i As Long If Len(strSource) = 0 Then KanaWideConv = "" Exit Function End If lngStrLength = Len(strSource) '先頭の1文字のみ、別処理。 For i = lngStrLength To 2 Step -1 strTmp = Mid$(strSource, i, 1) Select Case Asc(strTmp) '濁音、半濁音の処理。(直前の文字と2文字1組で処理) Case AscDakuOn, AscHanDakuOn strSource = Replace(strSource, Mid$(strSource, i - 1, 2), _ StrConv(Mid$(strSource, i - 1, 2), vbWide)) 'その他の半角カタカナ。 Case AscKuten To &HDD Mid$(strSource, i, 1) = StrConv(strTmp, vbWide) End Select Next i strTmp = Left$(strSource, 1) Select Case Asc(strTmp) Case AscKuten To AscHanDakuOn Mid$(strSource, 1, 1) = StrConv(strTmp, vbWide) End Select KanaWideConv = strSource End Function Public Function IsHankakuKana(ByRef strSource) As Boolean Dim i As Long IsHankakuKana = True For i = 1 To Len(strSource) Select Case Asc(Mid$(strSource)) Case AscKuten To AscHanDakuOn Exit Function End Select Next i IsHankakuKana = False End Function  

uckey7
質問者

お礼

貴重なソースを拝見させていただきありがとうございました。 私のレベルでは、ちょっとツラかったので・・・ 結局、全角に変換して、変換前と変換後の文字列のバイト数を比較してメッセージを表示するというコーディングで逃げてしまいました(笑) しばらくソースと格闘していましたので、直ぐにお礼が書けず失礼いたしました。 無事納品できました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.6

#4です。 #5を見てビックリ。私のことではないですか。#4は#3さんのご回答を見て言ったものでは決してありません。ましてエラーがあるとか言っておりませんので悪しからず。 先日の他の質問No。609165の自分の回答のことが頭にあリ、また昔から半角の濁点半濁点のお陰でコードが長くなるのがいやでした。「破綻する」と言ったのは、濁点半濁点については、(濁点半濁点付きでない文字は、コードの計算だけだとすっきりして好みなんですが、それとは別の、)まったく別のロジックを持ち出さないと、対処できないと思い、そう述べたもので、私個人が2元化するのが好きでなかっただけです。 併せてご質問者には、本件結果として余分な書入れをすることになり済みません。

すると、全ての回答が全文表示されます。
noname#4564
noname#4564
回答No.5

  > 文字コードで判別し文字コードの半角全角のコードの規則性を使うやり方は、濁点半濁点で破綻します。 最低限、他の人のコメントの内容ぐらいは眼を通さないと、軽率で洞察力に欠けると思われても仕方がないのではないでしょうか?(苦笑) 老婆心ながら誤解のないように補足しますと「眼を通す」というのは、単純に眼で眺める(スキャン)だけではなく、文章の内容を咀嚼し(字句解析)、消化する(コンパイル)という意味です。 # コメントすべきか否か迷いましたが、参考になれば幸いです。  

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

Sub test01() For i = 1 To 10 Cells(i, "C") = StrConv(Cells(i, "A"), 4) Next i End Sub のようなのを試してみて、どう言う不都合があるでしょうか。 4の部分は7種あり、加算したコードを使えます。 文字コードで判別し文字コードの半角全角のコードの規則性を使うやり方は、濁点半濁点で破綻します。(一方は2文字1方は1文字)

uckey7
質問者

お礼

勝手に変換してしまうのでなく、「全角に変換するよ」という確認メッセージも表示させたかったのです。 で結局、No.3の方のお礼にも書いたのですが、 StrConvで全角に変換して、変換前と変換後の文字列のバイト数を比較してメッセージを表示することにしました。 おかげさまで無事解決です。ありがとうございました。

すると、全ての回答が全文表示されます。
  • eipu
  • ベストアンサー率39% (25/64)
回答No.2

StrConv(対象文字, vbWide) を使えば、 全角文字は全角のままで 半角文字は全角になります。 入力文字を必ず全角にしたいだけなのであれば エラーチェックせずに 上記構文だけで事足ります。

uckey7
質問者

お礼

StrConvを使用する事にしました。 ありがとうございました!

すると、全ての回答が全文表示されます。
noname#4564
noname#4564
回答No.1

  > あるセルの値が半角カタカナであった場合 ASCIIコードで、0xA1 ~ 0xDF(161 ~ 223)の範囲なら半角カナです。 > 半角カタカナ→全角カタカナに自動修正させたい StrConv(Arg, vbWide) で可能です。  

uckey7
質問者

補足

ご回答ありがとうございます。 以下のように記述してみたのですがうまくいきません。 If SheetName.Cells(1, 2).Value >= &H161 Then   If SheetName.Cells(1, 2).Value >= &H223 Then     msgRC = MsgBox(ErrMsg, vbOKOnly)   End If End If どんくさい記述で・・・すみません。 もしよろしければ、具体的なコーディング例を教えていただけませんでしょうか? あと、全角カタカナの場合のコードの範囲も教えてください。 すみませんが・・・よろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A