• ベストアンサー

エクセルの関数で

また皆様のお知恵を拝借したく 先週に数値の大きい順番に項目を並べたいという質問をさせていただきましたが、そこに条件を付け足して、同じように求めたいのです。 シート1には A列     B列      C列 1801  りんご    500 1801  みかん    350 1801  なし     700      ・      ・ 1802  みかん    250 1802  ぶどう    600 ・ ・ 1812  かき     1000 B列、C列は以下に項目と数字が並んでいきます。 A列は年月が入ります。 月の入力は毎月20項目程度になります。 そしてシート2のD列1行目から5行目に1801における上位金額の5項目         E列1行目から5行目に1802における上位金額の5項目               ・               ・             O列1行目から5行目に1812における上位5項目 というように取り込みたいのです。 集計シートに関数を入れて自動的に上位項目を表示させるにはどのような関 数を使えばよろしいのでしょうか。 入力されていない場合は表示はしないような形で行いたいのです。 よろしくお願いします。

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

  • ベストアンサー
  • rin01
  • ベストアンサー率43% (33/76)
回答No.5

Rinです。。。 見る時間がなくて、遅くなりました。 >年ごとに関数を書き換える手間を省く為に、01~12という月だけ >を取り出して行いたい場合は関数式はどのようになるのでしょうか >列の挿入でB列に MID(A1,3,2)という関数でA列の >下2桁(01~12)を取り出そうと考えています。 せっかく、ここまでやってきましたので 列を増やさないでやってみませんか? すこし式が、変わります。 集計シートの D1: =IF(SUMPRODUCT((RIGHT(Sheet1!$A$1:$A$300,2)=TEXT(COLUMN(A1),"00"))*1)<ROW(A1),"",INDEX(Sheet1!$B:$B,MATCH(LARGE(INDEX((RIGHT(Sheet1!$A$1:$A$300,2)=TEXT(COLUMN(A1),"00"))*(Sheet1!$C$1:$C$300)+(100-ROW($1:$300))/100,),ROW(A1)),INDEX((RIGHT(Sheet1!$A$1:$A$300,2)=TEXT(COLUMN(A1),"00"))*(Sheet1!$C$1:$C$300)+(100-ROW($1:$300))/100,),0))) で、右と下へコピーです。 ★式が長くなりましたので 少しでも、式が分かりやすくなるように 式の一部を名前定義した式と方法も書いておきます。 (順序その1) 名前定義を2つ作ります。 集計シートから 挿入→名前→定義 1つ目 名前欄に   → A列 参照範囲欄に → =Sheet1!$A$1:$A$300 追加で、2つ目 名前欄に   → C列 参照範囲欄に → =Sheet1!$C$1:$C$300 で、OKです。 (順序その2) ★集計シートの D1: =IF(SUMPRODUCT((RIGHT(A列,2)=TEXT(COLUMN(A1),"00"))*1)<ROW(A1),"",INDEX(Sheet1!$B:$B,MATCH(LARGE(INDEX((RIGHT(A列,2)=TEXT(COLUMN(A1),"00"))*(C列)+(100-ROW($1:$300))/100,),ROW(A1)),INDEX((RIGHT(A列,2)=TEXT(COLUMN(A1),"00"))*(C列)+(100-ROW($1:$300))/100,),0))) 右と下にコピーです。 (注意)A列 C列 の名前は行範囲が300行になっています。 行数を変更する時は、参照範囲を変えてください。 その時、式の中の ROW($1:$300) の部分も同じ行数に変えてください。 ★最後に RIGHT(Sheet1!$A$1:$A$300,2)=TEXT(COLUMN(A1),"00") この部分で、A列の 1801 等の下2桁をRIGHT関数で 抜き出して比較しています。 例えば、 =RIGHT(Sheet1!$A$1,2) は、01 です。 RIGHT関数で、抜き出しますと数値ではなく 文字列になります。 そこで、COLUMN(A1) →数値の 1 ですが、 RIGHT関数で抜き出した文字列の 01 と 同じにするために、 TEXT関数で、 1 を 文字列の 01 にします。 =TEXT(COLUMN(A1),"00") (1月) ですから RIGHT(Sheet1!$A$1:$A$300,2)=TEXT(COLUMN(A1),"00") この場合は、 A1~A300の範囲で、下2桁 = 01 (1月) で、 TURE FALSE で 判定しています。 説明がヘタでゴメンナサイ!! 分からない場合は、再レスくださいませ~。。。 時々、スレを見ますので。。 。。。Ms.Rinでした~♪♪

