• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelで入力文字を制限)

Excelで入力文字を制限

このQ&Aのポイント
  • Excelで入力フォームを作成している際、使用文字をShift-JISに制限する必要がありますが、具体的な入力制限は難しいため、Unicode文字を使用している場合にエラー判定を返す方法を模索しています。
  • VBAを使用してセルの変更を監視し、変更内容を文字コードごとに判定する方法を考えていますが、他にも有効な方法があれば教えていただきたいです。
  • バージョンが複数人で使用されるため不特定であり、2002〜2013までのバージョンに対応する必要があります。後工程でShift-JISしか使用できない環境があり、それに合わせて入力文字を制限する必要があります。

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

  • ベストアンサー
回答No.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

plus_x
質問者

お礼

再度のご回答ありがとうございます。 > Excelのワークシートに書き込めるかは確かめたことが > ないのですが、今は、JIS第3水準とかJIS第4水準とか > あるのですよね。それを判別するコードを作ったことが > あるのです。Unicodeとは違うものです。 そういえばそんなものもありました。 ご提示頂いたページにも、 > JIS第3・第4水準はUnicodeアプリケーションでしか使用できません。 とある様に、これも対策しないと駄目ですね。 助かりました!!

その他の回答 (3)

回答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 '//

plus_x
質問者

お礼

ご回答ありがとうございます。 わざわざコードまで記述頂いてありがとうございます。 やはり、こういうやり方になりますよね。 厳密なチェックは別工程で行いますので、 不完全でもこの方法でやることにします。 > 今は、文字は、Unicodeだけではないからです。 勉強不足のため、この意味がよく分からないです。 教えて頂けると幸いです。

  • FEX2053
  • ベストアンサー率37% (7995/21381)
回答No.2

Excel上で、どうやってUnicode文字を入れるんでしょうか? 普通に「画面上で入力」すれば、Shift-Jisしか入らないと 思うんですが・・・。 何らかの文字列をコピペされるなら話は別ですけど。

plus_x
質問者

お礼

ご回答ありがとうございます。 複数人で使用するので、いろいろな方法で入力されてしまいます。 仰る様なコピペもそうですし、文字パレット、手書きパレットなども使用されます。 そうした入力方法は禁止出来ませんし、 禁止しても必ずやる人は出てきてしまいます。 いかなる方法での入力であっても、チェック出来ないか、と考えています。

  • aokii
  • ベストアンサー率23% (5210/22063)
回答No.1

完全な制限は無理です。

plus_x
質問者

お礼

ご回答ありがとうございます。 完全には無理ですか。 それでは、もし不完全でも良いとするなら、 何かいい方法はありますか?

関連するQ&A

専門家に質問してみよう