• ベストアンサー

エクセル関数

エクセル初心者です。 今、下の画像(上段)のような データベースを作りました。 ここにある日付を古いもの順に 下段の画像のような形に したいのですが、IF関数がうまく使えず 困ってしまいました。 どうすれば、日付順番に並ぶのでしょうか。 教えてください。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.7

シート1のA列およびD列の2行目以下には1991年10月というように表示されているとします。 しかしこのように表示するためには1991/10/1と入力してセルには1991/10/1と表示されますがAおよびD列を選択してから右クリックして「セルの書式設定」から「表示形式」のタブで分類に「ユーザー定義」を選び種類の窓には yyyy"年"m"月" と入力します。これらの操作で例えば1991年10月のように表示することができます。 このようにすることでお望みのような操作ができるようになります。 シート1のC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",RANK(A2,A:A,1)) F2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(D2="","",RANK(D2,D:D,1)+MAX(C:C)) なお、A列には2行目から下方に年月のデータがあり、D列についても同じですがA列の年月よりはより新しい年月が入力されているとします。 次にまとめの表ですがシート2に作成するとしてA1セルには年月、B1セルには売上と項目名が有るとします。 シート2のA2セルには次の式を入力してB2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$C:$C,ROW(A1))>0,INDEX(Sheet1!$A:$B,MATCH(ROW(A1),Sheet1!$C:$C,0),COLUMN(A1)),IF(COUNTIF(Sheet1!$F:$F,ROW(A1))>0,INDEX(Sheet1!$D:$E,MATCH(ROW(A1),Sheet1!$F:$F,0),COLUMN(A1)),"")) なお、A列についてはA列を選択したのちにシート1のA列と同じようにセルの書式設定をします。

その他の回答 (6)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 各販売日の欄の表示が日付ではなく、月になっているという事は、各月ごとの売上額を集計したいという事なのでしょうか?  もし、そうだとすれば、売上が無かった月に関しても、下の表に表示して、売上額欄を0円と表示させた方が、月が連続しますから、月を見間違えるおそれが減るため、望ましいのではないかと思います。  それを、関数で行う方法の一例は以下の通りです。  今仮に、上の表がSheet1に存在しているものとします。  まず、集計結果を表示させるシートのA2セルに、次の数式を入力して下さい。 =IF(COUNT(Sheet1!$A:$A)+COUNT(Sheet1!$D:$D)=0,"",MIN(Sheet1!$A:$A,Sheet1!$D:$D))  次に、集計結果を表示させるシートのA3セルに、次の数式を入力して下さい。 =IF(MAX(A$1:A2)=MAX(Sheet1!$A:$A,Sheet1!$D:$D),"",DATE(YEAR(A2),MONTH(A2)+1,1))  次に、集計結果を表示させるシートのB2セルに、次の数式を入力して下さい。 =IF($A2="","",SUMIF(Sheet1!$A:$A,$A2,Sheet1!$B:$B)+SUMIF(Sheet1!$D:$D,$A2,Sheet1!$E:$E))  次に、集計結果を表示させるシートのB2セルをコピーして、同じシートのB3セルに貼り付けて下さい。  次に、集計結果を表示させるシートのA3~B3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。  以上です。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.5

こんなのを関数でやろうとするのは愚です。 複雑になるだけ。関数は並べ替えも得意ではない。 エクセルの考えでは、質問の下の表データをまずつくり、上の表のように分離するほうが、まだまともなニーズかと思う。 これも抜き出し問題で難しいが。 質問者のレベルでは、左表の下へ右の表をコピペと並べ替えでやるのが順当。 ーー 例データ A,B列 1997/10/1  100 1997/11/1  200 1997/12/1  300 D,E列 1998/1/1  400 1998/2/1  500 1998/3/1  600 ーー A2:A4とD2:E4の範囲名をhan1とする A8に=SMALL(han1,ROW()-7) 下方向に式を複写 B8に=IF(ISERROR(MATCH(A8,$A$2:$A$4,0)),INDEX($D$2:$E$4,MATCH(A8,$D$2:$D$4,0),2),INDEX($A$2:$B$4,MATCH(A8,$A$2:$A$4,0),2)) 下方向に式を複写 結果 1997/10/1 100 1997/11/1 200 1997/12/1 300 1998/1/1 400 1998/2/1 500 1998/3/1 600 ーーー 上記はデータによってはうまく行かない場合がある。同じ日付が2度出てくる場合など。 まあ複雑になるという例で示したものと考えてください。 ーー 実際はどんなデータを作ったのか知らないが、データベースとは、エクセル程度では、名前がおこがましい。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

複数範囲のピボットテーブルを使えばいいのでは? http://office.microsoft.com/ja-jp/excel-help/HA010226585.aspx

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

No1様の回答の様にデータを貼り付けて1つの表にしての並び替えが一般的です あえて関数での拾い出しを行いたいと言うことであれば {=SMALL(データ範囲*(見出="販売日"),COUNT(データ範囲)/2+ROW()-1)} データ範囲=A2:E4、見出=A1:E1です 配列計算ですのでShift+Ctrl+Enterで確定してください 考え方の一つとして

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! ↓の画像のようにSheet1のデータをSheet2に表示するようにしてみました。 Sheet1のA列のセルの表示形式は「標準」で単に 1997年10月 のように入力したとします。 その場合は 1997年10月1日 のシリアル値になります。 一応そういう入力方法だとしての一例です。 Sheet2のA2セルに =IF(COUNT(Sheet1!$A:$A)>=ROW(A1),INDEX(Sheet1!A:A,MATCH(SMALL(Sheet1!$A:$A,ROW(A1)),Sheet1!$A:$A,0)),IF(COUNT(Sheet1!$A:$A,Sheet1!$D:$D)>=ROW(A1),INDEX(Sheet1!D:D,MATCH(SMALL(Sheet1!$D:$D,ROW(A1)-COUNT(Sheet1!$A:$A)),Sheet1!$D:$D,0)),"")) という数式を入れ、隣のB2セルまでとりあえずオートフィルでコピー! Sheet2のA2セルの表示形式はユーザー定義から yyyy年m月 としておきます。 最後いA2・B2セルを範囲指定し、B2セルのフィルハンドルで下へコピーすると 画像のような感じになります。m(__)m

  • yosifuji20
  • ベストアンサー率43% (2675/6115)
回答No.1

これは関数の問題ではありません。 コピーペーストでデータをひとつにつなげて、並べ替えをすればできます。 まず2つのデータを上下に一箇所に並ぶように別な場所にコピーペーストします。 その後、その貼り付けたデータを、データの並べ替えで年月をキーにしてソートします。 これでご希望のデータが出来上がりです。 コピーペースト、並べ替えともExcelの基本的な機能ですから是非覚えましょう。

関連するQ&A