
はじめまして。
現在、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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
51以降の数字を囲い文字(〇)...
-
浩→右上が「牛」
-
ネ + 喜 =ネ喜 ってなん...
-
次の漢字の旧字をどうやったら...
-
「裕」という字の左側が「示」...
-
「芳」という字の旧漢字を出すには
-
キーボードで四角1を打つには...
-
漢字が出ません。
-
漢字に詳しい方教えて下さい。
-
合資会社の省略記号について
-
マだれの中に「黄」を書く「広...
-
外字有無ってなんですか? また...
-
「角」という漢字で真ん中の線...
-
「ころもへん」に「ゆたか」
-
旧漢字
-
「蓮」のフォント
-
吉田の吉のつちへんの下のなが...
-
工業の工の字ですが古い字で縦...
-
漢字について質問です。
-
丸囲み文字を外字エディター画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
浩→右上が「牛」
-
51以降の数字を囲い文字(〇)...
-
ネ + 喜 =ネ喜 ってなん...
-
「芳」という字の旧漢字を出すには
-
「裕」という字の左側が「示」...
-
キーボードで四角1を打つには...
-
漢字が出ません。
-
旧漢字
-
次の漢字の旧字をどうやったら...
-
漢字について質問です。
-
外字有無ってなんですか? また...
-
マだれの中に「黄」を書く「広...
-
Excel上でどれが外字か調べたい
-
工業の工の字ですが古い字で縦...
-
「角」と言う字の真ん中が突き...
-
PとLが重なった記号
-
「ころもへん」に「ゆたか」
-
Excelのセルに横線
-
旧漢字の入力(外字登録以外)方...
-
21以上の数字を○で囲む方法
おすすめ情報