[[20040828115006]] 『現金出納帳・収支計算書』(EMI) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『現金出納帳・収支計算書』(EMI)
 現在、現金出納帳1シート、各月12シート、収支計算書1シート、各勘定シート34シートで帳簿を作っています。
 現金出納帳に日付、項目、摘要、収支、支出を入力し、各勘定シートには{=IF(COUNTIF(現金出納帳!$B$2:$B$401,"○○")
<ROW()-,"",INDIRECT(ADDRESS(SMALL(IF(現金出納帳!$B$2:$B$401="○○",ROW($A$2:$A$212)),ROW()-1),COLUMN(),,,"現金出納帳")))}
とあり各勘定シートに転記しています。
 収支計算書にはマクロの記録でマクロを作り各勘定ごとに差引残高を転記させています。
 現金出納帳への入力と各勘定シートから収支計算書への転記の際1処理ごと?に再計算され時間がかかってしまいます。
 そこで質問ですが
 1>シートがありすぎて再計算の時間がかかってしまうのでしょうか?
 2>マクロはきちんと動いてくれているのですが、マクロを使わないで出来るのであればどのような関数があるのでしょうか。
 エクセル初心者でこの学校を見るようになりいろいろ勉強し始めたばかりです。よろしくご教授下さい。
 ちなみにマクロは
 Sheets("○○").Select Range("G2").Select
 Selection.Copy
 Sheets("収支計算書").Select Range("D5").Select
 ActiveSheet.Paste Link:=True
 というのが34セットあります。


 とりあえずの対策として、
 [ツール]-[オプション]-[計算方法]で、[手動]にチェックを入れてはいかがでしょうか?
 伝票一枚入れるごとに、いちいち、計算されることがなくなるので、早くなるかと思います。
 計算結果を更新したいときは、F9を押してください。

 また、マクロですが、
 Sub XX()
     Application.ScreenUpdating = False
     実際の処理
     Application.ScreenUpdating = True
 End Sub
 とすると、画面更新がされなくなるので、速くなります。

 計算式を見直すと、より速くなるのかもしれませんが、大変そうなのでしません。

 とりあえずの対策と言うところでした(まこ)


 ちなみに、マクロの処理内容ですが、
 Sheets("収支計算書").Range("D5").Value =  Sheets("○○").Range("G2").Value
 の一行でOKなのでは?(確認はしていませんが・・・)
 (まこ)


(まこ)様 有難うございます。今試しました。早くなりました。
 マクロもご指摘の通りでした。
 今後の勉強として、やはり[計算方法]-[自動]では遅いままなのでしょうか?
 ファイルサイズが1.23MBあります。

 途中から失礼します。

 >ファイルサイズが1.23MB
 は、特別大きいサイズとは思えませんね。

 試していませんが時間がかかるのは、
 配列式の為ではないでしょうか。
 数10行の配列式ならそんなに差が出るとは思えませんが
 400行となると、通常数式より時間がかかると思います。
 (PCの処理能力にもよると思いますし)  (jun53)


 (jun53)様 返事が遅くなりました。アドバイス有り難うございます。
 このHPを見る前はすべて手入力で各シートに転記していたのですが、ここで
 配列式を見つけ試したら自動的に転記できたので使用しています。
 ほかの方法で現金出納帳に入力したものを各シートに自動的に転記する方法は
 ありますか?今後も色々試して勉強したいと思いますのでヒントだけでもいた
 だければ幸いです。よろしくお願いします。(EMI)

 400行というのが、5種(日付、項目、摘要、収支、支出)×80セットなどであれば、
 多少は早くできるかもしれません。
 "○○"の所もその5種ですか?
 最初の "ROW()-" というところは1が抜けているのでしょうか?(Σ)

 [EMI}さんの最初の質問内容を見ると典型的なバランスシートの内容に思えますので、
自動的に、処理を速く、ということでしたらVBAになりますね。
たくさんのマクロ達人から教えて頂きましたので、詳しいレイアウトがわかれば、
こんな私でもとりあえず回答が出来そうです。 が...

 私個人の考えとしては、一つ一つ段階を踏んで、と思うのですが、、、学校ですから。
まぁこれは回答者様方のお考えも違うようですし...
いきなりマクロ回答が出て、ボタン一個で全てが解決できて...
タブン、質問の方は満足なのでしょうね。。。

 作業列を作れば出来る気もしますが...
(処理を速くしたいだけならこの方法がオススメです、見てくれは悪いですが)
 でも、タブン、マクロな回答があると思いますよ、キット。

 ということで、私はココまで、後は討ち死にです、ゴメンナサイ。  (jun53)


 (jun53)様、どうも有り難うございます。
  (Σ)様 
