• ベストアンサー

Excel2010:年月の出力

Excel2010で、年、月、日のデータがあったとします。 画像(左)では2010年しかありませんが、それ以前、それより後のものもあります。 順番は、上から時間順です。(画像(左)には時間が表示されていませんが本来時間が表示されています。) このような場合で、画像(右)のように出力したいのですが、どのようにすればいいでしょうか? 出力結果としては、月別に表示されて月ごとに各1行ずつです(2010年1月ならその1行、2010年3月ならその1行というように。)。 回答よろしくお願いします。

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

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

>一発数式案は出ましたので作業列案で。  え? 回答No.3よりも前の回答の中で数式案と言うのは私の回答No.2の事だと思いまが、回答No.2は作業列を1列用いた作業列案なのですが・・・  一発数式案とは、おそらく以下の様な、関数のみで値を求める方式の事を言うのではないでしょうか?  今仮に、画像(左)の表がSheet1上に存在していて、Sheet2上に画像(右)の表を表示させるものとします。  まず、Sheet2のA3セルに次の関数を入力して下さい。 =IF(AND(ROWS($3:3)>1,A2=""),"",IF(COUNTIFS(Sheet1!$A:$A,SUM(A2),Sheet1!$B:$B,">"&SUM($B2)),A2,IF(COUNTIF(Sheet1!$A:$A,">"&SUM(A2)),SMALL(Sheet1!$A:$A,COUNTIF(Sheet1!$A:$A,"<="&SUM(A2))+1),"")))  次に、Sheet2のB3セルに次の関数を入力して下さい。 =IF(ISNUMBER($A3),SUMPRODUCT({1,2,3,4,5,6,7,8,9,11,12}*({1,2,3,4,5,6,7,8,9,11,12}>SUM(B2)*($A2=$A3))*(COUNTIFS(Sheet1!$A:$A,$A3,Sheet1!$B:$B,{1,2,3,4,5,6,7,8,9,11,12})>0)*(COUNTIFS(Sheet1!$A:$A,$A3,Sheet1!$B:$B,">"&SUM(B2)*($A2=$A3),Sheet1!$B:$B,"<"&{1,2,3,4,5,6,7,8,9,11,12})=0)),"")  次に、Sheet2のA3~B3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。  以上です。  因みに、Sheet2のB3セルに入力する関数はSUMPRODUCT関数を使用しておりますが、繰り返し回数が12回に過ぎませんから、繰り返し処理による計算負荷増大は殆どありません。

miya_HN
質問者

お礼

度々回答をいただきありがとうございます。 試してみます。 処理速度にそれほど影響ないんであればありがたいです。 非常に大きな容量になっていたので。 ありがとうございました。

miya_HN
質問者

補足

ありがとうございます。 思った通り出力できました。 ありがとうございました。

その他の回答 (4)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

>このような場合で、画像(右)のように出力したいのですが、どのようにすればいいでしょうか? 目的の範囲を選択してコピー&ペーストでSheet2へコピーします。 Sheet2のコピーされた範囲を選択した状態で「データ」タブの「重複の削除」を行います。 先頭行は見出しとします。 年、月を対象に重複の削除を実行すると添付画像のようになります。 尚、添付画像はExcel 2007での作業ですがExcel 2010/3013でも同様になります。

miya_HN
質問者

お礼

回答ありがとうございます。 ありがとうございました。

  • chonami
  • ベストアンサー率43% (448/1036)
回答No.3

一発数式案は出ましたので作業列案で。 左シートにA列とB列を結合した作業列を作ります。 =A3&B3 (必要数下にコピー) もし、E列に作業列を作ったとしたら 別の列に =COUNTIF($E$3:E3,E3) と入力し下にコピー オートフィルタなどで1となっているセルのみを抽出し コピーして、どこかへ貼り付け。

miya_HN
質問者

お礼

回答ありがとうございます。 ありがとうございました。

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

 今仮に、画像(左)の表がSheet1上に存在していて、Sheet3のA列を作業列として使用して、Sheet2上に画像(右)の表を表示させるものとします。  まず、Sheet3のA3セルに次の関数を入力して下さい。 =IF(ISNUMBER((INDEX(Sheet1!$A:$A,ROW())&"/"&INDEX(Sheet1!$B:$B,ROW())&"/1")+0),IF(COUNTIF(A$1:A2,(INDEX(Sheet1!$A:$A,ROW())&"/"&INDEX(Sheet1!$B:$B,ROW())&"/1")+0),"",(INDEX(Sheet1!$A:$A,ROW())&"/"&INDEX(Sheet1!$B:$B,ROW())&"/1")+0),"")  次に、Sheet3のA3セルをコピーして、Sheet3のA4以下に貼り付けて下さい。  次に、Sheet2のA3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>COUNT(Sheet3!$A:$A),"",YEAR(SMALL(Sheet3!$A:$A,ROWS($3:3))))  次に、Sheet2のB3セルに次の関数を入力して下さい。 =IF(ROWS($3:3)>COUNT(Sheet3!$A:$A),"",MONTH(SMALL(Sheet3!$A:$A,ROWS($3:3))))  次に、Sheet2のA3~B3の範囲をコピーして、同じ列の4行目以下に貼り付けて下さい。  以上です。

miya_HN
質問者

お礼

回答ありがとうございます。 kagakusukiさんの言う通りやったらできました! ありがとうございました。

  • k-josui
  • ベストアンサー率24% (3220/13026)
回答No.1

アウトラインで集計できると思います。 http://www4.synapse.ne.jp/yone/excel2010/excel2010_outline1.html

miya_HN
質問者

お礼

回答ありがとうございます。 回答をいただいてすいませんが、できれば、式が知りたかったのですが。

関連するQ&A