ZEBRRA
質問者

お礼

Ms.Rin様 ばっちりできました。大変ありがとうございました。 いろいろな関数が含まれており、理解しきれないところもありますが、がんばって勉強してみます。 また、何かわからないことが出てきましたら、質問をさせていただきます。 その時はまたよろしくお願いします。

その他の回答 (4)

  • rin01
  • ベストアンサー率43% (33/76)
回答No.4

Rinで~す。。。♪ >1800+COLUMN(A1)という個所は何をさしているのでしょうか。 どこかのセルに =1800+COLUMN(A1) と入れて右にコピーしてみてください。 1801 1802 1803 ....に、なると思います。 No2さんもNo3さんも書かれていますが D1セルから右へ、1801 1802 ・・・ と入れて、式の中でセル参照しているのと 同じになります。 その方が、解りやすかったですね。ゴメンナサイ!! その場合は、式の中の 1800+COLUMN(A1) の部分をすべて $D1 に、変更すればいいで~す。 そして、式は D2に入れて右と下へコピーします。 でした。。。Ms.Rin~♪♪

ZEBRRA
質問者

補足

Ms.Rin様 確認し納得しました。ありがとうございました。 No2さんNo3さんが言われていることと同じなのですね。 今回作製しているファイルは行を挿入することは難しいためRinさんの式で考えていこうと考えています。 もう一つ教えていただきたいのですが、 最初の質問文では1801~1812という形で年月を取り込むとしましたが、集計シートは原紙として用いようと考えており、年ごとに関数を書き換える手間を省く為に、01~12という月だけを取り出して行いたい場合は関数式はどのようになるのでしょうか。 列の挿入でB列に MID(A1,3,2)という関数でA列の下2桁(01~12)を取り出そうと考えています。 何度も申し訳ありませんが、よろしくお願いいたします。  

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

次の方法は如何でしょうか。 シート2の1行目を見出しとして、D列にシート1のA列日付を入力する事とします。 シート2のD2セルに次の数式を設定して下方向に5行、右方向に必要分コピーします。 尚、配列数式を使用していますので、入力完了時にshift+ctrl+enterキーを同時押下して下さい。 D2に=IF(ROW($A1)-1<COUNTIF(Sheet1!$A$1:$A$200,D$1),INDEX(Sheet1!$B$1:$B$200,MATCH(LARGE(IF(Sheet1!$A$1:$A$200=D$1,Sheet1!$C$1:$C$200,0),ROW($A1)),Sheet1!$C$1:$C$200,0)),"") 尚、D1行から表示したいの場合、数式のD$1部分をそれぞれの日付に変更して設定して下さい。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

とりあえず同じ金額がなければですが D1=1801,E1=1802としてそれぞれ2行目から上位5項目で D2=IF(COUNTIF($A:$A,D$1)>ROW()-2,INDEX($B:$B,SUMPRODUCT(($A$1:$A$100=D$1)*1,($C$1:$C$100=SUMPRODUCT(LARGE(($A$1:$A$100=D$1)*$C$1:$C$100,ROW()-1)))*1,ROW($B$1:$B$100)),1),"") この式をD2:E6にドラッグして配置してみてください。 簡略化できるか試してみます。 まあ設定がワンパターンなんでマクロOKならユーザー定義関数を作った方が楽かもしれませんが...

  • rin01
  • ベストアンサー率43% (33/76)
回答No.1

ZEBRRAさん こんにちは~♪ 前回より、条件が、増えたんですね~。。。 A列の年月が、シリアル値でなく 数値の場合です。 集計シートの D1: =IF(COUNTIF(Sheet1!$A$1:$A$300,1800+COLUMN(A1))<ROW (A1),"",INDEX(Sheet1!$B:$B,INDEX(MATCH(LARGE(((Sheet1! $A$1:$A$300=1800+COLUMN(A1))*(Sheet1!$C$1:$C$300))+(100-ROW ($1:$300))/100,ROW(A1)),((Sheet1!$A$1:$A$300=1800+COLUMN(A1))* (Sheet1!$C$1:$C$300))+(100-ROW($1:$300))/100,0),))) 右 O1セルまでコピーと 下 5行目までコピーします。 ★sheet1のデータ行は、300行に増やしてあります。 で、いかがでしょうか? 。。。。。Ms.Rinでした~♪♪

