- 締切済み
データの入力規則
EXCELのデータの入力規則について質問です。 リストから呼び出して利用しようと思っているのですが、テーブルを使用してデータの増減にも対応したいと考えています。 例えばセルA1にはテーブル1の内容を表示するため「=indirect(テーブル1[列1])」、 セルA2にはテーブル2の内容を表示するため「=indirect(テーブル2[列1])」と指定したとします。 ここでセルA3にはテーブル1とテーブル2を結合した内容を表示するような感じにしたいのですが実現することは可能でしょうか? テーブル1とテーブル2は内容が異なるだけです。 テーブルでは実現不可でも他に方法がありそうであればご教示いただけると助かります。 (データの増減にも対応したい) 以下はテーブルイメージです。 テーブル1 カレー, 300円 牛丼, 350円 カツ丼, 500円 テーブル2 寿司, 1000円 ステーキ, 2000円 食べ放題, 1980円 (セルA3はカレーから食べ放題までをリストにしたい) よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
#2,#5です。 VBAでもやってみました。 A列A2:A10のセルに、入力規則を設定するものとする。 シートのデータ例 D列 E列 支店在り都市 支店無し都市 東京都 小樽市 大阪市 札幌市 名古屋市 青森市 福岡市 栃木市 鹿児島市 秩父市 小牧市 彦根市 D2:D6のセルのデータとE2:E8のセルのデータをリストに出す例 === 標準モジュールに下記をコピー貼り付け実行する.合計100項目以下の例。 Sub Sample4() Dim b(100) i = 1 '-- For Each cl In Range("d2:d6") b(i) = cl i = i + 1 Next '--- For Each cl In Range("e2:e8") b(i) = cl i = i + 1 Next '-- With Range("A2:A10").Validation .Delete .Add Type:=xlValidateList, _ Operator:=xlEqual, _ Formula1:=Join(b, ",") End With End Sub === With Range("A2:A10").Validation 以下はマクロの記録を使ったもの。 ミソは Formula1:=Join(b, ",") 関数では1セルにカンマ区切りデータに集約して、同じようなことを試したが、失敗。上記はうまく動いた。 ーー For Each cl In Range("d2:d6") 以下は、ForEachの繰り返しがあり、泥臭いやり方で嫌だが、他に方法は(小生では)できなかった。 Union、Variant等の配列なども試したが失敗。 リスト数が20も超えたら、ユーザーは探すのが大変で、苦情が出そうだが。
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。 やはり、「入力規則」で「リスト」で「元の値」を、 普通は1列のセル範囲を指定するが, 「別の列を併合したセル範囲を指定したい」ということのようだ。 手入力では、カンマで区切って、項目を入力すれば、ドロップダウンリストに 縦に複数行になって出てくれる。 しかし関数(ユーザー関数でCONCATENATE類似の関数作成)で、カンマ区切りの文字列データを作って、そのセルを設定しようとしても うまく行かなかった。 この点では、関数の結果と、手入力データが、シームレスではない、珍しい経験だ。 色々試したが、達成できなかった。 あとは、 (1)VBAでやる 配列データを指定できるかも。 どうしてもVBAを使わないなら、 (2)関数で2列データを1列データにして、その列を指定する 例 データA データB 結合 a x a b y b c z c d r d e t e u x v y z r t u v C列C2の関数は =IF(ROW()-1<COUNTA(A:A),INDIRECT("A" & (ROW())),INDIRECT("B" &ROW()-COUNTA(A:A)+1)) A,B列を足したセル数を超えたC列の行のセルには、空白にするのは、とりあえず、省いている。 またこの方法は作業列を使う(以外にこれを嫌う質問者が多いことを経験している)。
- msMike
- ベストアンサー率20% (364/1804)
[No.1補足]へのコメント、 》 indirectで間違いはありません。 そうですかぁ~。 「=indirect(テーブル1[列1])」なんてな書式を初めてみて、理解できないままなので、確認させてください。 「テーブル1」は範囲名あるいはテーブル名のこととしても、「[列1]」なんてな指定ができるのですか? もしもアレは単なるイメージだったのなら、実際に使用する書き方はどうするのですか?
- HohoPapa
- ベストアンサー率65% (455/693)
- imogasi
- ベストアンサー率27% (4737/17069)
質問の表現では、内容がよくわからなかった。小生の勘違いの恐れもあるが、見慣れない表現がある。 補足してください。 ーー 確認内容 (1)Excelで (2)入力規則(正確には「データの入力規則」)で (3)「入力値の種類」が「リスト」で (4)「元の値」について、普通は1列や、(1行=稀?)のセル範囲を指定するか それが2列や2行に分かれているということか? たとえば >テーブル1とテーブル2を結合した内容とは? ーー もう一つシートのデータが下記のようにあるとする。別セルに項目がある場合 A列 B列 カレー 300円 牛丼 350円 カツ丼 500円 Excelでは 両方を入力規則の選択対象にできないのでは。 VBAなどのコンボボックス(ただし多列で設計したもの)では、ある行をクリックして選択すると、品名、単価の両方をシートの隣接セルに別々に設定できる。 Excelのデーター入力規則では、それはできないだろう。 ーー リストの項目は、セル単位に分かれて設定されていないとダメと思う。 この点が、小生が間違っていなければ >セルA1にはテーブル1の内容を表示する とは?? 「テーブル」はエクセルの術語でもあるが、それを踏まえて言っているのか? 常識的な使い方か?
補足
imogasiさん、回答ありがとうございます。 説明が不足でわかりづらい内容となってしまい申し訳ありません。 イメージを追加してみたので改めて見ていただければと思います。
- msMike
- ベストアンサー率20% (364/1804)
ひょっとして、 =indirect(テーブル1[列1]) てのは、 =INDEX(テーブル1,,1) と間違えてませんか?
補足
msMikeさん、回答ありがとうございます。 indirectで間違いはありません。 イメージを追加してみたので改めて見ていただければと思います。
補足
HohoPapaさん、回答ありがとうございます。 多分VBAを使えばできるかもしれませんが、最終的な内容のものは客先に渡すものでもあるのでファイル自体にプログラムすることは避けたいところです。 イメージを追加してみたので改めて見ていただければと思います。