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
貴重なソースを拝見させていただきありがとうございました。
私のレベルでは、ちょっとツラかったので・・・
結局、全角に変換して、変換前と変換後の文字列のバイト数を比較してメッセージを表示するというコーディングで逃げてしまいました(笑)
しばらくソースと格闘していましたので、直ぐにお礼が書けず失礼いたしました。
無事納品できました。ありがとうございました。
No.6
- 回答日時:
#4です。
#5を見てビックリ。私のことではないですか。#4は#3さんのご回答を見て言ったものでは決してありません。ましてエラーがあるとか言っておりませんので悪しからず。
先日の他の質問No。609165の自分の回答のことが頭にあリ、また昔から半角の濁点半濁点のお陰でコードが長くなるのがいやでした。「破綻する」と言ったのは、濁点半濁点については、(濁点半濁点付きでない文字は、コードの計算だけだとすっきりして好みなんですが、それとは別の、)まったく別のロジックを持ち出さないと、対処できないと思い、そう述べたもので、私個人が2元化するのが好きでなかっただけです。
併せてご質問者には、本件結果として余分な書入れをすることになり済みません。
No.5
- 回答日時:
> 文字コードで判別し文字コードの半角全角のコードの規則性を使うやり方は、濁点半濁点で破綻します。
最低限、他の人のコメントの内容ぐらいは眼を通さないと、軽率で洞察力に欠けると思われても仕方がないのではないでしょうか?(苦笑)
老婆心ながら誤解のないように補足しますと「眼を通す」というのは、単純に眼で眺める(スキャン)だけではなく、文章の内容を咀嚼し(字句解析)、消化する(コンパイル)という意味です。
# コメントすべきか否か迷いましたが、参考になれば幸いです。
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文字)
勝手に変換してしまうのでなく、「全角に変換するよ」という確認メッセージも表示させたかったのです。
で結局、No.3の方のお礼にも書いたのですが、
StrConvで全角に変換して、変換前と変換後の文字列のバイト数を比較してメッセージを表示することにしました。
おかげさまで無事解決です。ありがとうございました。
No.1
- 回答日時:
> あるセルの値が半角カタカナであった場合
ASCIIコードで、0xA1 ~ 0xDF(161 ~ 223)の範囲なら半角カナです。
> 半角カタカナ→全角カタカナに自動修正させたい
StrConv(Arg, vbWide)
で可能です。
この回答への補足
ご回答ありがとうございます。
以下のように記述してみたのですがうまくいきません。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- その他(Microsoft Office) 英数字のみ全角から半角に変換 4 2023/07/28 14:48
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) EXCELでの文字・数字入力の基本について教えてください。 2 2023/05/29 23:17
- Excel(エクセル) Excel でマクロ利用しセル内テキストを修正しております(半角カナを全角にするなど)。 ただ、セル 4 2023/06/15 21:29
- その他(ゲーム) Switchで半角カタカナを入力したい 1 2022/06/04 15:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規表現 文中空白可能
-
なぜインターネットでは半角カ...
-
全角英数文字が嫌われる理由を...
-
全角半角変換 C++/CLI
-
文字の入力で横バー上段、中断...
-
VBAのコマンドボタンの文字列の...
-
awkの BEGIN{RS=""} で空行を削...
-
fputsで改行できない
-
PHPで<a>タグ内からURLと文字を...
-
ソースコードの1行が長いとき...
-
コンボボックスの項目中に改行を
-
「続行するには何かキーを押し...
-
タグにはさまれている文字以外...
-
VBA テキストボックスの行数取得
-
SQL Serverで文字コードUTF-8
-
正規表現で記号 & アンドの検索...
-
正規表現で特定のHTMLタグのク...
-
PHPで変数から1行目だけを取得...
-
テキストファイルから改行コー...
-
ファイルから読み取った改行文...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスで1025文字...
-
文字の入力で横バー上段、中断...
-
Excel関数「COUNTIF」で”文字”...
-
エクセルのCOUNTIFが正しくカウ...
-
全角括弧と全角読点の間隔を狭...
-
半角記号、全角記号を含む正規...
-
特定の文字を簡単な操作で半角...
-
全角英数文字が嫌われる理由を...
-
VBAで英数字入力チェックしたい。
-
エクセルでの漢字、カタカナ、...
-
全角半角変換 C++/CLI
-
XMLのタグ名の禁則文字
-
VBScriptである文字列に半角文...
-
記号は半角と全角どちらがよい...
-
文字列中の両丸括弧を取り除くV...
-
パソコンで全角、半角文字の切...
-
HTML5の「pattern」属性で前後...
-
Replace関数は文字数の制限ある...
-
Excel2002 一桁数字だけ全角に置換
-
エスケープ文字にstr_replaceが...
おすすめ情報