質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • Excel

    2105questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

Excelの入力規則が破られてしまう

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 10K+

null368

score 24

Excelの入力規則を使って、プルダウンを作りました。

普通に、プルダウンの中の項目以外を入力するとアラートが表示され、
入力が拒否されるのですが、入力セルで、右クリック→「ドロップダウンリストから選択」から入力すると、
リストにない項目でも入力されてしまいます。

これを回避する方法はあるのでしょうか。
よろしくお願いします。

A4がプルダウンになっている。
イメージ説明

普通に「あ」と入力すると拒否される
イメージ説明

右クリック→「ドロップダウンリストから選択」から入力すると入力が成功する
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/11/01 13:44

    こちらの質問が他のユーザから「プログラミングに関係がない質問」という指摘を受けました
    teratailでは、プログラミングに関して困っていることがないと思われる質問を推奨していません。
    「質問を編集する」ボタンから編集を行い、具体的に困っている理由や解決したいことを明確に記入していただくと、回答が得られやすくなります。

  • rura

    2016/11/01 13:47

    差し支えなくば、ソースコードをご記載下さい

    キャンセル

  • null368

    2016/11/01 13:52

    すみません。Excelメニューバーの「データ」>「データ入力規則」で作成したので、ソースコードはありません。

    キャンセル

回答 3

checkベストアンサー

+4

これってExcelのバグなんですかね?
対策として3つ考えました。

  1. 対象セルの上に空セルを入れる(入力されたセルが連続しているとドロップダウンリスト化されてしまうので)
  2. VBAで入力チェックを行う(Changeイベントで)
  3. 「ドロップダウンリストから選択」メニューを無効化する

1番がお手軽かなと思います。
レイアウト上無理だとしても、空行を追加して非表示にしておけば良いですし。


追記
2のサンプルコードを書いておきます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 1 Then ' チェック対象にするセルを指定
        If Target.Validation.Value = False Then
            MsgBox "入力エラー", vbCritical
            Application.Undo ' 入力前の状態に戻す
        End If
    End If
End Sub

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/04 16:00

    ご回答ありがとうございます!
    説明不足で申し訳ないのですが、もし不適切な値が入力された場合は、入力された瞬間にアラートを出したいです。それもVBAで可能なのでしょうか?

    それと、セルのコピー&ペーストの抜け道は、許容範囲なので、ttyp003さんの「ドロップダウンリストから選択」メニューを無効化する の詳細が気になります。

    キャンセル

  • 2016/11/07 09:14

    すみません、回答遅くなりました。
    コピペが許容範囲でリストから選択は許さないというのは矛盾してそうですが、とりあえずご要望のメニューの無効化です。
    Application.CommandBars("Cell").FindControl(, 1966).Enabled = False
    これで無効化はできますが、Excel全体に効いてしまいますので、対象のブック以外も同時に開くことがあるのであれば、こまめな制御が必要になります。
    ブック単位の制御でよければWorkbook_OpenイベントとWorkbook_BeforeCloseイベントにでも入れて、TrueとFalseを制御すればOKです。

    キャンセル

  • 2016/11/07 09:53

    対策2のコードを追記しておきましたので参考にしてください。

    キャンセル

+3

個人的には「ドロップダウンリストから選択」よりも「値の貼り付け」の方がよく使われている、難易度の低い操作な気がするので。
異常値を「ドロップダウンリストから選択」で入力する行為はNG、異常値を「コピーして値の貼り付け」はOKという部分がちょっと引っ掛かりました。

コピペなんてしない(できない?)のなら話は分からないでもないのですが。。

一応、参考までにセル入力値のチェックを行うサンプルを提示します。
(ttyp03さんの②案です。)

Dim oldCell As Range    'チェック対象セル

'セル移動イベント
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If oldCell Is Nothing Then
        'チェック対象セルが未設定の場合
        '今回の移動後のセルを次回のチェック対象セルとして保管して処理終了
        Set oldCell = Target
        Exit Sub
    End If

    If oldCell.Column = 1 Then
        'A列なら入力規則に反していないかをチェック
        If oldCell.Validation.Value = False Then
            'NGの場合、メッセージを表示
            MsgBox "範囲外の値です。"

            'チェック対象セルにフォーカスを戻す
            oldCell.Select
            Exit Sub
        End If
    End If

    '移動後のセルを次回のチェック対象セルとして保管
    Set oldCell = Target
End Sub

今回はVBAタグではなくExcelタグでのご質問でしたので、出過ぎた真似だったかもしれませんが、参考になれば幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/07 10:01

    ちょうどttyp03さんからも提示があったようで、ほんと出過ぎた真似だったかもしれません(^_^;

    キャンセル

  • 2016/11/09 13:22

    とんでもないです!
    ありがとうございました!

    キャンセル

0

最初に、前回の私の回答が完全に的外れな回答であったことを訂正してお詫びします。
大変申し訳ございませんでした。

改めて、こちらでも色々調べましたが、どうやら

  1. データの入力規則で設定した「リスト」
  2. 右クリックの「ドロップダウンリスト」

はお互い全く異なるものであるため、入力規則のリスト設定値以外のデータが
入力されてしまう、ということが分かりました。

1.のリストは特定のセル範囲内の任意の値を入力するものですが、2.のリストの場合は
「同じ列のデータの中から任意のデータを連続して入力する場合」に利用する際に
利用できるものです。
参考:「インストラクターのネタ帳」の「リストを作らずにドロップダウン−ドロップダウンリストから選択」より

2.の場合、提示された例では「あ」「壱」というリストが表示されて、それからの入力となるはずです。

このため、入力規則の「リスト」とは異なる値が入力可能となる、というもので、
Excelのバグではなく、ある意味「表現が紛らわしいが、入力には便利な」機能です…。

回避方法ですが、ttyp03様やJawa様のマクロが一番効果的かと思われます。
(イベントプロシージャ等を利用していますので、これでしたら目的を達成可能かと。)

該当のコンテキストメニューを一時的に削除する、という非常に乱暴なやり方も考えたんですが、
これはExcelのデフォルトのメニューでやると非常に危険ですので絶対に行なわないようにして下さい…
(Excelのインストールやり直し等の良くない事態を招きますので。)
→この件ですが、

CommandBars("Cell").Controls("ドロップダウン リストから選択(K)").Delete


で一旦削除し、ブックを閉じる段階で

CommandBars("Cell").Reset


で戻す事を想定したものです。

ttyp03様のコードは私も知りませんでした…。己の未熟さを恥じるばかりです…。

ttyp03様へ
御提示のコマンド、大変参考になりました。ありがとうございます。
と同時に、横入りしながら的外れな回答をしてしまい、大変申し訳ございませんでした…。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Excel

    2105questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。