ZEBRRA
質問者

補足

Ms.Rinさま 関数の内容について教えてください。 1800+COLUMN(A1)という個所は何をさしているのでしょうか。 実際の集計シートと質問文内容で多少違いがあるものですから。 よろしくお願いいたします。

関連するQ&A

  • エクセル関数

    こんにちは。早速質問です。エクセルで以下のことが出来ますか? シート1に購入先(A)ごとに購入物(B)と購入地域(C)を表にしています。例、   A  B  C 1 甲社 みかん 愛媛 2 甲社 りんご 青森 3 乙社 本マグロ 青森 4 丙社 カキ 広島 このシート1をDBとしてシート2は日々購入したリストを作成 例   A   B   C   D  E 1 12/1 みかん 200個 () () 2 12/2 りんご 150個 () () 3 12/3 みかん 100個 () () 4 12/3 カキ  50個 () () 5 12/4 本マグロ 1本 () () このD列に先ほどのシート1から購入地域、E列に購入先が自動で入力される関数ありませんか?

  • エクセルで数値の大きい順番に項目を並べたい

    お知恵をお貸しください。 シート1のA列に項目が入力されており、B列にはそれに対応した数値が入力されています。 ここで、シート2のD列にB列の数値の大きな順番にA列の項目を並べ変えたものを取り込みたいのです。 例 A列   B列    別シートD列   りんご  500        なし   みかん  350        ぶどう   なし   700        りんご   ぶどう  650        みかん 欲しいのは項目のみです。但しシート1はいじりたくありません。 よろしくお願いします。

  • Excelでこのようなときはどんな関数にすればよいでしょうか

    同じブック内で以下のような2シートがあるときに、 (シートA)    A   B    C    1  あい  123  りんご 2  うえ  456  みかん   3  おか  789  イチゴ (シートB)    A   B    C    1  あい  123  めろん 2  えお  456  みかん   3  おか  789  イチゴ 横に並んだ3項目が同じものにだけ、(シートB)のセルに色を付けたいのです。 (上記の例だと、3行目が3項目とも一致しているということです) 色は横3つのセルにつけられなければ、A列のセルだけでも構いません。 (上記の場合、色をつけたいのはシートB「おか」のセル) 列を増やすなど、処理用のデータが必要でも非表示にすればいいので その点は構いません。 関数や条件付書式などで、なんとかなりますでしょうか?

  • エクセルで選択した項目をマークする方法

    SheetBで選んだ項目を、SheetAの該当する項目の隣の列の四角を □から■になるように、数式を組みたいのです。 ・SheetA       A列  B列 1行目  □   りんご 2行目  □   みかん 3行目  □   ぶどう という表を作成しております。 SheetB       A列                                    B列 1行目  選択する果物を、B列のリストボックスより選んでください   {りんご,ぶどう、みかん} シートB列の (1,B)は、リストボックスで簡単に出来るのですが、 シートAの、(3、A)の、ぶどうを□から■にする方法がわからないのです。 当然、ぶどうの次に、りんごが選ばれれば、ぶどうは□、りんごを■にしたいのです。 解決方法をご存知の方がいらっしゃいましたら ご教授のほう宜しくお願いします。

  • Excelの関数に関して教えて下さい

    パソコンはWindos98です。 ExcelのAシートに     A列    B列    C列    D列    (品名) (ロット) (容量)  (数量) 1行 みかん   123   100g  3 2行 りんご   456   100g  4 3行 ピーチ   789   120g  2 とある場合に新たなBシートの A1のセルに「りんご」と入力した場合に A1 品名 A2 ロット A3 容量 A4 数量 Aシートの2行目のデータをBシートのそれぞれの欄に 自動的に入るという関数はありますでしょうか? ちなみにAシートのりんごのデータは2行目にくるか 3行目にくるかは分からないのでどこの行に入力しても Bシートに反映されるというようにしたいのです。 補足もしますのでどうか宜しくお願いします。

  • Excel 参照行の削除でも可変しない関数

    Excel 参照行の削除でも可変しない関数 同じ形式で、数シートにわたり入力された文字をまとめた表を別のシート(シート1)に作成しています。 シート2以降の参照元データーは一定のルールで入力されていますが、削除や追加が頻繁に行われます。削除や追加の度にシート1B列・C列の関数が参照する行数が追随して可変しないようにしたいのですが可能でしょうか。 具体的には、シート2において6行目から9行目を削除した際に、シート1では「B2=みかん」/「C2=イチゴ」と繰り上がり、B行・C行は常に指定した行を参照するようにしたいと思っています。 <シート1>  A B     C 1 タイトル りんご  ばなな (← 3行目) 2 タイトル かき   なし   (← 8行目) 3 タイトル みかん イチゴ (←13行目) ・B列:「=IF(ISERROR('Sheet2'!$B3:$B3),"",'Sheet2'!$B3:$B3)」 ・C列:「=IF(ISERROR('Sheet2'!$D3:$D3),"",'Sheet2'!$D3:$D3)」 <シート2、3…> 参照したいセルは、B列とD列の3行目、8行目、13行目…と一定の間隔で入力されており、全てのシートにおいて同じ箇所に入力されています。 シートごとにカテゴリーの個数は(図A1:E4までを1カテゴリーと考えています)異なり、作業の度にカテゴリーの追加や削除が頻繁にあります。 うまく説明できているか不安ですが、良い方法を教えてください。

  • エクセル ブック内のシート間での行の参照?

    エクセルの同じブック内のシート間で、セルを参照するのではなく、行参照?させたいのですが・・・。 例えば、、  シート1    A    B    C    D     1行目 りんご みかん いちご ぶどう     2行目 赤    オレンジ  赤   紫 と入力すると同じようにシート2にも入力されるようにしたいのと、1行目と2行目の間に行を挿入しても同じようにシート2にも挿入されたり、 さらにはA列・B列のみ入力されたりするようにしたいのですが、(C列D列には別々のデータを入力したい)どのような方法がありますでしょうか?説明がわかりにくく申し訳ないのですが、宜しくお願いします。

  • Excelでどのような関数を使えばいいでしょうか。

    関数について教えて下さい。 Excelで、同じBook内に以下のような2シートがあるときに、 (Sheet1)    A   B    C   D     1  1  あい   12  りんご 2     うえ   34  みかん   3     おか   56  イチゴ 4  1  おか   78  イチゴ (Sheet2)    A   B    C    D     1     あい   11   りんご 2     うえ   34   みかん   3     おか   78   イチゴ 4     うえ   34   みかん  Sheet2のA列にSheet1にあるデータを入れたいのです。 まず、列B,C,Dのそれぞれのデータが横に3つ一致するものを探して 横3つのデータが同じなら、Sheet2のA列に、 Sheet1のA列にあるデータをシートBにも持ってくる、 というようなイメージです。 (Sheet2)    A   B    C    D     1     あい   11   りんご 2     うえ   34   みかん   3  1  おか   78   イチゴ 4     うえ   34   みかん      ↑このようにしたいのです。 A列にどのような関数を入れればいいのでしょう。 (A列にあるのは1か空欄かのどちらかです。 同じ3つの組み合わせで、1の場合と空欄の場合両方があることはありません。) また、Sheet2には、A列に1とついた行に色を付けたいのです。 例えば、上記の例ですと Sheet2のB3:D3のセルに色をつけたいのです。 関数や条件付書式などで、できますでしょうか。

  • エクセル 関数を使わずにデータを取りたい

    EXCELを使ってデータ入力をしたいです。 下の図のように、シート1のA列にコードを入力すると、シート2のテーブルから値を引っ張ってくるようにしたい。 たとえば、シート1のA1に"C001"を入力したら、B1に"赤"が自動入力されるようにしたい。 シート1 A列 B列 行1 C001 シート2 A列 B列 行1 C001 赤 行2 C002 青 行3 C003 黄色 ただし、シート1のB列の値は、入力後に編集するため、ここには計算式を入れたくないのです。 なので、通常ならばB列にVLOOKUP関数を使えばすむことですが、計算式を入れずに上記を実現する方法を教えてください。

  • Excel 関数 照合した結果がどこにあるのか表示したいのですが

    照合したいデータがあります。 A列とB列のセルを照合の結果、B列のセルがA列のどこにあるか、C列に行番号を表示したいのですが。 どのような関数がいいのか教えてください。よろしくお願いします。   A列   B列   C列 1 リンゴ みかん  2 2 みかん いちご  4 3 バナナ レモン  6 4 いちご メロン  5 5 メロン ぶどう  × 6 レモン

専門家に質問してみよう