• ベストアンサー

エクセル 日本語入力及び貼り付け規制

エクセルのセルに入力規制をかけて日本語入力は無効にしてあるので、セルに直接入力をすることはできないのですが、日本語が入力をされているセルをコピー&ペーストすると張り付いてしまいます。 この日本語の貼り付けも規制することはできないでしょうか? VBAでも関数でも構いません。 よろしくお願いいたします。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

No.1です >>VBAでも関数でも構いません。 ということでしたので、ある程度のサンプルさえあればいいのだろうと思って、回答したのですが… *M列をクリアした時(=4桁の数字ではない)をエラーとするのかどうか  不明ですが、とりあえずこれはOKということにしてあります。 *前回同様、セル範囲のペーストに対しても、有効となるようにしてあり  ますので、少々長くなっています。  (1セルのみの対応にすれば、もっと間単になります) *不明な部分は適当に推測して作成していますので、質問者様が  思っている動作とは違うかも知れません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim RE As Object, msg As String, flg As Boolean Dim rng As Range, c As Range, c2 As Range '// M列N列に変更が無ければ終了 If Intersect(Target, Range("M:N")) Is Nothing Then Exit Sub Set RE = CreateObject("VBScript.RegExp") '// M列に関するチェック RE.Pattern = "\D" flg = False Set rng = Intersect(Target, Range("M:M")) If Not (rng Is Nothing) Then  For Each c In rng   msg = c.Value   If msg <> "" And (Len(msg) <> 4 Or RE.test(msg)) Then flg = clValue(c, c2)  Next c  msg = ""  If flg Then msg = "M列は4桁の数字でなければなりません" End If '// N列に関するチェック RE.Pattern = "[^!-~|\s]+" RE.Global = True flg = False Set rng = Intersect(Target, Range("N:N")) If Not (rng Is Nothing) Then  For Each c In rng   If RE.test(c.Value) Then flg = clValue(c, c2)  Next c  If flg Then   If msg <> "" Then msg = msg & vbCrLf   msg = msg & "N列には日本語の入力はできません"  End If End If '// 結果の表示 Set RE = Nothing If msg <> "" Then  c2.Activate  flg = MsgBox(msg, vbCritical) End If End Sub Function clValue(c As Range, c2 As Range) As Boolean If c2 Is Nothing Then Set c2 = c clValue = True   '// ClearContentsでChangeイベントが発生することが   '// あるようなので、イベント発生を回避 Application.EnableEvents = False c.ClearContents Application.EnableEvents = True End Function

TENSAW
質問者

お礼

本当にどうもありがとうございました。 ばっちり動いてます。 大変助かりました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 以下は、現在は、Ctrl + V にのみ設定しています。もし、他の貼り付けにも施す場合は、もう少し複雑になります。これは、クリップボードの中を調べて、その中身でもって判定します。 一旦、UserForm を作ってあげ、不必要なら、それを削除しても、DataObject が設定されます。そうして、貼り付けた後、Auto_Open を実行してください。Excelを再起動すれば、同様に設定できます。(現在のマクロでは、Ctrl + V を使った後は、Ctrl + Z が利かなくなります。) '標準モジュール Sub Auto_Open()  Call SetKey End Sub Sub SetKey()  Application.OnKey "^v", "CheckBuf" End Sub Sub Auto_Close()  SetOffKey End Sub Sub SetOffKey()  Application.OnKey "^v" End Sub Sub CheckBuf()   Dim myData As DataObject   Set myData = New DataObject   'UserForm を一旦作ってやると、出来ます。   On Error Resume Next   myData.GetFromClipboard   buf = myData.GetText   If buf <> "" Then     If ActiveWorkbook Is ThisWorkbook And _       Not Intersect(ActiveCell, Range("M3:M50")) Is Nothing Then       If IsNumeric(buf) Then         If CLng(buf) < 1000 Or CLng(buf) > 9999 Then           MsgBox "数字の4桁ではないので、貼り付けできません。"         Else           Selection.PasteSpecial         End If       ElseIf (buf Like "*[ぁ-龠]*") Then         MsgBox "2バイト文字ですから、貼り付けできません。"       Else         Selection.PasteSpecial       End If     Else       Selection.PasteSpecial     End If   End If End Sub

