- ベストアンサー
エクセルで家計簿のデータをシートにまとめたい方法
- エクセルで家計簿のデータをシートにまとめる方法を調べています。データを打ち込んだ時に自動的にシートにまとめられる仕組みを作りたいですが、関数がわかりません。
- 項目別に1月から12月までの明細をシート2に並べたいです。フィルターを使えばできるのですが、自動的にまとめられる方法を知りたいです。
- トータル金額は=SUMIF関数で計算できますが、項目名と適用も一緒に転記したいです。どうすればいいでしょうか?お力をお借りしたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
方法1:簡単なVLOOKUP関数だけで解決する 準備: A列に検索番号列を追加する A2: =IF(C2="","",C2&TEXT(COUNTIF($C$2:C2,C2),"-00000")) 以下コピー B列 日付 C列 項目番号 D列…以降続く シート2 A1セルに項目番号 A2に「番号」と記入 A3セルに =IF(ROW(A1)>COUNTIF(Sheet1!C:C,$A$1),"",ROW(A1)) 以下コピー B2に「日付」と記入 B3に =IF(A3="","",VLOOKUP($A$1&TEXT(A3,"-00000"),Sheet1!A:F,2,FALSE)) 以下コピー C2に「項目名」と記入 C3に =IF(A3="","",VLOOKUP($A$1&TEXT(A3,"-00000"),Sheet1!A:F,4,FALSE)) 以下コピー 以後同様。 方法2:関数すら使わないで解決する 準備: シート1のA列に,単純に上から下に番号(連番)を記入する A列から表範囲を列選択 データメニュー(または挿入タブ)からピボットテーブルレポートの作成を開始 ページフィールドに項目番号を投入 行フィールドに番号,月日,項目名,適用を投入 データフィールド(Σフィールド)に金額を投入 「~小計」が出てしまった列は,上にある「項目名▼」をWクリックして集計を無しに設定 「(空白)」が出てしまった行は,そのセルを一個スペースで書き換える ページフィールドから希望の項目番号を選択して完成。 元のデータを追記したら,レポートを更新する。
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
分かり易く、データが多くなっても計算が重くならない方法です。 それには作業列を作って対応するのがよいでしょう。 例えばシート1に家計簿があり、1行目は項目名でE1セルが金額とすればF列を作業列としてE1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(B2="","",B2*10000+COUNTIF(B$2:B2,B2)) シート2ではA1セルは項目の番号を入力するためのセルとします。 A2セルには月日、B2セルには項目名、C2セルには金額と入力します。 A3セルには次の式を入力してC3セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(COUNTIF(Sheet1!$F:$F,$A$1*10000+ROW(A1))=0,"",INDEX(Sheet1!$A:$E,MATCH($A$1*10000+ROW(A1),Sheet1!$F:$F,0),IF(COLUMN(A1)=1,1,IF(COLUMN(A1)=2,3,5)))) このシートを全体を選択して他のシートに貼り付けることで項目番号ごとのデータをそれぞれのシートのA1セルにその番号を入力すことで表示させることができます。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル関数は、「条件による行の抜き出し」は不得手です。配列数式を使ったり(処理が重くなる恐れ有り)、複雑な式の組み合わせ(初心者中級者には式の意味の理解が難しい)を使ったりする。Googleでimogasi方式で照会すれば、その質問例や回答タイプが判る。 ーー こういうのはVBAで処理するのは相応しい。 ーー imogasi方式は、作業列を余分に使いますが、式が比較的わかりやすいと思う。 以下は手抜きをして最小限の記述にしている。もし考えるなら類推して考えてください 例データ Sheet1 A2:G13 Fretuは空白。G列が作業列です。 日付 コード コード内容 コメント 係数 上からのコードごと連番 2010/1/2 11 a x 11 111 2010/1/4 11 a 23 112 2010/1/5 12 b 42 121 2010/1/6 13 c 12 131 2010/1/7 23 d 14 231 2010/1/6 11 a 25 113 2010/1/7 13 c 6 132 2010/1/8 14 e 7 141 2010/1/8 11 a 18 114 2010/2/3 11 a 33 115 <-第11行目 0 0 G2の式は =B2&COUNTIF($B$1:B2,B2) うえの行からコードごとに出現の(連続の)順番を振っている。 第12行目以下も入力する前に、入力の見込みデータ数以上行に、式を複写しておく。0の表示が気になるならIF関数をかぶせて空白にしておく。A列が空白ならG列は空白とする式。 ーーー Sheet2で B1に 11=肥料のコードを入れておく A2に =INDEX(Sheet1!$A$1:$F$100,MATCH($B$1&(ROW()-1),Sheet1!$G$1:$G$100,0),COLUMN()) と入れて右方向にF列まで式を複写。 これはSheet1のデータ行数を100行目までにしているが適宜増やしてください。 そのがA2:F2の式を下方向に式を複写 結果 Sheet2 肥料シート 11 2010/1/2 11 a x 11 2010/1/4 11 a 0 23 2010/1/6 11 a 0 25 2010/1/8 11 a 0 18 2010/2/3 11 a 0 33 #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A #N/A この#N/Aが目障りならば、Sheet1のコード11の行数よりSheet2の行が下になったら、空白をセルにセットするIF関数の式をかぶせる。 適当行数まで式を埋め込んでおく。 ==== 肥料=11以外のコード分もシートを分けて、11=肥料と同じ式を埋め込む。B1は費目ごとに変わる。 ーー すると、Sheetす1にデータを追加すると(本例では第12行目以下)即座に関係のシートの今までのデータの直下にデータが追加される。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 ↓の画像で右側がSheet2としています。 とりあえず項目「11」(肥料)の場合での数式です。 他の項目も同様の数式でOKですので、別列で試してみてください。 Sheet2のA3セルに =IF(COUNTIF(Sheet1!$B:$B,$A$1)<ROW(A1),"",INDEX(Sheet1!$A$1:$E$1000,SMALL(IF(Sheet1!$B$1:$B$1000=$A$1,ROW($A$1:$A$1000)),ROW(A1)),COLUMN(A1)*2-1)) これは配列数式になってしまいますので、この画面からコピー&ペーストする場合は A3セルに貼り付け後、数式バー内で一度クリックします。 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 このA3セルを列方向と行方向にオートフィルでコピーすると画像のような感じになります。 (これ以上、データはない!という位まで下へコピーしておいても構いません) 尚、A列はシリアル値が表示されますので表示形式は日付にします。 以上、参考になれば良いのですが・・・m(__)m
お礼
早速の回答ありがとうございます。 コピペで直ぐ使えるのは良かったのですが、シート2への行の追加が上手く行きませんでした。楽な設定だと思います!!
お礼
方法1を採用させて頂きました。 自分で、VLOOKUP関数でどうにか理解できる設定です。ひとつひとつ設定して間違いの無いように致します。有難うございました。