- ベストアンサー
セルの値を別シートの月別合計リストに貼り付けるには
- VBAを使用して、セルの値を別のシートの月別合計リストに自動的に貼り付ける方法をご紹介します。
- 貼り付ける側のシート名は「請求金額一覧表」で、A列には70社分の会社名が並んでいます。
- 請求書の合計金額をコピーして、該当する会社の該当月に貼り付けることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
状況がよくわからないのですが。 まさか請求書が1枚だけということはないでしょう。沢山の請求書がどのような形で入っているのが、単なるコピーでいいのか、加算するのか。 実行前に請求金額一覧表を初期化する必要があるのか。 会社が存在しない場合(打ち間違い等で可能性はある) 年をどうするのか。 それとも、請求書を入力し一覧表にコピペ。破棄して別会社の請求書入力という運用をしているのかもしれません。しかし、それでは、間違いがあったときが大変です。 ' Option Explicit ' Sub Macro1() ' Dim IRange As Range Dim Col As Integer ' Set IRange = [請求金額一覧表!A:A].Find([請求書!E10]) ' If Not IRange Is Nothing Then Col = Month([請求書!N3]) + 1 Sheets("請求金額一覧表").Cells(IRange.Row, Col) = [請求書!X42] End If End Sub このプログラムは、請求書が1枚だけ、請求金額一覧表と同じワークブックにあり、会社名と月を検索しコピぺ。会社がない場合・年を無視しています。上記の問題を挙げていただくか、又は、これを参考に自分で作って下さい。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
データの各社の状況(他に月別の状況=シートのデータ状況)がよく説明されてない。他社も含めて、1つのシートの観点からどうなっているのか? >Select Case やIf else if を使うと、マクロ分がとんでもなく長くなりそうです。 普通は探索はFindやシートの探索でデータのあり場所をさがすものだ。 探すという思考の中に、IFを繰り返すというプロセスはあるが、IFはVBAなどの過程で使わないものだ。IFの過程は意識させないように、メソッドなどがゆ苦られている。質問は初心者的な書き方なんだが、質問者のVBAの経験はいかほどか? この程度で会社のシステム(特に金にかかわる請求書など)を扱うのは早すぎるのでは。 ーー 参考までに、 会社名がシート名になっている場合は、そのシートを開くには Sub test03() nm = InputBox("会社の名前") ThisWorkbook.Sheets(nm).Activate Application.VBE.MainWindow.Visible = False End Sub のように指定するだけで、検索というには、違和感があるだろうが。 月の数字がシート名に入っている場合(東西商事12)などの場合は、多少修正が必要だが。 ーー Access(さらにVBA)ぐらいに慣れて多少習熟しないと、エクセルぐらいで他社に出す請求書を作ろうというのは、会社にとって、危険と思う。 データベース機能が必要のため。 差し込み印刷を使って請求書を作る方法なんてのもありますよ。
お礼
ご回答ありがとうございます。 請求書作成はマクロで組んでいます。作成後、何度も検証してから実際に運用しております。 一か月の請求書枚数は十数社程度ですので、万が一計算に間違いがないかは、実際に打ち出された情報を見て確認しています。 多分Accessのほうが、こう言う処理には向いていると思いますが、Accessの知識がありません。会社規模も小さいためExcelで運用している状況です。
- bunjii
- ベストアンサー率43% (3589/8249)
会社のお仕事ですよね? 安易にVBAで自動処理すると取り返しのできない失敗をすることになります。 お金が掛かっても専門のプログラマーにシステムを構築して貰うべきでしょう。 >Select Case やIf else if を使うと、マクロ分がとんでもなく長くなりそうです。 「マクロ分」は「マクロ文」の誤変換かと思います。 このような誤りが起る人はプログラムを組む上で重大な誤りや論理の思い違いが起ると思われます。 従って、前述のように専門のプログラマーに依頼して作業の効率化に役立てるべきと思います。 また、会社の仕事は小さな要素でも利益追求に影響しますので利益を増やすためのアイディアや処理方法を無償で第三者から受けるのは如何なものでしょう?
お礼
ご回答ありがとうございます。 一つのブック上で請求書入力フォームの値を行単位で別のシートに行単位でコピーして、そのコピーした一覧リストにフィルターをかけて、可視セルの内容を請求書フォームに貼り付けるマクロを作成しています。(自分で何とか作成しました。) 問題なく運用できているのですが、後で各社・各月の請求金額一覧票が必要になり、手作業でしている状態です。 会社名が○○で、月が1なら別シートの会社名○○の1月のセルに、月が2なら別シートの2月のセルに貼り付けなさい、みたいなマクロを考えているわけです。
お礼
ご回答ありがとうございます。 説明不足で済みません。シート名"請求書入力フォーム"に記入した値はマクロを実行して、請求書データベースというシートに行単位で保存されます。 請求書データベースでは、Excelのフィルター機能を使って会社名や日付で、一社の該当月の請求書一覧を表示させ、可視セルを作業用シートに一時的にコピーするマクロを使って、作業用シートにコピーします。次に作業用シートのセルの値を、シート名”請求書”に表示させるという流れです。 一社毎に請求書を表示させて印刷しています。作業する人はフィルター機能を使って手作業で必要な情報を表示させるのは面倒ですが、その後、可視セルの内容を作業用シートにコピー、作業用シートの値を、請求書シートに貼り付け、印刷画面を表示させるところまで、マクロのボタンを一つを押せばできるようにしています。 今回、ご提示頂いたマクロを参考に検証してみます。ありがとうございました。