- ベストアンサー
新しく入力した分だけ印刷したい
いつもお世話になっております。 きれいに印刷し残したいので、質問させていただきます。 会社の部分的な収支内訳を毎日手書きにて台帳に記入しております。 これを銀行の通帳の記帳みたいに、新たに入出金があった部分だけを以前記帳された次の行から台帳に印刷したいのですが、可能でしょうか? 可能であればどのような方法なのか教えていただきたいと思います。 なお、パソコン環境ですが、通常一般家庭で使用しておりますパソコンとプリンタの状態です。 また印刷する用紙もルーズリーフの収支記入用紙です。 記入する量も一日一行の時もあれば十数行の時もあります。 量的にも多くなく今まで手書きでやってきましたが、できるようになれば検索などの時は便利かなと考えております。 ご回答宜しくお願いいたします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
回答No4です。 返事が送れて申し訳ありません。 次のようなマクロでどうでしょう。 Sub 新規部分の印刷() Dim gRange As Range Dim n As Integer Set gRange = Application.InputBox(Prompt:="新規に印刷したい範囲の行を選択してください。", Title:="行選択", Type:=8) Application.ScreenUpdating = False n = gRange.Row - 1 Range(Cells(1, 1), Cells(n, 256)).Select Selection.Font.ColorIndex = 2 ans = MsgBox("新しいデータの行を印刷しますがよろしいですか?", vbYesNo) If ans = vbYes Then ActiveSheet.PrintOut Selection.Font.ColorIndex = xlAutomatic End If Application.ScreenUpdating = True Cells(n + 1, 1).Select End Sub
その他の回答 (8)
- hallo-2007
- ベストアンサー率41% (888/2115)
No5,8です。 >D3に繰越残高を入れる点が気にかかります 途中で話を勘違いしているかもしれません。 最初の回答にありますSheet1のB2に繰越残高をいれて残高を表示させます。 データ上ですので、最初の収入に繰越金を入力することは問題ありません。 経理上の問題を解決するには Sheet2の表現です。 一案ですがmSheet1上に A B C D 繰越金 100000 日付 収入 支出 残高 7/1 1000 7/1 900 7/2 2000 7/2 3000 7/3 1000 と上に行を挿入してB1セルに繰越金を入れておく。 D3の式は =IF(A3="","",SUM(B$1:B3)-SUM(C$1:C3)) でコピィすることになります。 最初にアドバイスしましたように、今までの概念を変えないとパソコンを活用しないと便利になった思うようにはなりません。 単に、ワープロの延長線のパソコンにならないようにがんばってください。
お礼
ご回答ありがとうございます。 sheet1と sheet2を使うことを見落とししておりました。 教えていただきました収支残高の式を使わせていただきます。 また、概念を変えることから始めなければならないこと 痛感いたしました。 何度もご回答ありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
>=F3+IF(A4="","",SUM(D$3:D4)-SUM(E$3:E4)) となってしまします。 そうなりますよね、ところでF3には、どのような数字が入っていますか? 下へコピィした式の SUM(D$3:D4)の部分を良く見てください。 SUM(D$3:D5) SUM(D$3:D6) と$マークが付いていない方が増えていき、$マークが付いているとそのままです。 D3に今までの残高をいれて =IF(A3="","",SUM(D3:D$3)-SUM(E3:E$3)) としてみてください。 理由を説明するために、空いている列に =SUM(D3:D$3) といれて下へコピィ、これは今までの収入の合計になりますよね。 別の列に、=SUM(E3:E$3)下へコピィ、これは今までの支出の合計になりますよね。 その合計の差で、残高になるはずですが。
お礼
何度もご回答いただきありがとうございます。 >ところでF3には、どのような数字が入っていますか? 直接入力しました数字が入っております。 >D3に今までの残高をいれて =IF(A3="","",SUM(D3:D$3)-SUM(E3:E$3)) としてみてください。 この通りしましたら、入出金の残高が合うようになりました。 ただ簿記が専門でないのではっきりわかりませんが、D3に繰越残高を入れる点が気にかかります。できたらF3の残高の欄に入れたいところです。 しかしながら、いままでのご回答を頂きました点を使わせていただきまして、有効にやっていきたいとおもいます。何度もご回答いただきまして本当にありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
No5です。 >=F2+IF(A3="","",SUM(D3:D$3)-SUM(E3:E$3)) 頭に残高の入力セルを入れましたら、最初の行の残高は合うのですが、次の行からは金額が合わなくなります。 下へコピィしたときの式を見てください。 =F3+IF(A4="","",SUM(D4:D$3)-SUM(E4:E$3)) となっていませんか、最初にあるF3+・・・は大丈夫でしょうか? もし、下へコピィしても行番号を変えたくないときに =F$2+IF(A3="","",SUM(D3:D$3)-SUM(E3:E$3)) と$を使用します。 もし今までの残高をいれるのであれば、別セルF2に入れるのではなく、D3に入れておくと良いと思います。 >下までコピーした場合に空白行の残高部分が #VALUE! と表示されますが、表示されない方法はありますでしょうか? 一応、IF(A3="","",収入の合計-支出の合計)とIF文でエラー処理していますので、A列が空白のときは表示されないと思います。 もし、他の列で処理したい場合は IF(B3="","",・・・とかにしてみてください。
補足
hallo-2007 様 何度もご回答いただきありがとうございます。 しかし、うまくいきません。 下にコピーいたしました式です。 =F3+IF(A4="","",SUM(D$3:D4)-SUM(E$3:E4)) となってしまします。 コピーではうまくいかないので直接入力しても勝手に上の式になってしまいます。式の頭に残高を入れてしまうと金額が合わなくなってしまいます。D3に入れても同じでした。 残高を入れない場合は計算は合うのですが・・・ $をはずし、=F3+IF(A4="","",SUM(D4)-SUM(E4)) の式では正しい金額がでてきますが、これではうまくないのでしょうか? また、空白行の #VALUE! の件ですが、 残高(F3やD3)を式に加えた場合に #VALUE! と表示されてしまいます。これも残高を入れない場合は表示されずうまくいきますが・・・・
- hallo-2007
- ベストアンサー率41% (888/2115)
>回答いただきました毎日1日分を印刷することも一考させていただきます せっかくですので、一案回答いたします。エクセルを前提としています。 仮に、新しいブックを作成して Sheet1に A B C D F 日付 収入 支出 残高 7/1 1000 7/1 900 7/2 2000 7/2 3000 7/3 1000 と日々、収入と支出を入力しているとします。 残高(D2)には、=IF(A2="","",SUM(B2:B$2)-SUM(C2:C$2) と入れてたっぷりと下までコピィしてみてください。$マークに注意してください。 日々に残高が計算されると思います。 別途、Sheet2には日々の報告書の印刷を画面を作成します。 A B C D 1集計日 2 7/3 収入 支出 残高 3前日末集計 4当日明細 5 6 7 ・・・ 30当日集計 31当日末合計 と印刷のためのシートを作成したとします。 B31の最終的な収入の合計は =SUM(Sheet1!B:B) 支出の合計は=SUM(Sheet1!C:C)ですよね。 残高は =B31-C31 で出ます。 当日の明細の表示が少し厄介ですので、作業列をSheet1のF列に作っておきます。 Sheet1のF2に =IF(A2=Sheet2!A$2,ROW(),"") と入れて下までたっぷりとコピィしてください。 Sheet2のA2で指定した日付の行にのみ、その行番号が表示されるはずです。 Sheet2のB4(指定した日付の明細を表示したいセル)には =IF(ISERROR(SMALL(Sheet1!$F:$F,ROW(A1))),"",INDEX(Sheet1!B:B,SMALL(Sheet1!$F:$F,ROW(A1)))) といれて右へひとつコピィ 下へ28行目までコピィすると指定した日付の一覧表がでると思います。 この式が厄介ですが、わからないときは、空いている行に =SMALL(Sheet1!$F:$F,ROW(A1)) とか =INDEX(Sheet1!B:B,SMALL(Sheet1!$F:$F,ROW(A1))) いれてその表示を確認してみてください。多分わかってもらえると思いますが難しければ 再度、補足してください。 当日の合計(30行目)は、=SUM(B4:B29) と =SUM(C4:C29) ですよね。 前日の収入、支出、残高83行目)は、=B31-B30 ですよね。 毎日、Shhet2のA2セルに日付を入れて、印刷することになります。 もう一つテクニックを加えるならA2セルに =MAX(Shhet1!A:A) と入れておけば、必ず最新の日付になります。 専用のルーズリープの用紙を何回も使用するより、白紙の用紙に印刷したほうが安価ですしきれいになります。 日々のデータも確認できます。 エクセルに限らず、データを取り扱うときの一般的な方法ですので、式を理解されたら色々と応用してください。 取り合えず、サンプルのエクセルファイルを作成して上司に見せてあげてください。 これだけでも十分説得力があると思います。
補足
早々のご回答いただきありがとうございます。お礼が遅くなって申し訳ございません。 ご回答の中で勉強不足でつまずいておりました。 残高(D2)には、=IF(A2="","",SUM(B2:B$2)-SUM(C2:C$2) と入れてたっぷりと下までコピィしてみてください。$マークに注意してください。 日々に残高が計算されると思います。 とご回答いただきましたが、前日までの繰越残高を入れたいと思い =F2+IF(A3="","",SUM(D3:D$3)-SUM(E3:E$3)) 頭に残高の入力セルを入れましたら、最初の行の残高は合うのですが、次の行からは金額が合わなくなります。 また、下までコピーした場合に空白行の残高部分が #VALUE! と表示されますが、表示されない方法はありますでしょうか? お時間があれば再度ご教示お願いできれば幸いです。
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No2です。 次のようなマクロで実行が可能です。 Sub 新規部分の印刷() Dim gRange As Range Set gRange = Application.InputBox(Prompt:="新規に印刷したい範囲の行を選択してください。", Title:="行選択", Type:=8) Application.ScreenUpdating = False n = gRange.Row - 1 Range(Cells(1, 1), Cells(n, 265)).Select Selection.Font.ColorIndex = 2 ans = MsgBox("新しいデータの行を印刷しますがよろしいですか?", vbYesNo) If ans = vbYes Then ActiveSheet.PrintOut Range(Cells(1, 1), Cells(n, 265)).Select Selection.Font.ColorIndex = xlAutomatic End If Application.ScreenUpdating = True End Sub
補足
早々のご回答いただきありがとうございます。お礼が遅くなってしまい申し訳ございません。 マクロに関して勉強不足で、つまずいております。 ご回答いただきましたマクロをコピーし使いましたら 実行時エラー”1004” アプリケーション定義またはオブジェクト定義エラーです。 となってしまいます。 お時間ございましたら、再度ご教示お願いできれば幸いです。
- hallo-2007
- ベストアンサー率41% (888/2115)
パソコンを活用する事にきめたのであれば、今までのやり方から脱皮する必要があります。 今まで手書きで記入していた台帳にずれなく印字するのは、安価なプリンターでは至難の技です。 エクセルなどで、手書きの台帳に似たフォーマットを作成。 日々の収支を入力して、毎日、白紙の用紙に1日分の作業を印刷します。 多分、様式の一番上行には前日収支集計残高、一番下には本日集計残高、捺印欄などを 印刷し、ファイリングしていくことになると思います。 上司と相談してみてください。 最終的には、データ管理で法律上必要な書類を印刷保管する事になると思います。
お礼
ご回答ありがとうございます。 私としては hallo-2007 様のようにやり方を変える方がいいと思っているのですが、会社の上司は今まで通りに記入するようにとのことで、変更することはなかなかすぐにはいかないようです。 ご回答いただきました毎日1日分を印刷することも一考させていただきます。 ありがとうございました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
紙も節約して前日に使った用紙に続けて新たに追加された分を印刷したいとうことでしたら次のようにすることでしょう。 印刷を開始する前に前日で印刷した行までの分についてはその範囲の行なりを選択してからフォントの色を白に設定します。これで見かけ上は前日までの分については白で文字が無いようになりますね。 その上で、前日に用いた用紙をプリンターにセットして印刷することで、新たに追加されたデータが印刷されますので用紙を無駄なく使うことができますね。
お礼
ご回答ありがとうございます。 なるほどフォントを白に設定するのは思いつきませんでした。 これなら確実に私が思っていたとおりに印刷できますね。 この方法にマクロで入力終了時フォントが白くなり、印刷終了後元に戻るように組めないものでしょうか? もしお時間などありましたら、再度ご回答お願いいたします。
- mira723
- ベストアンサー率20% (160/781)
何に入力しているのか分かりませんが、自分であれば エクセルを使い、入力日付を入れるようにします そうすれば検索も出来ますし、入力した部分の印刷もできます
補足
早速のご回答ありがとうございます。 入力はエクセルを使いたいと思っております。 質問内容がわかりづらくてすみません。 もう少し詳しく説明いたします。 一枚の用紙上に20行あれば、 仮に初日 5行入力し通常通り印刷 このような状態の時に、翌日の入力分を6行目に印刷したいということです。これを毎日繰り返すときに便利な方法があればと思った次第です。 もちろん1枚の用紙分が埋まった段階で印刷すれば問題はないのですが、一日の業務終了時点でその日の入力分を印刷しておきたいもので質問をさせていただきました。 宜しくお願いいたします。
お礼
KURUMITO 様 すばらしいです 思っていたとおりのことができるようになりました。 このようなマクロを組める人を尊敬いたします。 教えていただきましたことをうまく使っていきたいと思います。 今回は本当にありがとうございました。