- ベストアンサー
Excelで入力文字を制限
- Excelで入力フォームを作成している際、使用文字をShift-JISに制限する必要がありますが、具体的な入力制限は難しいため、Unicode文字を使用している場合にエラー判定を返す方法を模索しています。
- VBAを使用してセルの変更を監視し、変更内容を文字コードごとに判定する方法を考えていますが、他にも有効な方法があれば教えていただきたいです。
- バージョンが複数人で使用されるため不特定であり、2002〜2013までのバージョンに対応する必要があります。後工程でShift-JISしか使用できない環境があり、それに合わせて入力文字を制限する必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。#3の回答者です。 興味を以っていただけてありがとうございます。 >> 今は、文字は、Unicodeだけではないからです。 >勉強不足のため、この意味がよく分からないです。 当初は文に理由を書いたのですが、知ったかぶりして書いても、突っ込まれたら自信がないので、省略してしまいました。 ずいぶんこだわりをもって勉強したのですが、すっかりわからなくなってしまいました。本音をいうと、自分で作ったはずの今回のコードも、前の記録からで、なぜ、そう書いたのか、よくわからないのです。(^^; Excelのワークシートに書き込めるかは確かめたことがないのですが、今は、JIS第3水準とかJIS第4水準とかあるのですよね。それを判別するコードを作ったことがあるのです。Unicodeとは違うものです。 こんな書き込みを見つけました。 JIS第三、第四水準の漢字は入力可能になったか? http://okwave.jp/qa/q8173824.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
その他の回答 (3)
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 ご存知のとおり、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だけではないからです。 勉強不足のため、この意味がよく分からないです。 教えて頂けると幸いです。
- FEX2053
- ベストアンサー率37% (7995/21381)
Excel上で、どうやってUnicode文字を入れるんでしょうか? 普通に「画面上で入力」すれば、Shift-Jisしか入らないと 思うんですが・・・。 何らかの文字列をコピペされるなら話は別ですけど。
お礼
ご回答ありがとうございます。 複数人で使用するので、いろいろな方法で入力されてしまいます。 仰る様なコピペもそうですし、文字パレット、手書きパレットなども使用されます。 そうした入力方法は禁止出来ませんし、 禁止しても必ずやる人は出てきてしまいます。 いかなる方法での入力であっても、チェック出来ないか、と考えています。
- aokii
- ベストアンサー率23% (5210/22063)
完全な制限は無理です。
お礼
ご回答ありがとうございます。 完全には無理ですか。 それでは、もし不完全でも良いとするなら、 何かいい方法はありますか?
お礼
再度のご回答ありがとうございます。 > Excelのワークシートに書き込めるかは確かめたことが > ないのですが、今は、JIS第3水準とかJIS第4水準とか > あるのですよね。それを判別するコードを作ったことが > あるのです。Unicodeとは違うものです。 そういえばそんなものもありました。 ご提示頂いたページにも、 > JIS第3・第4水準はUnicodeアプリケーションでしか使用できません。 とある様に、これも対策しないと駄目ですね。 助かりました!!