ABC
1 あ       左のようなセルを使ってツリー状にした表から
2  AAA    別シートにコンボボックスを横に3つ作成して
3  BBB    ”あ”を選択したら隣のボックスに”AAA”
4   111   と”BBB”の選択肢が現れ、”BBB”を選
5   222   択したらその隣のボックスに”111”と”222”
6 い       の選択肢が現れる といったことが出来ないでしょ
7  aaa    うか?
8   333   
9  bbb    説明がやっかいだと思いますので、「こんな本で見た」
          という覚えがある方がいらっしゃいましたら是非教えて
          下さい。お願いします。

A 回答 (3件)

質問通りの縦型の表を元に入力規則で対応してみました。

実際行ってみて、1つの深さに3列要していますので数十の深さまでは対応できそうですね。(Excel97で確認)

Sheet1のどこか3つのセルに、DATA1、DATA2、DATA3の名前を付けます。
ここに入力規則のダイアログを表示します。

質問と同じ形式の表をSheet2のA1から3列を使って作成します。

Sheet2に次の算式をコピーします。
(※は表のデータがある最後の行までコピーします。)

 E1:=MAX(MATCH("",A:A,-1),MATCH("",B:B,-1),MATCH("",C:C,-1))

※F1:=COUNTA($A$1:A1)
※G1:=COUNTA($B$1:B1)
※I1:=IF(A1<>"",$E$1-ROW()+1,0)
※J1:=INDEX(A:A,MATCH(LARGE(INDIRECT("$I$1:$I$"&$E$1),ROW()),I:I,0),0)
 K1:=MATCH(DATA1,A:A,0)
※L1:=IF(B1<>"",IF(INDEX(F:F,$K$1,1)=F1,$E$1-ROW()+1,0),0)
※M1:=INDEX(B:B,MATCH(LARGE(INDIRECT("$L$1:$L$"&$E$1),ROW()),L:L,0),0)
 N1:=MATCH(DATA2,INDIRECT("B"&(K1+1)&":B"&E1),0)+K1
※O1:=IF(C1<>"",IF(INDEX(G:G,$N$1,1)=G1,$E$1-ROW()+1,0),0)
※P1:=INDEX(C:C,MATCH(LARGE(INDIRECT("$O$1:$O$"&$E$1),ROW()),O:O,0),0)

 E3:=COUNTA(J:J)-COUNTIF(INDIRECT("J1:J"&E1),"=0")
 E4:=COUNTA(M:M)-COUNTIF(INDIRECT("M1:M"&E1),"=0")
 E5:=COUNTA(P:P)-COUNTIF(INDIRECT("P1:P"&E1),"=0")

挿入→名前→定義で名前の定義ダイアログボックスを出して、名前を3つ定義します。
1つ目、名前:List1、参照範囲:=OFFSET(Sheet2!$J$1,0,0,Sheet2!$E$3,1)
2つ目、名前:List2、参照範囲:=OFFSET(Sheet2!$M$1,0,0,Sheet2!$E$4,1)
3つ目、名前:List3、参照範囲:=OFFSET(Sheet2!$P$1,0,0,Sheet2!$E$5,1)

Sheet1で入力規則を設定します。
DATA1を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List1
DATA2を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List2
DATA3を選択して、データ→入力規則で、入力値の種類にリスト、元の値に =List3

Sheet2は項目数がわからないので縦方向で考えています。質問通りの形式で入力します。
A列が異なり、B列が同じでC列が異なるようなパターンも考慮しているつもりです。
ただ、3つの入力をした後、修正する場合、他に関係なく修正できます。この点を考慮してみましたが、長くなるので省略しています。

また、3つの入力箇所を3列(3列の入力規則)に増やしてみましたが、こういう意味の質問でした?こちらのほうが入力の省力化ができますね。
入力規則ではなく、VBAのコンボボックスで動かすには、
 ListFillRangeをList1、LinkedCellをDATA1 とかにします。

