• ベストアンサー

INDIRECTうまくいったのですが次は?

初級の質問ですがよろしくお願いします。 ”データベース”(10000行ほど) A列 には日付   B列~E列 は数値データがあり 分析のため別シートに抽出 頻繁に任意の期間を変えることがあるので =MATCH関数で とりたい期間の始まりの行番号を $A$1に取得し =INDIRECT("データベース!$A$"&$A$1,TRUE) で始まりの1行目は上手くできたのですが、さて2行目からをどうするかで悩んでいます。 いろいろな方法があると思いますが、どうも難しく考えて固まってしまいました。 なるべく短い式にしたいのでアイデア教えてください。 また始まりの行 B列~E列について  =INDIRECT("データベース!$B$"&$A$1,TRUE) または =INDEX(データベース!B:B,$A$1) と思っていますが、やはり2行目から悩んでしまい進めなくなりました。 週末ですがどうかよろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

OFFSET関数ではいかがですか 1行目は =OFFSET(データベース!$B$1,$A$1-1,0) 2行目は =OFFSET(データベース!$B$1,$A$1,0) です ROW関数と組み合わせて =OFFSET(データベース!$B$1,$A$1-ROW()+1,0) のようにすれば行番号で自動で参照先を変更できます

Naodes
質問者

補足

さっそくありがとうございました。 OFFSET関数は始めてですがやってみます。 このケースではいろいろな関数が使えますが、どれを使ったら良いのかは好き好きなんでしょうか? まだボキャもあまりありませんが関数の選択に決め手がよくわからないので参考までに決め方があれば教えていただけるとありがたいと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

noname#79209
noname#79209
回答No.5

#2です。 何度もゴメンナサイ。OFFSETを使う場合、行数のオフセット値の計算は、 $A$1+ROW()-2 ではなく $A$1+ROW()-3 です。従って正しい式は =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-3,COLUMN()-1),"") です。 (今度は大丈夫だろうな<==自分へツッコミ)

Naodes
質問者

お礼

いろいろありがとうございました。 私の未熟なスキルには zap35 さんの回答がわかりやすかったようです。

全文を見る
すると、全ての回答が全文表示されます。
noname#79209
noname#79209
回答No.4

#2です。 全ての数式を1つですますなら、 =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-2,COLUMN()-1),"") でOKですね。 ただし、貼り付けの際は「形式を選択して貼り付け」-「数式」を行わないと 日付の形式が他の列に適用されたり、その逆が起こってしまいます。 それと、#3での回答で「#1さん」と書くべきところを呼び捨てにしてしまいました。 #1さん、ゴメンナサイ。

全文を見る
すると、全ての回答が全文表示されます。
noname#79209
noname#79209
回答No.3

#2です。ゴメンナサイ、#1の言われるようにOFFSETの方がスマートですね。 =IF(($A$1+ROW()-2)<=$B$1,OFFSET(データベース!$A$1,$A$1+ROW()-2,0),"")

全文を見る
すると、全ての回答が全文表示されます。
noname#79209
noname#79209
回答No.2

