[[20090108104951]] 『連動したドロップダウンリストの入力規則について』(kay) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『連動したドロップダウンリストの入力規則について』(kay)
いつも拝見させていただいてます。
検索の仕方が悪いのか、見つけられなかったので質問させてください。

2つのドロップダウンリストを連動してデータ入力ができるようにしたのですが、A1セルで選択した項目によって、A2セルで手入力はできるのでしょうか。

作成したいものは、A1セルでは2項目中1項目を選択し、うち一方はドロップダウンリストから選択(こちらについてはA2セルで選択できるように設定できました)、もう一方はA2セルに0001から9999の数字を手入力できるようにしたいのです。

こういったことは可能なのでしょうか。可能であればご教授いただければ幸いです。
よろしくお願いいたします。


 [入力値の種類]の選択肢に「リスト」が入っていますから、
 「リスト」以外の選択肢と共存は出来ないのではないでしょうか?

 どうしてもやるなら、A1セルが変更される都度、
 2種類の入力規則をマクロでスイッチさせることになると思います。

 >もう一方はA2セルに0001から9999の数字を手入力できるようにしたいのです。
 これは1〜9999までの整数とは違うのですね?
 つまり、『1』や『01』は規則違反になるのですね?そうだとすると、
 「判定式」も「入力の手間」もかなり面倒になる気がします。

 ※ 既に判定式の方は出来上がっているのですか? 

 (半平太)

半平太さんご返答ありがとうございます。

A2セルに表示したいのが、決まった十数個の用語から選んだものか、
0001から9999までの数字(1〜9999までの整数ではありません)のどちらかだったのです。
2つの「リスト」を連動させなくてもやはり「入力値の種類」が違うと難しいのですね。

〉どうしてもやるなら、A1セルが変更される都度、
 2種類の入力規則をマクロでスイッチさせることになると思います。

この方法はどうやるのでしょうか。
2つの「リスト」を連動させなければ簡単にできるものなのでしょうか。

今までA1セル・A2セルを連動させず、A1セルには「リスト」から選択し、
A2セルへは地道にそれぞれの用語又は数字を入力していたのですが、
時間もかかり数が多いと間違いも出てくるので、
もっと簡単な方法がないのかなぁと思った次第です。

また判定式については、なにぶん初心者なもので作れてはいません。

わかりにくい説明ですが、よろしくお願いいたします。

(kay)


 やってみると意外と面倒ですね (^^ゞ

 1.前提(仮定)
 (1)A1セル用のリストは以下2項目とします。(これはご自身で設定済み)
     路線価
     評価倍率

 (2)「路線価」と云う名前でセル範囲が定義され、そこにA2セル用のリストがあるものとします。

 2.手順
  (1) シート見出しを右クリックして「コードの表示」を選択。
  (2) 画面中央の白いところに下記コードをコピペ
  (3) Alt + F11 でエクセル画面に戻る(→これで入力準備完了となる)

 ’コピペするコード (A1セルに「路線価」が入るか、「評価倍率」が入るかで、入力規則を切り替える)
   ↓
 Private Sub Worksheet_Change(ByVal Target As Range)

 Dim Validity
     If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
         Validity = [match(A1,{"路線価","評価倍率"},0)]

         If IsNumeric(Validity) Then
            Application.EnableEvents = False
                 Range("A2").ClearContents

                 With Range("A2").Validation
                         .Delete
                     Select Case Validity
                         Case 1
                           .Add Type:=xlValidateList, Formula1:="=indirect($A$1)"
                         Case 2
                           Range("A2").NumberFormatLocal = "@"
                           .Add Type:=xlValidateCustom, _
                                Formula1:="=(TEXT(A2,""0000"")=A2)*(A2*1>0)*(LEN(A2)=4)"
                      End Select
                  End With
            Application.EnableEvents = True
         End If

 End Sub

 <イメージ図>
  行   __A___  _B_  _C_  __D___  __ E ___    行   ___A____  _B_  _C_  __D___  __ E ___  
   1   路線価            路線価  評価倍率      1   評価倍率            路線価  評価倍率  
   2   図番2             図番1                 2       0001            図番1             
   3                     図番2                 3                       図番2             
   4                     図番3                 4                       図番3             
   5                     図番4                 5                       図番4             
   6                     図番5                 6                       図番5             
   7                     図番6                 7                       図番6             
   8                     図番7                 8                       図番7             

 ※ 入力の手間を省くために、A2の書式は強制的に文字型にセットしております。

 Formulaを追加変更しました。(20:53)
 (半平太)

 考えてみたら、0001〜9999のデータはリストに作れますから、実際に作ってしまったら如何でしょう?
 元の値に Indirect(A1) で連動できます。 これならマクロなしでできますね ^^

 実際の入力は「手入力」で出来ますから、当初の構想通りかと思います。

 (半平太)

すみません(T_T)
せっかくコードを教えていただいたのですが、私の理解度ではついていけず・・・

下のコメントで提案してくださった方にします。
それで、初歩的な質問で申し訳ないのですが、0001から9999のデータのリストはどう作るのでしょうか?
「入力値の種類」を「文字列」にするのでしょうか。
「文字列」で「長さ」を「4」に設定したものは、制限にひっかかってしまいました。

(kay)


 >0001から9999のデータのリストはどう作るのでしょうか? ・・・
 >「入力値の種類」を「文字列」にするのでしょうか。

 「入力値の種類」は「リスト」になります。 

 初めから書きます。m(__)m

 1.A2セル用の「1項目のリスト」は既にできていますね?
   そのリスト全体を範囲選択して、名前ボックス(※1)に1項目と同じ名前を入力してください (前回の例では『路線価』と入力)。
    それでセル範囲の名前定義が出来ます。

     ※1 名前ボックスとは、数式バーの左にあるボックスで、通常セル番地が表示される所です。

 2.「2項目のリスト」の作り方 (例として、K列に作る場合です)
   範囲が広いので、まず、名前ボックスに「K2:K10000」と入力してEnterキーを押下します。
   すると、その範囲が選択状態になりますので、上述1の様に『評価倍率』と入力して名前定義します。

   範囲選択されたままの状態で、セルの書式(表示形式) を 文字列 に設定してください。

   範囲選択されたままの状態で、数式バーに「0001」と入力して、Ctrlキーを押しながら、
   Enterキーを押下します。すると、範囲全部に「0001」が入力されます。

   K2セルを単独で選択して、フィルハンドルをダブルクリックすると「0001」〜「9999」のリストが出来上がります。
   
  3.A2セルに入力規則を設定します。
      ※ A1セルには「路線価」「評価倍率」どちらかが入力された状態にしておいてください。
     また、数字の入力は非常に面倒になりますので、A2セルの書式はあらかじめ「文字型」に設定しておいてください。

   入力規則の設定手順はご存じだと思いますので、略記します。 
    A2セルを選択したら、以下の手順で入力規則を設定します。
   
   「リスト」→『元の値』へ =Indirect(A1) と入力

 以上でA1の項目名に連動して、A2セルのドロップダウンリストが変わります。
 A1が2項目(『評価倍率』)の時は、A2にドロップダウンリストが出ても無視して数字を手入力してください。

 (半平太)

できました\(^o^)/

丁寧に教えてくださったおかげです。
半平太さんには感謝しても感謝しきれません!!
ほんとうにありがとうございました。

(kay)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.