何を行っているかじっくり見ると、飛び離れたデータを1つにまとめているだけの算式でした。
汚い算式ですが、ご参考に。
    • good
    • 0

 いつだったか、このサイトで似た質問を見たことがあります。

かなり感動した記憶があります。

参考URLを見て下さい。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=161673
    • good
    • 0

以下の様な方法で如何でしょうか



【A】選択肢の設定
  Sheet名を『TBL』と仮定して以下の様に指定します
___ A列 B列 C列 D列  E列  F列  G列  H列  I列 
1行目 __ __ __ あ   い   AAA BBB aaa bbb
2行目 あ  式1 式1 AAA aaa 000 111 333 555
3行目 い  式1 式1 BBB bbb 999 222 444 666
4行目 う  式1 式1
5行目 え  式1 式1
・・・
・・・
1)A2~Anセルに最初に表示する値を入力します

2)B2セルに以下の式を入力してB2~Cnの全セルに式をコピー
   =IF(OFFSET($D$1,ROW()-1,MATCH(OFFSET(A$1,A$1,0,1,1),$D$1:$I$1,0)-1,1,1)="","",OFFSET($D$1,ROW()-1,MATCH(OFFSET(A$1,A$1,0,1,1),$D$1:$I$1,0)-1,1,1))

    ●OFFSET関数:OFFSET(基準セル,行変位,列変位,抽出行数,抽出列数)
       基準セル:入力情報の先頭のセル($D$1)に固定
       行変位:現在行-1
       列変位:OFFSET関数でA1からA1の値分下の行のセルを抽出し
           その値でD列以降の1行目の値を検索し
           何番目の列かを決定
       抽出行数:単独セルを取り出すので1
       抽出列数:同上

    ●範囲の指定:$D$1:$I$1
       選択肢を入力した列の範囲の1行目を指定します

    ●参照結果のセルが空白の時の処理
       IF(OFFSET(~)="","",OFFSET(~))として空白時には
       空白をセットします(この処理をしないと0が返ります)

3)D列以降に以下の要領で入力
   1行目:第一・第二のコンボボックスに表示する選択肢の値
   2行目以降:選択肢の値区分名(あああAAAやBBB)に表示される値を入力

【コンボボックスの設定】
1)第一のコンボボックス 入力範囲:$A$2:$A$n リンクするセル:$A$1
2)第ニのコンボボックス 入力範囲:$B$2:$B$n リンクするセル:$B$1
3)第三のコンボボックス 入力範囲:$C$2:$C$n リンクするセル:$C$1
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qスカイツリーの当日券 最新の2013年の現状は?

質問を検索しても2012年の情報ばかりなのですが、 最近のスカイツリーの当日券の並び状況はどうなのでしょうか??週末は混んでいるとは思いますが、平日ならば何時頃にいけばいいでしょうか??実際予約なしで行かれた方、詳しい方よろしくお願い致します。

Aベストアンサー

 今年の2月くらいに行ったのですが、平日の朝一に行けば30分くらいで上れます。
 昼ぐらいには結構な行列が出来てました。

 チケット販売はスムーズなのですが、エレベーター(たしか3基)が詰まるので、そこで人の流れが滞ってしまう感じですね。

Qaaa.bbb.ccc という、「ドット」で区切られた文字列があった場

aaa.bbb.ccc という、「ドット」で区切られた文字列があった場合、この文字列からbbb.ccc だけを取り出す方法を知りたいと思っています。
別の言い方をしますと、右から2つ目のドットの前までを取り出す方法になります。
Excel 2007 でのやり方を教えてください。
どうぞよろしくお願いします。

Aベストアンサー

ドットが最小で1個、最大で3個までの文字でしたら次の式で求めることができます。

=IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=1,A1,IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=2,RIGHT(A1,LEN(A1)-FIND(".",A1)),IF((LEN(A1)-LEN(SUBSTITUTE(A1,".","")))=3,RIGHT(RIGHT(A1,LEN(A1)-FIND(".",A1)),LEN(RIGHT(A1,LEN(A1)-FIND(".",A1)))-FIND(".",RIGHT(A1,LEN(A1)-FIND(".",A1)))),"")))

QTreeView と DOMツリー

C# WPF でプログラミングをしています。

TreeView に XML の階層構造を表示させて、ある項目を選択し、ボタンをクリックするとその項目の子ノードが追加されるようにするプログラムを作っています。

選択した項目(TreeView.SelectedItem(Object型)) を、DOMツリーの要素ノード (XmlElement型) にキャストし、それに新しく作った要素ノード(XmlElement型)をつなげるといったようにしているのですが、その際「挿入するノードは、異なるドキュメント コンテキストのものです。」のエラーが発生してしまいます。

XmlElement tvi = treeView.SelectedItem as XmlElement;
XmlElement item = doc.CreateElement("item");
tvi.PrependChild(item); // エラー発生箇所

※ doc は XmlDocument のインスタンスです。

解決策を教えてください。よろしくお願いします。

Aベストアンサー

TreeViewで試してないので自信なし。

例外出るの。
https://ideone.com/fQ04I
こうすると出ないの。
https://ideone.com/e3HEI

Q日付 =TEXT(C2,"m月d日(aaa)")が=TEXT([@月日],"m月d日(aaa)")