シート「データベース」が日付順に並んでいるとして、 match(「探したい日付範囲の開始日」,データベース!$A:$A,0)で最初の行番号--->A1 match(「探したい日付範囲の終了日」,データベース!$A:$A,1)で最後の行番号--->B1 がとれると思います。 そこで、 =IF(($A$1+ROW()-2)<=$B$1,INDIRECT("Sheet1!$A$"&TEXT($A$1+ROW()-2,"0"),TRUE),"") で各行が出ます。(一応実験済) ただ >なるべく短い式にしたいので からはハズれてしまいますが...

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オートフィルタ とCOUNT

    あるデータの分析で、以下のような長期のデータベース(例えば1000行)から 任意の期間をオートフィルタで抽出、表示をして B列の発生回数 C列の”○” ”×”の数をカウントしたいのですが   A列      B列  C列 1 2007/4/18   12   ○ 2 2007/4/19   3 3 2007/4/20   22    × 4 2007/4/23 5 2007/4/24 6 2007/4/25   2 7 2007/4/26 8 2007/4/27   9 2007/4/30 10 2007/5/1    4    ○ ======================================== 結果        5 ○              2 ×              1 =SUBTOTAL(3,B1:B10) とすると  行数の10になってしまいます。 全体の行からカウント =COUNT(B1:B1000) のように したいので SUBTOTAL関数と COUNTを使ってうまくできないでしょうか?

  • エクセルのMATCH関数について

    エクセルのMATCH関数についての質問ですが、どうしてもエラーが表示され悩んでいます。どうか教えていただければと思います。 たとえば下記のような場合なぜかエラーが発生してしまいますがどうしてでしょうか?      A列   B列   C列   D列   E列   F列 1行              A     B    A+B  戻り値 2行    2.0        1.0    1.2   2.2   2 3行    2.2        0.9    1.1   2.0   1 4行    2.4        1.1    1.3   2.4   #N/A 5行    2.6        1.0    1.4   2.4   3 使用している関数は、 E列2行 =C2+D2  F列2行 =MATCH(E2,$A2:$A5,0) E列3行 =C3+D3  F列3行 =MATCH(E3,$A2:$A5,0) E列4行 =C4+D4  F列4行 =MATCH(E4,$A2:$A5,0) E列5行 =C5+D5  F列5行 =MATCH(E5,$A2:$A5,0) です。ここでどうしても、F列4行にエラー値(#N/A)が発生してしまいます。どうしてでしょうか? E列4行とE列5行は同じ値にもかかわらず戻り値が違うのはどうしてでしょうか? また、不思議なことにE列4行に手入力で2.4の値を入力した場合は戻り値は3となり、正しい値を表示します。どうしてでしょうか? 以上、よろしくお願いします。

  • 複数セルから特定の文字を検索して、その対象セルを抽出したい

    エクセルで関数、VBAを使用して、下記のようなDATA抽出を行ないたいのですが、どなたか、ご指導いただけないでしょうか。 たとえば、2種のシートが、各々、 <シート1>   列A   列B 行1 A1 ABCD-123 行2 B23 EFGH-456 行3 C456 あいうえお <シート2> 列A 列B 列C  列D  列E 行1 A1 A2 A3 行2 B23 C5 A4 行3 A5 B2 C456 ・・・・・・・となっている場合、 <シート2> の列D  行1 へ "A1"と入力(記載)がある場合、列Eに   ”ABCD-123”と表示(抽出)を行ないたい。 セルには、文字、数字、記号が入ります。 よろしくお願い致します。

  • Excelの関数について教えてください。

    前にも同じような質問をしたのですが、よく理解できなかったので、もう一度質問させていただきます。 まず、A列に1~10まで入力します。次にB列に11~20まで入力します。同様にC列に21~30まで入力します。そして、セルE3に2、セルE5に12に入力します。 それから、セルE3の値をA列から検索し、セルE5の値をB列から検索し、その重なったB行のC列の値を求めたいのです。ここでは22になります。 自分なりに考えてみましたが、 =IF(MATCH(F3,A:A)=MATCH(F5,B:B),INDEX(A2:C10,MATCH(F3,A:A)=MATCH(F5,B:B),C:C,"")) ではエラーがでてしまいます。 いくら考えてもわかりません。 どなたか教えてください。よろしくお願いします。

  • エクセル フィルタオプションでの抽出

    使用しているデータベースから、必要な項目列と行のみ抽出し、いくつかの別ファイルに引用したいと思っています。 抽出元のマスターデータベースは下記のような形式で、   |A   |B   |C   |D   |E   |…S程度   |出荷先 |日付  |コード |商品名 |単価  | ____________________________ 1 |A社  |4/5 |商品由来|AAA |3000| ・ ・ 5 |B社  |4/5 |同上  |BBB |2800| ・ ・ 28|A社  |4/6 |同上  |CCC |1500| ・ ・ 45|C社  |4/6 |同上  |AAA |2950| 上記簡素化してありますが、出荷先と日づけごとに 複数の商品や単価の行が入る形になります。 抽出先は、 1)特定の縦列のみすべて引用したいものが複数  (A表:ABE列の表・B表:ACDE列の表など)  (今後抽出したい列が変わる可能性あり) 2)特定の列のうち、特定の行を指定して引用したいもの の、2種類があります。 マスターは日々増えてゆきますが、抽出先の列項目は固定のため、 作業用の列を行を追加し、作業行用部分で抽出表の列を指定 作業列用で行を指定、のように出来ないでしょうか(下記)      |A   |B   |C   |D   |E   | 作業行列 |出荷先 |日付  |コード |商品名 |単価  |   行用→|AB  |A   |B   |B   |AB     ↓列用 ____________________________   |1 |A社  |4/5 |商品由来|AAA |3000|   |・   |・ 1 |5 |B社  |4/5 |同上  |BBB |2800| 1 |・ 1 |・   |28|A社  |4/6 |同上  |CCC |1500| 実作業を行うのはエクセル超初心者の方になるので、 範囲指定等をかけなおしたり、動作不備の対応が難しい状態です。 作成後は自身の手を離れてしまうので、 極力マクロやピボットテーブルを使わず、関数で指定をかけ、 ファイルをアクティブにした時自動更新出来るような案はないでしょうか。 ややこしくてすみません。 考えすぎて複雑にしてしまっている気もしますが、どうぞお力をお貸し下さい。 宜しくお願いします。

  • EXCEL:ゼロ以外のデータを詰めて抽出する方法

    初めて投稿します。よろしくお願いいたします。 EXCEL2000を使用しています。 オートフィルタを使わずに 関数でデータを抽出する方法で悩んでいます。 下記<データ>が存在しています。 2行目がゼロ以外のものを、 別シート<抽出>に上から詰めて抽出したいのです。 <データ>   A列 B列 C列 D列 E列 1行 1  2  3  4  5  ←日付 2行 5  3  0  2  0  ←数字 <抽出>別シート   A列 B列  1行 1  5 2行 2  3 3行 4  2   ↑  ↑   日付 ゼロ以外 関数については中級レベルだと思います。 いろいろ試したのですが、関数を組み合わせてもなかなかうまくいきません。 どなたかご教授いただけないものでしょうか? よろしくお願いいたします。

  • Excel2003での行重複削除

     Excel2003で、列のセル内容が同一の場合を削除・抽出することは可能でしょうか。例えば、次のようなイメージです。 行番号 A列 B列 行1 A1県 B1市 行2 A1県 B2市 行3 A1県 B3市 行4 A1県 B4市 行5 A2県 B5市 行6 A2県 B6市  ここから、A列が同一の行の重複を削除したいのです。上記では、行1から行4までは「A1県」で同一なので、1つの行だけ残し後の行は削除したい。B列の内容は重複削除で一部消えますが構いません。上記の場合、抽出結果は次のようになります(先頭行だけ残した場合ですが)。 行番号 A列 B列 行1 A1県 B1市 行5 A2県 B5市  データベースが大きいため、手作業で削除して行くのは大変です。適当な方法がありましたら、是非、ご教示ください。  どうぞ宜しくお願いします。  

  • 連続していない日付データからの抽出

    エクセルで、   A   B 1 日付 売上   2 11/21  900 3 11/22 2000 4 11/26 1800 5 11/27 1300   D    E 1 日付  前日比 2 11/21 **% 3 11/22 **% 4 11/26 **% 5 11/27 **% とあります。 そこで、   G   H   I 1 日付 売上 前日比 2 任意 (抽出) (抽出) 3 と、Gに日付を入力したらH、Iにデータが抽出されるように関数を作りたいと思います。 Hには =INDEX(A2:B5,MATCH(G1,A2:A5,0),2) Iには =INDEX(D2:E5,MATCH(G1,D2:D5,0),2) と入力して抽出をしましたが、 例えばG列に元データには無い、「11/23」が入力されたときは、11/23よりも先で1番にくる11/26のデータを抽出するようにしたいのですが、どうしたらいいでしょうか? よろしくお願いします。

  • 教えてくださーい

    列A____列B____列C____列D____列E 行1   ____100____200____300____400 行2 10____1.1____2.1____3.1____4.1 行3 20____1.2____2.2____3.2____4.2 行4 30____1.3____2.3____3.3____4.3 行5 40____1.4____2.4____3.4____4.4 と言った表があるとします。(かなりいい加減ですが) 行1にある数字(100/200/300/400)のどれかを 列Aの行6に入力するとします。 列Aの数字(10/20/30/40)のどれかを 列Bの行6に入力するとします。 そうした時に、上記の数字が表内で交わる数値を 列Cの行6に抽出したいのです。 例としては、A6に300/B6に30 を入力すると C6には"3.3"が表示される。と言った様にです。 VLOOKUP式で可能なのでしょうか?

  • 番号が一致したら別の列の値を抽出したい

    こんばんわ。 Excelについて教えてください。 A列に数字が1~10と並んでおり、 C列には数字が穴あきで5つ(1,2,4,6,8)あったとし、 A列とC列を比較して比較し、数字が重複した場合は、 D列にある値をB列に抽出したいのですが、行番号を指定して 抽出する事なんてできますでしょうか? ↓こんな事をしたいです。 A列 B列 C列 D列 1  A  1  A 2  B  2  B 3     4  C 4  C  6  D 5     8  E 6  D 7 8  E 9 10

専門家に質問してみよう