重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

はじめまして。

現在、Excel で入力フォームを作成しています。
(バージョンは複数人が使用するため不特定です。2002~2013まで)
後工程でShift-JISしか使用できない環境があるため、
使用文字をShift-JISに制限する必要があります。

とはいえ、実際に入力制限するのは難しいと思うので、
入力結果を判定して、Unicode文字を使用している場合に
何らかのエラー判定を返したいと思っています。

現時点では、VBAでセルの変更を監視し、
変更内容を1文字づつ文字コードを調べていく方法くらいしか思いつきません。

他に何かいい方法がありましたら、ご教授下さい。
宜しくお願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

再度のご回答ありがとうございます。

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

助かりました!!

お礼日時:2014/04/24 12:43

こんにちは。



ご存知のとおり、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
'//
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

わざわざコードまで記述頂いてありがとうございます。
やはり、こういうやり方になりますよね。
厳密なチェックは別工程で行いますので、
不完全でもこの方法でやることにします。

> 今は、文字は、Unicodeだけではないからです。
勉強不足のため、この意味がよく分からないです。
教えて頂けると幸いです。

お礼日時:2014/04/24 07:43

Excel上で、どうやってUnicode文字を入れるんでしょうか?


普通に「画面上で入力」すれば、Shift-Jisしか入らないと
思うんですが・・・。

何らかの文字列をコピペされるなら話は別ですけど。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2014/04/23 07:11

完全な制限は無理です。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

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

お礼日時:2014/04/23 07:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!