プロが教えるわが家の防犯対策術!

添付の画像のような出納帳を作成しています。

「出納帳シート」の『相手科目』は、入力規則のリストを使用して、《リストシート》より選択するように設定しました。

今回は、この『相手科目』をそれぞれ別々のシートに分けて、自動的に集約・合計されるようなものを作成したいと思っております。

Webを検索してみるとVBAを使用する必要があるとの内容を拝見したのですが、自分のExcelファイルに導入する際、どこを書き換えれば良いのか分らず、行き詰まってしまいました。

関数を使用しても、VBAを使用しても良いのですが、VBAについてはあまり知識がありませんので、初心者向けに教えて下さると助かります。

面倒なお願いで申し訳ないのですが、よろしくお願い致します。

「(EXCEL)出納帳に科目別シートを作成」の質問画像

A 回答 (2件)

>関数を使用しても、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の場合はフォントの色を白にしてください。

他の費目シートについては需用費シートをシート全体をコピーして、費目の文字列を置換すれば良いでしょう。
    • good
    • 6
この回答へのお礼

画像が見にくくて申し訳ありませんでした。
しかし、コピペ・置換にて動作致しました。
簡単で助かりました!

ご回答ありがとうございます。
また、行き詰まった際はご助力下さい。

お礼日時:2014/06/10 19:54

こんばんは!


「出納帳」の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
「(EXCEL)出納帳に科目別シートを作成」の回答画像2
    • good
    • 3
この回答へのお礼

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

ご紹介頂きましたコードを入力して試してみたのですが、
リストシートには科目があるけれど、出納簿の中で使用
していない科目があると、
「該当するセルが見つかりません」
というエラーが発生してしまいました。

そもそもの書式のことを、私が失念しており、
No.1さんの回答で気づいたのですが、
科目別のシートには、相手科目や合計の列が不要でした。

今回の動作を見てみると、恐らく、出納簿シートの科目で
フィルターをかけて、それを対象シートにペースト
しているように思うのですが、このままだとtom04さんが
ご説明下さっているとおり、同じ形式にする必要があります。

上記エラーや、形式の問題も、解決するコードがあるのだと
思いますが、No.1さんがご紹介下さった、関数を使用しての
動作ができるようでしたので、今回は関数で作成して
見ようと思います。

作成中に他の問題が出てきたり、データも重くなる可能性も
あると思いますので、その際は他の方法を考えようと思います。
その際に、質問に気づかれましたら、
またお力をお貸し頂けないでしょうか。
よろしくお願いします。

お礼日時:2014/06/10 19:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A