
はじめまして。
現在、Excel で入力フォームを作成しています。
(バージョンは複数人が使用するため不特定です。2002~2013まで)
後工程でShift-JISしか使用できない環境があるため、
使用文字をShift-JISに制限する必要があります。
とはいえ、実際に入力制限するのは難しいと思うので、
入力結果を判定して、Unicode文字を使用している場合に
何らかのエラー判定を返したいと思っています。
現時点では、VBAでセルの変更を監視し、
変更内容を1文字づつ文字コードを調べていく方法くらいしか思いつきません。
他に何かいい方法がありましたら、ご教授下さい。
宜しくお願い致します。
No.4ベストアンサー
- 回答日時:
こんにちは。
#3の回答者です。興味を以っていただけてありがとうございます。
>> 今は、文字は、Unicodeだけではないからです。
>勉強不足のため、この意味がよく分からないです。
当初は文に理由を書いたのですが、知ったかぶりして書いても、突っ込まれたら自信がないので、省略してしまいました。 ずいぶんこだわりをもって勉強したのですが、すっかりわからなくなってしまいました。本音をいうと、自分で作ったはずの今回のコードも、前の記録からで、なぜ、そう書いたのか、よくわからないのです。(^^;
Excelのワークシートに書き込めるかは確かめたことがないのですが、今は、JIS第3水準とかJIS第4水準とかあるのですよね。それを判別するコードを作ったことがあるのです。Unicodeとは違うものです。
こんな書き込みを見つけました。
JIS第三、第四水準の漢字は入力可能になったか?
http://oshiete.goo.ne.jp/qa/8173824.html
答えは、「はい!」です。
なお、今回、メッセージだけしか出ませんから、入力した文字を削除した方がよいかもしれません。
'//
Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Target
If VarType(c.Value) = vbString Then
If IsUnicode(c.Value) > 0 Then
MsgBox "Unicodeか外字が含まれています。", vbCritical
Application.EnableEvents = False
c.ClearContents '←削除してしまう
Application.EnableEvents = True
Exit For '←ループから抜け出してしまう
End If
End If
Next c
End Sub
再度のご回答ありがとうございます。
> Excelのワークシートに書き込めるかは確かめたことが
> ないのですが、今は、JIS第3水準とかJIS第4水準とか
> あるのですよね。それを判別するコードを作ったことが
> あるのです。Unicodeとは違うものです。
そういえばそんなものもありました。
ご提示頂いたページにも、
> JIS第3・第4水準はUnicodeアプリケーションでしか使用できません。
とある様に、これも対策しないと駄目ですね。
助かりました!!
No.3
- 回答日時:
こんにちは。
ご存知のとおり、Excel のワークシートは、なぜか、JIS仕様になっていますが、今は、Unicodeだけではなくて、とりあえず、Unicode と外字だけにしておきます。もちろん、ワークシートには、Unicodeは入りますし、出力も可能だと思いますが、Unicodeは、文字コードが取れません。なぜなのでしょうね。Word は、JIS, Unicodeの選択があったはずです。
簡単なイベントを作りました。本格的なものではありませんが、本格的なものは、今は、思い出せません。なぜ簡易版かというと、今は、文字は、Unicodeだけではないからです。IsUnicodeのユーザー定義関数は、入力規則でも可能だと思いますが、少し反応が鈍いかもしれません。
他にも方法があるはずです。
'//
Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Target
If VarType(c.Value) = vbString Then
If IsUnicode(c.Value) > 0 Then
MsgBox "Unicodeか外字が含まれています。", vbCritical
End If
End If
Next c
End Sub
'//標準モジュールでも、使用するシートモジュールでも可
Function IsUnicode(ByVal mChr As String)
Dim i As Long
Dim j As Long
Dim ch As String
For i = 1 To Len(mChr)
ch = Mid(mChr, i, 1)
If Asc(ch) = 63 And Abs(AscW(ch)) > 1000 Then
IsUnicode = 1 'Unicode
Exit For
ElseIf AscW(ch) > -8193 And AscW(ch) < -5887 Then
IsUnicode = 2 '外字
Exit For
Else
IsUnicode = 0 'JIS
End If
Next
End Function
'//
ご回答ありがとうございます。
わざわざコードまで記述頂いてありがとうございます。
やはり、こういうやり方になりますよね。
厳密なチェックは別工程で行いますので、
不完全でもこの方法でやることにします。
> 今は、文字は、Unicodeだけではないからです。
勉強不足のため、この意味がよく分からないです。
教えて頂けると幸いです。
No.2
- 回答日時:
Excel上で、どうやってUnicode文字を入れるんでしょうか?
普通に「画面上で入力」すれば、Shift-Jisしか入らないと
思うんですが・・・。
何らかの文字列をコピペされるなら話は別ですけど。
ご回答ありがとうございます。
複数人で使用するので、いろいろな方法で入力されてしまいます。
仰る様なコピペもそうですし、文字パレット、手書きパレットなども使用されます。
そうした入力方法は禁止出来ませんし、
禁止しても必ずやる人は出てきてしまいます。
いかなる方法での入力であっても、チェック出来ないか、と考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- その他(Microsoft Office) Excelの条件付き書式についての質問です。 2 2022/09/08 01:25
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) ①Excel シートに、「=」を入力したいのですが、shift+「ほ」を押すと、「_」と入力されます 2 2022/04/28 12:59
- Visual Basic(VBA) excelにて、特定の列に数字入力してあれば、入力してある行コピーして 別ファイルに張り付ける 2 2022/08/11 05:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報