- 締切済み
エクセル(VBA)で振り分け予算を管理したい
4月から各支店の会計をすべて担当することになり困っています。各支店ごと(50ほど)、さらに予算ごと(30ほど)に管理が必要です。入力シートをつくり入力すると、各支店のシートに予算ごとに振り分けることができたらずいぶん楽になると思うのですが・・・VBAの知識はまったくなくて困っています。どなたか助けてもらえないでしょうか? (入力シート) A B C D E F G 1 事項 節 日付 内容 予算 支出額 備考 2 A支店 給料 H23.4.1 ○○ 100,000 4月分 3 D支店 通勤交通費 H23.4.5 ○○ 20,000 4月分 4 G支店 消耗品 H23.4.5 ○○ 50,000 前期分 5 M支店 備品 H23.4.6 ○○ 30,000 前期分 6 A支店 消耗品 H23.4.6 ○○ 40,000 7 G支店 消耗品 H23.5.1 ○○ 2500 8 A支店 消耗品 H23.5.1 ○○ 10000 9 M支店 備品 H23.5.16 ○○ 25000 10 A支店 給料 H23.5.25 ○○ 80000 (支店シート)シートは支店の数だけ作ります。 A B C D E F G H I J 給料 手当 1 日付 内容 予算令達 支出金額 残額 備考 日付 内容 予算令達 2 H23.4.1 ○○ 100,000 4月分 3 H23.5.25 ○○ 80000 20000 4 5 ※ A~Fは給料Gは空白でHからMは手当・・・・というように予算の数だけ右に続きます。 本当に困っててどなたか教えてください。 うまく見えるかわかりませんがイメージとして画像も添付します。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.3~5です! たびたびごめんなさい。 「入力シート」のSheet名宣言をしていませんでしたので、標準モジュールでは正常に動かないかもしれません。 もし動かなければ 「入力シート」のSheet見出し上で右クリック → コードの表示 → VBE画面に貼り付けてマクロを実行してみてください。 どうも何度も失礼しました。m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
'前回の続きです。 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row str = Cells(i, 1) If Cells(i, 2) = "給料" Then If WorksheetFunction.CountIf(Sheets(str).Columns(1), Cells(i, 3) & Cells(i, 4)) = 0 Then With Sheets(str).Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 3) & Cells(i, 4) With .Offset(, 2) .Value = Cells(i, 3) .NumberFormatLocal = "ge.m.d" End With .Offset(, 3) = Cells(i, 4) .Offset(, 4) = Cells(i, 5) .Offset(, 5) = Cells(i, 6) .Offset(, 7) = Cells(i, 7) End With End If End If If Cells(i, 2) <> "給料" Then If WorksheetFunction.CountIf(Sheets(str).Columns(2), Cells(i, 3) & Cells(i, 4)) = 0 Then With Sheets(str).Cells(Rows.Count, 2).End(xlUp).Offset(1) .Value = Cells(i, 3) & Cells(i, 4) With .Offset(, 8) .Value = Cells(i, 3) .NumberFormatLocal = "ge.m.d" End With .Offset(, 9) = Cells(i, 4) .Offset(, 10) = Cells(i, 5) End With End If End If Next i End Sub 'この行まで 以上です。お役に立てば良いのですが・・・m(__)m
- tom04
- ベストアンサー率49% (2537/5117)
No.3です! コードだけで2000文字を超えているみたいなので、2回に分割してみます。 何度もごめんなさいね。m(__)m Sub 振り分け() Dim i As Long Dim str As String For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row str = Cells(i, 1) If Sheets(str).Range("A1") <> "" Then Sheets(str).Columns("A:B").Insert Sheets(str).Columns("A:B").Hidden = True If Cells(i, 2) = "給料" Then With Sheets(str).Cells(Rows.Count, 1).End(xlUp).Offset(1) .Value = Cells(i, 3) & Cells(i, 4) With .Offset(, 2) .Value = Cells(i, 3) .NumberFormatLocal = "ge.m.d" End With .Offset(, 3) = Cells(i, 4) .Offset(, 4) = Cells(i, 5) .Offset(, 5) = Cells(i, 6) .Offset(, 7) = Cells(i, 7) End With End If If Cells(i, 2) <> "給料" Then With Sheets(str).Cells(Rows.Count, 2).End(xlUp).Offset(1) .Value = Cells(i, 3) & Cells(i, 4) With .Offset(, 8) .Value = Cells(i, 3) .NumberFormatLocal = "ge/m/d" End With .Offset(, 9) = Cells(i, 4) .Offset(, 10) = Cells(i, 5) End With End If End If Next i '一旦ここまで・・・
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! ↓の画像で上側が入力シート・下側が各支店のSheet(画像では「A支店」)としています。 尚、J列以降は同じ項目があれば列方向に表示するのではなく、今後色々な集計を行うことを考えれば 行方向に表示させることをお勧めします。 そこで一例ですが↓の画像の配置でのコードを載せてみます。 尚、コードだけでこのサイトで投稿できる2000文字ぎりぎりみたいなので、 この後もう一度投稿します。 Alt+F11キー → VBE画面が出ますのでコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、コード内で作業用にA・B列を挿入し非表示にしていますので、各支店のSheetは通常通りA列から表があるものとしています。m(__)m
- hallo-2007
- ベストアンサー率41% (888/2115)
>(支店シート)シートは支店の数だけ作ります。 >※ A~Fは給料Gは空白でHからMは手当・・・・というように予算の数だけ右に続きます。 ではなくて 別途 抽出のシートを一枚だけ *シート数を増やすと移動するのに大変になりませんか? A B C D E F G 1 事項 節 2 A支店 給料 3 4 日付 内容 予算令達 支出金額残額備考 5 H23.4.1 ○○ 100,000 4月分 6 H23.5.25 ○○ 80000 20000 7 と準備して フィルターオプションを使って 必要な情報を抽出する方法の方がシンプルだと思います。 先ほど同様な質問に回答しましたので紹介いたします。 http://okwave.jp/qa/q6569425.html 月ごとの抽出が必要だとも思いますので (入力シート) A B C D E F G 1 年月 事項 節 日付 内容 予算 支出額 備考 2 2011年4月 A支店 給料 H23.4.1 ○○ 100,000 4月分 3 2011年4月 D支店 通勤交通費 H23.4.5 ○○ 20,000 4月分 4 2011年4月 G支店 消耗品 H23.4.5 ○○ 50,000 前期分 5 2011年4月 M支店 備品 H23.4.6 ○○ 30,000 前期分 と年月の列も準備して A B C D E F G 1 事項 節 年月 2 A支店 給料 2011年4月 3 4 日付 内容 予算令達 支出金額残額備考 として 年月と支店名と項目を指定して抽出できるほうが長く使えると思います。 あと入力作業を楽に進めるために 年月 事項 節の列には 別途 入力規則のリストの一覧のシートを作成して 入力規則を設定すると良いでしょう。
- keithin
- ベストアンサー率66% (5278/7941)
次の通りに操作すると,マクロを全く知らなくても簡単にマクロを作って使えます。 準備: 作業用に全支店,全科目のデータを漏れなく網羅したダミーの予算を作成しておく 予算の表にオートフィルタを取り付けておく 手順1: 1.ツールメニューのマクロで「新しいマクロの記録」を開始する マクロの名前は「A支店給料」にする 2.オートフィルタでA支店,給料を絞り込む 3.表範囲を大きく選択してコピーする フィルタの▼がついた行を含めてコピーすること 4.所定のシートを開き,所定のセルに貼り付ける 5.予算シートに戻る 6.オートフィルタを全て表示する 7.ここで一度,マクロの記録を終了する いちど記録したマクロを実行し,意図通りにデータを移動できているか確認する 手順2: 1.「A支店手当」など次の項目について手順1を繰り返し,1つずつマクロを記録する 慌てて一度にやってしまおうとしないこと 2.全支店,全科目のマクロを記録終えたら,作業に漏れがなかったか再確認する 3.新しいマクロの記録を開始し,作成したマクロを最初から順番に1つずつ実行する 4.記録終了して完成。