現在 現金出納帳は
    A      B      C      D     E     G
 1  日付    項 目    摘 要   収 入   支 出   残 高
 2 2004.8.1   前月繰越                    400,000
 3 2004.8.10  備品購入費    机          5,000  395,000     
 4 2004.8.25    作業収入   △□売上   5,000        400,000

 400
 という作りになっています。これは1年間通しで現金出納帳を作成し、各月終わりにある
 会議の時に各月シートに転記してペーパーで職員に配ります。

 各勘定シートは備品購入費を例にすると
     A      B      C      D     E     G
 1  日付    項 目    摘 要   収 入   支 出   合計
 2 2004.4.10  備品購入費    机          5,000  20,000     
 3 2004.5.15  備品購入費    いす         5,000       
 4 2004.6.20  備品購入費    机          5,000       
 5 2004.8.10  備品購入費    机          5,000       

 各勘定シートは(D50)に収入、支出共にSUM関数で合計を求め、収支計算書に持っていく
 とき支出から収入を引いたものを合計とし(G2)を収支計算書の勘定にとばしています。
 という作りになっています。

 >"○○"の所もその5種ですか?
 ○○は全部で34種類あります。

 >最初の "ROW()-" というところは1が抜けているのでしょうか?
 すみません。この関数はここに載っていたものを
「こうすれば自分の所用になるかな」という感じで作ってみたらなったので、
 実は関数の中身の意味が分かりません。
 現物も今手元にないため、もしかすると私の入力ミス(ここに載せるとき)
 かもしれません。
 よろしければ、詳しい関数の中身を教えてもらえませんでしょうか?
 よろしくお願いいたします。(EMI)


 まこです。
 とりあえずの提案を試してくださりありがとうございます。

 >この関数はここに載っていたものを
 過去ログを、INDIRECT(ADDRESS(SMALL(IF で検索したら何件が該当しましたので、
 どれかを参考にされたのかもしれませんね。

 >よろしければ、詳しい関数の中身を教えてもらえませんでしょうか?
 過去ログに説明がありますよ。

 >もしかすると私の入力ミス(ここに載せるとき)かもしれません。
 たぶん、"ROW()-1"だと思います。

 また、配列数式については、
http://pc21.nikkeibp.co.jp/special/hr/
 に詳しい説明がありますので、ご覧ください。
 (たのしくわかりやすく説明されています。
   そして、もし理解できないのであれば、作業列を用いると可能ですから、
   作業列を使って書き直した方がいいかもしれませんね。
   ご自分にメンテナンスできる範囲で記述されてはいかがかと思います。)

 とりあえず、私でしたら、[データ]-[フィルタ]-[フィルタオプションの設定]で、
 データの抽出をします。
 現金出納帳から、項目が備品購入費だけを抽出すると、備品購入費の勘定シートができあがります。
 そして、34の勘定科目についてそれぞれデータの抽出を手作業でするのは大変ですので、
 マクロの自動記録を用いて記録したマクロを、
 気持ち修正すると34枚の勘定シートができあがります。
 また、収支計算書ですが、マクロを使わずとも、
 =備品購入費!G2 ではいかがでしょうか?
 (まこ)


 (まこ)様 アドバイス有り難うございます。色々勉強になります。
 まだフィルタオプションというものを使ったことがないので、色々試して少しづつ
 勉強していきたいと思います。
 私の発想力が乏しくどのようにすればよいかの発想が浮かばないので、ここでの
 アドバイスがすごく世界を広げて下さいます。
 現物が仕事場のため、しかも、明日、明後日と休みというものですから、火曜日に
 仕事場に行ってから、また試してみたいと思います。
 お時間をいただきますが、再度質問させていただきたいと思います


 フィルタオプションについても、過去ログにいろいろと例がありますし、
http://homepage1.nifty.com/kenzo30/ex_kisotoku/ex_ks_tokubetu9.htm
 にも説明がありますので、参考にしてください。
 それでは。(まこ)


 (まこ)様 たびたび本当に有り難うございます。
 このご親切は忘れません(涙涙)
 いろいろ過去ログも参考にしていきたいと思います。
 どのように検索してよいか分からないときもあるので、本当に助かります
 (EMI)


 フィルタオプションで勘定科目を抽出し、各勘定シートへ転記するマクロを
 組んでみたのですが、添削していただきたいです。
 よろしくお願いいたします。

Sub 転記()
'
' 転記 Macro
' マクロ記録日 : 2004/8/31 ユーザー名 :EMI

'

  Application.ScreenUpdating = False

    Range("A2:E400").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Sheets("預り金").Range("A2:E400"), Unique:=True
    ActiveSheet.ShowAllData
    Range("B2").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=2, Criteria1:="預り金"
    Range("A16:E174").Select
    Selection.Copy
    Sheets("預り金").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Calculate
    Range("F1").Select
    Sheets("現金出納帳").Select
    ActiveSheet.ShowAllData
    Selection.AutoFilter
    Range("J1").Select

   勘定科目が34あるのでここで34回繰り返すつもりでいます。

  Application.ScreenUpdating = True

End Sub


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.