TENSAW
質問者

お礼

Wendy02さん、 いつも御回答ありがとうございます。 この機能はまた違うマクロで使いたいと思っていたものです。助かりました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

VBAでワークシートのチェンジイベントを利用して、値をチェックすれば可能と思われます。条件の不明な部分もあるので、適当にサンプルとして作成しました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim RE, C As Range, C2 As Range, flg As Boolean Set C2 = Target.Cells(1, 1) flg = False Set RE = CreateObject("VBScript.RegExp") With RE  .Pattern = "[^!-~|\s]+"  .IgnoreCase = True  .Global = True End With For Each C In Target  If RE.test(C.Value) Then   C.ClearContents   flg = True   End If Next C If flg Then  MsgBox ("日本語の入力はできません")  C2.Activate End If End Sub *セル範囲を限定していませんので、全セルが対象になっています。  適宜修正してください。 *とりあえず、日本語のあるセルはクリアして選択を移動しないように  していますが、処置は適宜アレンジしてください。 *セル範囲のペースト(実際はないかも)もチェックできるようにして  いますので、多少冗長になっています。

TENSAW
質問者

お礼

お礼欄で済みません。。。 >*セル範囲を限定していませんので、全セルが対象になっています。 すみません、 Columns("N:N") もしくは Range("N3:N50") のセルを限定するにはどうしたらいいのでしょうか? また、上記の Columns("M:M") もしくは Range("M3:M50") に4桁以外の数字しか入力されない方法も教えていただけると助かります。 よろしくお願いいたします。

TENSAW
質問者

補足

fujillinさん、 早速の御回答本当にありがとうございます。大変助かっております。 最終的に下記のようにアレンジして使用しました。ありがとうございます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim RE, C As Range, C2 As Range, flg As Boolean, i As Integer i = ActiveCell.Row Set C2 = Target.Cells(i, 14) flg = False Set RE = CreateObject("VBScript.RegExp") With RE .Pattern = "[^!-~|\s]+" .IgnoreCase = True .Global = True End With For Each C In Target If RE.test(C.Value) Then C.ClearContents flg = True End If Next C If flg Then mymsg = MsgBox("日本語の入力はできません。", vbCritical) Cells(i, 14).Select End If End Sub で、ついでで申し訳ありませんが、Column"13=M"に文字列の数字を入力するのですが、4桁以外のものが入力された時に今回作成いただいたものを応用して使うことはできませんでしょうか? 何分初心者なので申し訳ございません。 お時間ございましたら、よろしくご対応下さいませ。

