• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(EXCEL)出納帳に科目別シートを作成したい)

(EXCEL)出納帳に科目別シートを作成したい

このQ&Aのポイント
  • 出納帳に科目別のシートを作成する方法について教えてください。
  • 出納帳シートの相手科目をリストから選択できるように設定しましたが、それぞれの科目を別々のシートに集約・合計する方法が知りたいです。
  • VBAを使用するか、関数を使用するか迷っているため、初心者向けに教えていただけると助かります。

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

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

>関数を使用しても、VBAを使用しても良いのですが 関数で対応できます。 ご提示の画像が判読できない状態です。 B5は需用費と読めますがそれで良いでしょうか? また、費目別のシートへ抽出する項目は日付、摘要、入金、出金で良いでしょうか? 日付については下記の数式で良いと思います。 =IF(COUNTIF(出納簿!$B$5:$B$1000,"需用費")>=ROWS(A$5:A5),INDEX(出納簿!A:A,SUMPRODUCT(SMALL((出納簿!$B$5:$B$1000="需用費")*ROW(A$5:A$1000)+(出納簿!$B$5:$B$1000<>"需用費")*10^9,ROWS(A$5:A5))),1),"") 摘要はINDEX関数の出納簿!A:Aを出納簿!C:Cに置き換えれば目的に合います。 =IF(COUNTIF(出納簿!$B$5:$B$1000,"需用費")>=ROWS(A$5:A5),INDEX(出納簿!C:C,SUMPRODUCT(SMALL((出納簿!$B$5:$B$1000="需用費")*ROW(A$5:A$1000)+(出納簿!$B$5:$B$1000<>"需用費")*10^9,ROWS(A$5:A5))),1),"") 入金および出金は摘要を右へコピーすれば良いでしょう。 1行分の数式が確定したら纏めて下へ必要数コピーすれば完了です。 提示の数式は元データ(出納簿)の最大行番号を1000にしてありますので必要に応じて増減してください。 計算結果で0が表示されるセルが見難い場合は条件付き書式で0の場合はフォントの色を白にしてください。 他の費目シートについては需用費シートをシート全体をコピーして、費目の文字列を置換すれば良いでしょう。

forestbb
質問者

お礼

画像が見にくくて申し訳ありませんでした。 しかし、コピペ・置換にて動作致しました。 簡単で助かりました! ご回答ありがとうございます。 また、行き詰まった際はご助力下さい。

その他の回答 (1)

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

こんばんは! 「出納帳」のF2セルに日付が入っているというコトは毎日の締めで各Sheetに集計したい! という解釈です。 すなわち各科目Sheetの最終行にどんどん追記するものと解釈しました。 ↓の画像のように左側が「出納帳」Sheetで右側Sheetが各科目のSheetになっているとします。 各科目のSheetは「リスト」表示されるB列すべてのSheetが同じ配列で存在しているという前提です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub 転記() 'この行から Dim k As Long, lastRow1 As Long, lastRow2 As Long Dim myRng As Range, wS As Worksheet Application.ScreenUpdating = False With Worksheets("出納長") lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row Set myRng = Range(.Cells(4, "A"), .Cells(lastRow1, "E")) For k = 3 To Worksheets.Count Set wS = Worksheets(k) lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row If wS.Cells(lastRow2, "A") = "合計" Then wS.Rows(lastRow2).Delete End If .Range("A3").AutoFilter field:=2, Criteria1:=wS.Name myRng.SpecialCells(xlCellTypeVisible).Copy _ wS.Cells(Rows.Count, "A").End(xlUp).Offset(1) lastRow2 = wS.Cells(Rows.Count, "A").End(xlUp).Row With wS.Cells(lastRow2 + 1, "A") .Value = "合計" .Offset(, 3) = WorksheetFunction.Sum(Range(wS.Cells(2, "D"), wS.Cells(lastRow2, "D"))) .Offset(, 4) = WorksheetFunction.Sum(Range(wS.Cells(2, "E"), wS.Cells(lastRow2, "E"))) .Offset(, 5) = .Offset(, 3) - .Offset(, 4) End With wS.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous Next k .AutoFilterMode = False End With Application.ScreenUpdating = True End Sub 'この行まで ※ 各科目Sheetには残高は無意味ですので、F列に差引額を表示するようにしてみました。m(_ _)m

forestbb
質問者

お礼

ご回答頂きありがとうございました。 ご紹介頂きましたコードを入力して試してみたのですが、 リストシートには科目があるけれど、出納簿の中で使用 していない科目があると、 「該当するセルが見つかりません」 というエラーが発生してしまいました。 そもそもの書式のことを、私が失念しており、 No.1さんの回答で気づいたのですが、 科目別のシートには、相手科目や合計の列が不要でした。 今回の動作を見てみると、恐らく、出納簿シートの科目で フィルターをかけて、それを対象シートにペースト しているように思うのですが、このままだとtom04さんが ご説明下さっているとおり、同じ形式にする必要があります。 上記エラーや、形式の問題も、解決するコードがあるのだと 思いますが、No.1さんがご紹介下さった、関数を使用しての 動作ができるようでしたので、今回は関数で作成して 見ようと思います。 作成中に他の問題が出てきたり、データも重くなる可能性も あると思いますので、その際は他の方法を考えようと思います。 その際に、質問に気づかれましたら、 またお力をお貸し頂けないでしょうか。 よろしくお願いします。

関連するQ&A