![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
学校で使う会計簿を作りたいと思っています。
シートが全部で4枚あり、シート1は「1学期」、シート2は「2学期」、シート3は「3学期」、
シート4は「会計報告書」というのをイメージしています。
シート1~3に関しては何とか作れているのですが、
最後にシート1~3のデータを抽出して、シート4に自動で移す所で戸惑っております。
例えばシート1の1学期の支出は以下のようになっていたとします。
項目 金額
国語テスト(1学期) \280
算数テスト(1学期) \280
計算ドリル(上) \450
理科教材(豆電球) \120
社会科資料集 \580
そしてシート2の2学期の支出は以下のようになっていたとします。
項目 金額
国語テスト(2学期) \280
算数テスト(2学期) \280
計算ドリル(下) \450
理科教材(インゲン豆) \160
図工教材(紙粘土) \280
そしてシート3の3学期の支出は以下のようになっていたとします。
項目 金額
国語テスト(3学期) \280
算数テスト(3学期) \280
家庭科調理実習費 \180
理科教材(電池) \100
図工教材(版画) \320
そして、最後のシート4「会計報告書」には、シート1~シート3までの支出一覧を表にまとめたいのです。
その時の希望の形は添付画像の通りです。
『国語テスト(1学期)\280』や『国語テスト(2学期)\280』を『国語テスト(1~2学期) \560』
といった具合にまとめられるものはまとめ、
『社会科資料集 \580』のように1年間で1回しか買う必要が無いまとめられない物は、
そのまま会計報告書の支出欄に掲載できるようにしたいと思っています。
シート1~シート3までの入力さえきちんと行えば、自動的にシート4の会計報告書が出来上がる。
そんなことは可能でしょうか?
セルの位置は特に決まっていません。
あと、作業シートを設けることも問題ありません。
お知恵を貸して頂けると助かります。
どうぞ、よろしくお願い致します。
![「エクセルで学年会計簿を作りたい。」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/0/1534507_5497d89e8dde4/M.jpg)
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
こんばんは!
VBAでの一例です。
↓の画像のように左側がSheet1~Sheet3のセル配置、そしてSheet4は右側のように
3行目が項目行になっているという前提です。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, k As Long, cnt As Long, endRow As Long
Dim c As Range, str As String, buf As String, wS As Worksheet, wSs As Worksheet
Worksheets.Add after:=Worksheets(Worksheets.Count)
Set wSs = Worksheets(Worksheets.Count)
With Worksheets(4)
On Error Resume Next
Application.ScreenUpdating = False
endRow = .Cells(Rows.Count, "A").End(xlUp).Row
If endRow > 3 Then
Range(.Cells(4, "A"), .Cells(endRow, "B")).ClearContents
End If
cnt = 3
For k = 1 To 3
Set wS = Worksheets(k)
For i = 2 To Worksheets(k).Cells(Rows.Count, "A").End(xlUp).Row
If InStr(StrConv(wS.Cells(i, "A"), vbNarrow), "(") > 0 Then
str = Left(wS.Cells(i, "A"), InStr(StrConv(wS.Cells(i, "A"), vbNarrow), "(") - 1)
Else
str = wS.Cells(i, "A")
End If
If WorksheetFunction.CountIf(wSs.Range("A:A"), str) = 0 Then
cnt = cnt + 1
wSs.Cells(cnt, "A") = str
End If
Next i
Next k
wSs.Range("A:A").Replace what:="(", replacement:="", lookat:=xlPart
For i = 4 To wSs.Cells(Rows.Count, "A").End(xlUp).Row
For k = 1 To 3
Set wS = Worksheets(k)
Set c = wS.Range("A:A").Find(what:=wSs.Cells(i, "A"), LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
If InStr(c, "(") > 0 Or InStr(c, "(") > 0 Then
cnt = InStr(c, "(") + 1
str = Mid(c, cnt, Len(c) - cnt)
buf = buf & str & "・"
.Cells(i, "B") = .Cells(i, "B") + c.Offset(, 1)
Else
.Cells(i, "A") = wSs.Cells(i, "A")
.Cells(i, "A").Offset(, 1) = c.Offset(, 1)
End If
End If
Next k
.Cells(i, "A") = wSs.Cells(i, "A") & vbCrLf & "(" & Left(buf, Len(buf) - 1) & ")"
buf = ""
Next i
.Cells(Rows.Count, "A").End(xlUp).Offset(2) = "支出合計"
.Cells(Rows.Count, "B").End(xlUp).Offset(2) = WorksheetFunction.Sum(.Range("B:B"))
.Range("A:A").ColumnWidth = 100
.Columns.AutoFit
End With
Application.DisplayAlerts = False
wSs.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub 'この行まで
※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。
※ 1行・1列でもレイアウトが違うとまったく意図しない動きになりますので、
画像通りの配置でマクロを試してみてください。m(_ _)m
![「エクセルで学年会計簿を作りたい。」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/e/667667_5497e23b15a06/M.jpg)
No.2
- 回答日時:
>シート1~シート3までの入力さえきちんと行えば、自動的にシート4の会計報告書が出来上がる。
>そんなことは可能でしょうか?
可能です。
一番簡単な方法は総計用のSheet4と同じフォーム(同じ項目のシート)を1年~3年まで用意します。
学年によっては不要な行もありますがそのセルを空欄にします。
3枚のシートを串刺し集計すれば総計のシートへ反映します。
Sheet4のみ画像を添付します。
=SUM(Sheet1:Sheet3!B4)
![「エクセルで学年会計簿を作りたい。」の回答画像2](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/b/1229070_5497ebb3a9f83/M.jpg)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_15.png?e8efa67)
No.1
- 回答日時:
Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2014/2/5 ユーザー名 :
'
Dim i As Integer, j As Integer, myarray(8) As Variant
どのシートも第2行めから下に国語、算数、計算問題、理科、社会科、図工、家庭科をいれることにし、そしてだい4シートは第2列から第4列に1学期から3学期のデータを入れることにします。しーと1からしーと3まではデータは第2列に入れることにします。
次のマクロを実行すると、シート4に学期別の各科目の経費がこぴーされますので、後は手動でシート関数を使い合計を出してください。
For j = 1 To 3
For i = 2 To 8
Worksheets(4).Cells(i, j + 1) = Worksheets(j).Cells(i, 2)
Next i
Next j
'
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロか関数で処理したいのですが、教えて頂けませんか。 8 2022/10/31 15:18
- 中学校 理科だけが極端に苦手 5 2022/09/10 14:18
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- 大学受験 推薦入試について教えていただきたいことがあります。 私は、この春高校三年生になります。進路について考 1 2022/04/05 02:04
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Excel(エクセル) エクセルで割り振りをする方法 7 2022/08/02 14:02
- Excel(エクセル) エクセル関数について 2 2022/04/13 18:25
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
Excelのシートを、まとめて表示...
-
シートの保護のあとセルの列、...
-
エクセルでファイルを開いたと...
-
Excelで同じシートのコピーを一...
-
EXCEL:同じセルへどんどん足し...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
VBAでシートコピー後、シート名...
-
Excel、同じフォルダ内のExcel...
-
EXCEL VBAで別のシー...
-
excelでシート毎の最終更新日を...
-
エクセルで複数設定したハイパーリンク先...
-
VBAで条件によりフォントサイズ...
-
前の(左隣の)シートを連続参...
-
複数シートの特定の位置に連番...
-
特定のシートの削除を禁止した...
-
エクセルでファイル保存時に複...
-
EXCELで同一フォーマットのシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelで同じシートのコピーを一...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
EXCEL:同じセルへどんどん足し...
-
エクセルでファイルを開いたと...
-
エクセルVBAでパスの¥マークに...
-
Excelで金銭出納帳。繰越残高を...
-
前の(左隣の)シートを連続参...
-
EXCELで1ヶ月分の連続した日付...
-
Excel VBについての質問です。
-
複数シートの特定の位置に連番...
-
エクセルで前のシートを連続参...
-
特定のシートの削除を禁止した...
-
エクセルで前シートを参照して...
-
Accessのスプレッドシートエク...
-
Excel、同じフォルダ内のExcel...
-
excelでシート毎の最終更新日を...
-
Excelのシートを、まとめて表示...
-
EXCELで同一フォーマットのシー...
おすすめ情報