関連するQ&A

  • エクセルで入力規制をかけたい

    エクセルで入力規制をかけようと思うのですが、以下のような問題が解決できずにいます。良い方法がなかなか思いつきません。心当たりがありましたら、ご教授いただけませんでしょうか。 セルに入力規制をかけて「入力値の種類」を「整数」にしてます。(以下、このセルをAとする)しかし、入力規制されていないセルに10.5と入力されているが、10.5がセルの書式設定で11と表示されている場合、これをコピーして、「形式を選択して貼り付け」-「値」を選択するとAに貼り付けることができてしまいます。見た目は11と表示されていますが、数式バーには10.5と表示されています。これを整数だけに限定したいのですが・・・。 数式バーに表示される値も整数に限定させる方法はないものでしょうか。 「形式を選択して貼り付け」-「値」という方法以外の貼り付けを禁止する必要もあるような気がしています。

  • エクセルの入力規制が適応されません。

    エクセルで入力規制を設定しているのですが、規制されない時があります。 規制されているセルに、規制を超える文字をペーストをした場合に規制が適応されません。規制させる方法はありますでしょうか?もし無いようでしたらいい方法をご存知の方がいらっしゃればお教え願います。 宜しくお願いします。

  • エクセルの日本語入力

    先日ウィンドウズXP(ホームエディション 英語版)とオフィス2000(日本語版)を再インストールしてから、エクセルの日本語入力がおかしくなりました。 再インストールする前は、エクセルのセルの中に直接日本語を入力することができたのですが、今はそれができません。日本語をタイプすると、いったん(突然)出てくる入力用のセルというのでしょうか、それにタイプされ、エンターキーを押すと、エクセルのセルの中に日本語が入力されます。かなり面倒くさいのです。(説明、ちゃんとわかるでしょうか。) 英語は問題なく、直接セルの中に打ち込むことができます。 どなたか、この問題の解決方法をご存知でしたら、ぜひお答えください。よろしくお願いいたします。

  • エクセルの日本語入力が変?

    エクセルで 社員の勤怠表を自分なりに作成して 出面や残業時間、有給休暇などを管理しています。 リンク貼り付けや、たどたどしく関数を入れたりして まあまあの出来栄えのつもりですが、 あるセル列に日本語入力すると 最初の一文字が半角英数で直接入力になってしまい 二文字目から日本語になります。 火曜日  と入れようとすると kあ曜日 木曜日だと mおくようび という具合です。 ならない時もあります。 どなたかよろしくお願いします。

  • エクセル、入力規制のリストについて

    エクセルで毎日の日誌を作成しました。 定型文を入力規制のリストで作成しました。 日誌のフォーマットが毎日同じなので、同じワークシート内に30日分作成したところ、ある一定の量をコピー&ペーストすると【保存時】にエラーが出始めました。 そのエラーとは 追加された書式またはデータの一部が保存されませんでした。 ・保存せずにブックに戻るには[キャンセル]を押します ・この問題を修復せずに保存を続けるには、[OK]を押します ・問題の修復の詳細については、[ヘルプ]を押します [OK]を押して保存するとして、一回エクセルを終了して再度データを開くと入力規制のリストが解除され普通のセルになっています。 [ヘルプ]を押しても[ヘルプ]画面は開きますが何も表示されていません。 ある一定量まではコピー&ペーストしていっても上記エラーは出ませんが、一定量を超えると出てきます。 何故なのか解らなく非常に困っています。 助けてください。 宜しくお願いいたします。

  • Excel入力規制について

    Excelの入力規制について質問します。 A1セルにプルダウンがあり、「いちご、りんご、みかん」の3種類が選択可能な状態とします。 B1セルからB5セルの5セルが入力セルになっており、それらに下記の入力規制を設けたいです。 B1セルには10以下の整数のみしか入力出来ないよう規制を設け、更にA1セルのプルダウンで「いちご」が選択された場合は10以下の整数のうち3と4の入力が不可が不可となる。 知見のある方ご教示頂けると嬉しいです。

  • excelのInputBoxで日本語入力OFFにしたい

    タイトルの通りです excelのInputBoxで日本語入力OFFにしたいのですが、 VBAでIME(MS-IME)を制御できるのでしょうか。 セルへの入力であれば、入力規則で出来るので、 イメージとしては、そんな感じです。

  • エクセルの入力規制について

    エクセルで入力規制のリスト機能を使い、文字入力の手間を省きたいのですが、リストにない項目を入力したいときがあります。 入力規制なので、当たり前ですが、直接入力ができません。 なにかいい方法ないでしょうか。 できるかどうかわかりませんが、セルのB1に入力規制のリストを設定し、A1に「○」を入力した場合のみ、B2が入力規制になるとかいうのもありですが、もっと簡単にできないでしょうか。

  • Excelの形式を選択して貼り付け

    Excelファイルの内容をコピーして別のExcelファイルに ペーストするときにセルの列幅や高さ(結合セル)も ペーストしたいのですが 「編集」の形式を選択して貼り付けでは テキストの形式を選択する画面が表示されます。 条件を指定して貼り付けるにはどうしたら宜しいですか?

  • エクセル 入力規制について

    お世話になります。 エクセルでリストの入力規制を作成しました。メッセージエラーは”停止”にし、文字を入力しようとするメッセージがでて、入力はできないようになっています。 ただ、コピーしたものを貼付けると、規制がかからずリストに載っていないものも入力出来てしまいます。。 値の貼付でも規制がかかり入力を出来ないようにする方法はありますでしょうか? 恐れ入りますがどなたかご教示お願いいたします。

専門家に質問してみよう