• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル入力規則のマクロについての質問です。)

エクセル入力規則のマクロについての質問

このQ&Aのポイント
  • エクセル入力規則のマクロについて質問です。excel2003 os=WindowsXP の環境で、E列の10行目から57行目、I列の10行目から60行目に1から9999までの数字のみ入力可能の条件を設定しようとしていますが、プログラムが正常に動作しません。
  • RangeメソッドとSelectionオブジェクトを使用して、セル範囲を指定し、Validationオブジェクトを使用して入力制限を設定しています。しかし、上手く動作していません。
  • 要件としては、E列とI列の指定された範囲には、整数のみ入力可能とし、入力数値の制限は1から9999までとなっています。現在のプログラムでは、この要件を満たすことができません。どのように修正すれば良いでしょうか。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

回答2、myRangeです。 原因は、 >シートは、1つだけで、 このシートが1枚しかないというところにあります。 シートが1枚しかないと、そのシートのActivateイベントが発生しないのです。 で、WorkSheet_Activateイベントは削除して 入力規則設定のコードを次の2つのどちらかに書いてください。 (1)標準モジュールにAuto_Openプロシージャを作成しそこに書く Sub Auto_Open()   ここに質問者のコード End Sub -------------------------------------------------------------- (2)ThisWorkBookモジュールのWorkBook_Openイベントに書く Private Sub Workbook_Open()   ここに質問者のコード End Sub ------------------------------------------------------------- ●覚えておくこと● シートが一枚の時は、そのシートのActivateイベントは発生しない! 以上です。

090303kan
質問者

お礼

myRange様 ありがとございます。 正常に動作しました。 基本がなってなかったってことですね。 助かりました。

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

2つのことが考えられます。 (1)一つ目は、このコードを該当シートとは別なシートモジュールに書いている場合 例えば、入力規則をセットするシートを"Sheet3"だとして、 このコードをSheet3以外のシートモジュールに書いてしまった。 同じことですが、、 このコードをちゃんと"Sheet3"のモジュールに書いたのに 入力規則がセットされたどうか別なシートで確認している。 (2)二つ目は、このコードを標準モジュールに書いている場合 恐らく、(1)の方だと思いますが。。。。 そこらを確認してみたらどうでしょう。 以上です。  

090303kan
質問者

お礼

myRange様 ありがとうございます。 MicrosoftExcelObjectsのSheet1(入力)に CommandButton1_Click()、 Worksheet_Change(ByVal Target As Range)、 Worksheet_Activate() の3つがあり、 標準モジュールに CommandButton1_Clickをクリックしたときに呼ばれるマクロがあります。 シートは、1つだけで、CommandButton1をクリックした後に シートが増えて増えたシートの内容をCSVに出力し、 増やしたシートを削除しています。

  • Hardking
  • ベストアンサー率45% (73/160)
回答No.1

入力値の最小値/最大値の制限だけことならば 別案として、VBAではなくエクセルの入力規則設定ではどうでしょうか。 1.該当セルの範囲指定する。 2.メニュー項目「データ」→「入力規則」を選択し入力規則ダイアログを開く。 3.条件の設定をする。    入力値の種類:整数    データ   :次の値の間    最小値   :1    最大値   :9999 空白を無視する:チャックオフ

090303kan
質問者

お礼

Hardking様 ありがとございます。 VBAでできればと思ったので。

関連するQ&A

専門家に質問してみよう