日付を文字列に変換するため
=TEXT(C2,"m月d日(aaa)
と入力していたものが
今見ると 
=TEXT([@月日],"m月d日(aaa)")
となっていました。
数式バーをクリックすると[@月日]は、
画像のように青くなっています。
なぜこうなるのですか

Aベストアンサー

テーブルの構造化参照になっているだけですね。

Excel2007以降 テーブル書式は基本中の基本の使い方なので必ず
勉強して使えるようになっておくべきだと思います。

Qディレクトリツリーの表示

Perlでtreeコマンドのような指定したディレクトリ以下の
ディレクトリツリーを表示(取得)するモジュールなどはないでしょうか。

CPANから探してみたのですが英語の上に実行サンプルが載って
いなかったりと該当するものかどうかの判断ができません。

名前や説明から該当しそうな(?)Perlモジュール
・Dir::Which
・File::CheckTree
・File:Find
・File::Path
・File::Searcher
・Tree::File
など

因みに、環境非依存にしたいのでexecやバッククオートを使用したりは
できません。

Aベストアンサー

確かにいっぱいおかしかったので修正:
sub treelist_ {
my ($dir, $lv) = @_;
opendir my $dh, $dir;
my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh;
closedir $dh;
for my $file (@files) {
print ">" x $lv, "$dir/$file\n";
treelist_("$dir/$file", $lv+1) if -d "$dir/$file";
}
}
sub tree {
for my $dir (@_) {
print "$dir\n";
treelist_($dir, 0);
}
}
tree('.');
これでどうだ.

QエクセルIF関数&選択肢ボックス 多数の条件があるときの解決策を教えてください

過去の質問を見直したのですが、どうも同じ事例をみつけることができなかったので質問させていただきました。なにぶん初心者ですのでよろしくお願いします。

当方の状況としましては経営するお店のレンタル商品の見積書を作成中です。
例.自転車は1日10円,車は1日50円  ・・・他に10種類程有り

(質問)
  A     B   C   D   E   F   G   H
1 項目   数量  単位  単価  小計  数量  単位  合計
2 自転車  1   台   10  10  2   日   20
3 車    1   台   50  50  3   日   150

という表を完成させたいのですが、(1)A列に入力する値はある程度決まった項目なので選択肢から選択できる状態にしたいのです。但し、都度可変できるようにもしたいです。(2)A列に入力された項目に応じてD列の単価に自動的に数値が表示されるようにしたいです。

どなた様かお力をお貸しください。よろしくお願い申し上げます。

Aベストアンサー

準備として、項目と単価を別シート(Sheet2など)に作ってしまいましょう。A列に「項目の読み」B列に「項目」C列に「単価」を1行目から入力し、B列全体を選択して「挿入」→「名前」→「定義」でA列に名前(今回は「項目」とします)を定義します。A列の入力済みのセル(どこでもよい)を選択して、「データ」の「並べ替え」から「昇順」で行を並べ替えておきます。

(1)見積書のA2セルに入力規則を設定します。
A2を選択し、「データ」→「入力規則」の設定を開き「入力値の種類」で「リスト」を選択。「元の値」に「=項目」と入力します。Sheet2で項目を増やしてもドロップダウンリストに反映されます。

(2)見積書D2セルにVLOOKUP関数を組み込みます。
D2セルを選択し「fx」ボタンからVLOOKUP関数ダイアログを表示させ、検索値に「PHONETIC(A2)」、範囲に「Sheet2!A:C」、列番号「3」を入力して「OK」をクリックします。これでA2セルに対応した単価がD2セルに自動入力されますが、A2が空白だと#N/Aが表示され見積書として使えませんので、IF関数にVLOOKUP関数をネスト(入れ子)します。
=IF(A2="","",VLOOKUP(PHONETIC(A2),Sheet2!A:C,3))

項目が漢字だと正しく検索されない場合がありましたので、Sheet2で読み仮名の列を設け、VLOOKUP関数で、見積書のA列からPHONETIC関数によりフリガナを参照しています。

あとは、2行目を必要なだけ、下方へオートフィルでコピーしてください。

準備として、項目と単価を別シート(Sheet2など)に作ってしまいましょう。A列に「項目の読み」B列に「項目」C列に「単価」を1行目から入力し、B列全体を選択して「挿入」→「名前」→「定義」でA列に名前(今回は「項目」とします)を定義します。A列の入力済みのセル(どこでもよい)を選択して、「データ」の「並べ替え」から「昇順」で行を並べ替えておきます。

(1)見積書のA2セルに入力規則を設定します。
A2を選択し、「データ」→「入力規則」の設定を開き「入力値の種類」で「リスト」を選択。「元の値」...続きを読む

Qツリーメニューを2個つづけると

<script type="text/JavaScript">
<!--
function treeMenu(tName){
tMenu = document.getElementById(tName).style;
tMenu.display=(tMenu.display=='none')?"block":"none";
}
//-->
</script>
</head>
<body>
<img src="icon.gif">
<font color="FF6600"><a href="JavaScript:treeMenu('treeMenu1')">GENSUI</a>
<ul id="treeMenu1" style="display:none;margin-top:0px;">
<a href="a.html" target="right">1</a><br>
<a href="b.html" target="right">2</a></ul>

ここまでで1つめ。下から2つめ

<script type="text/JavaScript">
<!--
function treeMenu(tName){
tMenu = document.getElementById(tName).style;
tMenu.display=(tMenu.display=='none')?"block":"none";
}
//-->
</script>
</head>
<body>
<img src="newicon.gif">
<font color="FF6600"><a href="JavaScript:treeMenu('treeMenu1')">ABYSS</a>
<ul id="treeMenu1" style="display:none;margin-top:0px;">
<a href="a.html" target="right">3</a><br>
<a href="b.html" target="right">4</a></ul>


こうすると、2つめの【ABYSS】をクリックすると上の【GENSUI】のツリー『1』『2』がでてきます。(GENSUIを押したときと同じ状態になる)
どうすればちゃんと【ABYSS】をクリックして『3』『4』がでてくれますか?

<script type="text/JavaScript">
<!--
function treeMenu(tName){
tMenu = document.getElementById(tName).style;
tMenu.display=(tMenu.display=='none')?"block":"none";
}
//-->
</script>
</head>
<body>
<img src="icon.gif">
<font color="FF6600"><a href="JavaScript:treeMenu('treeMenu1')">GENSUI</a>
<ul id="treeMenu1" style="display:none;margin-top:0px;">
<a href="a.html" target="right">1</a><br>
<a href="b.html" target="right">2</a></ul>

ここまでで1つめ。下から...続きを読む

Aベストアンサー

誤記(</head>が2つあるとか、<body>が2つあるとか)が山のようにあって、マトモに動くとは思えないけど、一応。

<a href="JavaScript:treeMenu('treeMenu1')">GENSUI</a>

<a href="JavaScript:treeMenu('treeMenu1')">ABYSS</a>
で、treeMenuの引数が同じになってるので、どっちも「1」「2」が出る。

と言うか、これは「GENSUIもABYSSも、最初に見付かったtreeMenu1のidが付いたulタグの選択肢を使いなさい」と指定している。判りやすく言えば「どっちも同じ選択肢を使え、と指定している」って事。

JavaScript:treeMenu('treeMenu1')
<ul id="treeMenu1"
の2つの「treeMenu1」意味をちゃんと理解してないのが原因。

JavaScript:treeMenu('ahoka_anta')
って書いてあったら、これは「ulタグのidオプションに"ahoka_anta"と指定しているツリー選択肢を使いなさい」って意味になる。なので、
<ul id="ahoka_anta">
<a href="a.thml">あほです</a><br>
<a href="b.thml">あほちゃいまんねん</a></ul>
と書いてあれば「あほです」と「あほちゃいまんねん」が出る。

別々のツリーで別々の選択肢を出したいなら
<a href="JavaScript:treeMenu('ahoka_anta')">アフォですか?</a>
<ul id="ahoka_anta">
<a href="a.thml">あふぉ言うな</a><br>
<a href="b.thml">あほちゃいまんねんパーでんねん</a></ul>
<a href="JavaScript:treeMenu('anta_baka')">アンタ馬鹿?</a>
<ul id="anta_baka">
<a href="a.thml">アスカかよ</a><br>
<a href="b.thml">レイの方が好きだ</a></ul>
と、JavaScript:treeMenuの引数とulタグのidオプションを、1対1対応で一致させましょう。

それ以前に、</head>、<body>タグの意味を勉強しよう。このタグ、どっちも「1つのhtmlソースの中に、1つしか書いてはいけない。2個以上書いた時は動作不定」って仕様になってる。

つまり、
<script type="text/JavaScript">
から
</script>
までは</head>タグの前に書かないといけないから、これらも2ヶ所には書けないって事。だって、</head>が1つしか存在出来ないなら「</head>タグの前」も1つしか存在しない。

ツリーメニューに手を出すのは半年ほど早いと思われるので、半年くらいかけてhtmlの基礎を習得し終ってからでも遅くないと思いますよ。

誤記(</head>が2つあるとか、<body>が2つあるとか)が山のようにあって、マトモに動くとは思えないけど、一応。

<a href="JavaScript:treeMenu('treeMenu1')">GENSUI</a>

<a href="JavaScript:treeMenu('treeMenu1')">ABYSS</a>
で、treeMenuの引数が同じになってるので、どっちも「1」「2」が出る。

と言うか、これは「GENSUIもABYSSも、最初に見付かったtreeMenu1のidが付いたulタグの選択肢を使いなさい」と指定している。判りやすく言えば「どっちも同じ選択肢を使え、と指定している」って...続きを読む

Qエクセル 関数 1と入力されたセルの隣の列の値から、一つ前に1と入力されたセルの隣の列の値の引き算

1と入力されたセルの隣の列の値から、一つ前に1と入力されたセルの隣の列の値の引き算をしたいです。
具体的に、添付した画像の表で説明します。
A列は、連続した数値が入っています。
B列には、ところどころに、1が入力されています。(空白のセルが多いです。)
C列には、B列で、1と入力されたセル(例:B6)と同じ行のA列のセル(A6)の値から、B列で、一つ前に1と入力されたセル(B2)と同じ行のA列のセル(A2)の値の引き算をしたいです。
いまのところ、C列の結果は、D列にしめしたような計算で、ひとつずつ計算しています。

C列を、自動的におこなってくれるように工夫したいのですが、どんな関数をつかったらよいかわからないので、教えてほしいです。
補足ですが、行の入れ替え(サイズを変える、等)はしたくないです。(列の挿入はもちろんOKです。)

どうぞよろしくお願いします。

Aベストアンサー

D列を作業用に使用します。D列を最終的には見えないように設定してください。(文字色を白にするなど)
D1セルに「=A1*B1」
D2セルに「=IF(B2<>1,D1,A2*B2)」
D3セルより下はD2セルをコピー
C1セルに「=IF(D1=0,"",D1)」
C2セルに「=IF(D1=D2,"",D2-D1)」
C3セルより下はC2セルをコピー

Qjavascriptでツリー表示

javascriptでツリー表示をしたいのですが、全くの素人で、一番やりやすそうなソースを見つけ、『“tree1”を変更して使用』と説明にはあったのですが、実際には『JavaScript:ok('tree1');"』とアドレスに表示されるだけで、目的のツリー表示をしてくれません。
どうしたら、良いでしょうか?

<SCRIPT language="JavaScript">
<!--
function ok(id){if(document.all(id).style.display == "none"){document.all(id).style.display="block";}else{document.all(id).style.display="none";}}
//-->
</SCRIPT>

<B><A HREF="JavaScript:ok('tree1');">■メニュー</A></B><BR>
<DIV ID="tree1" style="display:none;">
 ┣ あああ<BR>
 ┣ いいい<BR>
 ┣ ううう<BR>
 ┣ えええ<BR>
 ┗ おおお<BR>
</DIV>

javascriptでツリー表示をしたいのですが、全くの素人で、一番やりやすそうなソースを見つけ、『“tree1”を変更して使用』と説明にはあったのですが、実際には『JavaScript:ok('tree1');"』とアドレスに表示されるだけで、目的のツリー表示をしてくれません。
どうしたら、良いでしょうか?

<SCRIPT language="JavaScript">
<!--
function ok(id){if(document.all(id).style.display == "none"){document.all(id).style.display="block";}else{document.all(id).style.display="none";}}
//-->
</SCRIP...続きを読む

Aベストアンサー

idという予約語が引っかかる場合もありますので、念のため変更します。

<SCRIPT language="JavaScript">
function ok(idstr){
var s=document.getElementById(idstr).style;
s.display=s.display=="none"?"block":"none";
return false;
}
</SCRIPT>
<B><A HREF="#" onclick="return ok('tree1');">■メニュー</A></B><BR>
<DIV ID="tree1" style="display:none;">
 ┣ あああ<BR>
 ┣ いいい<BR>
 ┣ ううう<BR>
 ┣ えええ<BR>
 ┗ おおお<BR>
</DIV>

Qチェックボックス・コンボボックス

 エクセルのチェックボックス・コンボボックスについて教えて下さい。
 チェックボックス・コンボボックスを作成しリストから選択すると、リンクするセルには番号が表示されてしまいます。以前は正確にリスト名が表示されていました。
 どこか設定のようなものを変えてしまったのでしょうか?初心者なものでよく分かりません。どうかよろしくお願いします。

Aベストアンサー

以前、コントロールツールのコンボボックスだったのでしょうね。
ListFillRange にリストのソースを入れ、RinkedCell に出力先を入れます。ちょっとなれないと、プロパティは英語だから、使いにくいですよね。

今回は、ワークシート上のフォームで作ったからです。


人気Q&Aランキング

おすすめ情報