学校で使う会計簿を作りたいと思っています。
シートが全部で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の会計報告書が出来上がる。
そんなことは可能でしょうか?
セルの位置は特に決まっていません。
あと、作業シートを設けることも問題ありません。
お知恵を貸して頂けると助かります。
どうぞ、よろしくお願い致します。
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
No.2
- 回答日時:
>シート1~シート3までの入力さえきちんと行えば、自動的にシート4の会計報告書が出来上がる。
>そんなことは可能でしょうか?
可能です。
一番簡単な方法は総計用のSheet4と同じフォーム(同じ項目のシート)を1年~3年まで用意します。
学年によっては不要な行もありますがそのセルを空欄にします。
3枚のシートを串刺し集計すれば総計のシートへ反映します。
Sheet4のみ画像を添付します。
=SUM(Sheet1:Sheet3!B4)
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ランキング
-
エクセルでファイルを開いたと...
-
エクセルVBAでパスの¥マークに...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
Excelで同じシートのコピーを一...
-
Excelで金銭出納帳。繰越残高を...
-
複数シートの特定の位置に連番...
-
EXCEL:同じセルへどんどん足し...
-
エクセルで前のシートを連続参...
-
前の(左隣の)シートを連続参...
-
EXCELで1ヶ月分の連続した日付...
-
Accessのスプレッドシートエク...
-
エクセルVBA 串刺し計算の際、...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
-
エクセルの複数シートの保護を...
-
特定のシートの削除を禁止した...
-
シートの保護のあとセルの列、...
-
シートを追加・名前を次月に変...
-
Excelのシートを、まとめて表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
VBAでシートコピー後、シート名...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルで前のシートを連続参...
-
前の(左隣の)シートを連続参...
-
Excel、同じフォルダ内のExcel...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルで前シートを参照して...
-
複数シートの特定の位置に連番...
-
Accessのスプレッドシートエク...
-
シートの保護のあとセルの列、...
-
EXCELで同一フォーマットのシー...
-
特定のシートの削除を禁止した...
-
Excelのシートを、まとめて表示...
-
エクセルで複数設定したハイパーリンク先...
おすすめ情報