こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

セルの値を別シートの月別合計リストに貼り付けるには

一社の該当月の請求金額合計がシート名"請求書"のX42に入ってます。これを別のシート"請求書一覧表"の該当する会社の該当月に自動で貼り付けるVBAはありますでしょうか。シート名"請求書"には会社名がE10に、発行年月日がN3に入っています。



貼り付ける側のシート名”請求金額一覧表”のA列のA2から下に会社名が70社入っています。横列はB1からM1まで1月~12月の名前が入っています。今は、"請求書"シートの合計金額をコピーして、”請求金額一覧表”シートの該当する会社の該当月に貼り付けています。

これをVBAで自動処理できればと思っています。

この日付と会社名を使って条件分岐のVBAは可能でしょうか?
今考えているのはN3に入っている発行年月日を、同じシート上で例えば =month(N3)で月だけ取得して、その月と会社名を取得して
それを、請求金額一覧表”の特定のセルに貼り付ける事を考えました。Select Case やIf else if を使うと、マクロ分がとんでもなく長くなりそうです。やはり無理でしょうか?

投稿日時 - 2018-02-18 23:30:25

QNo.9430428

困ってます

質問者が選んだベストアンサー

 状況がよくわからないのですが。
 まさか請求書が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枚だけ、請求金額一覧表と同じワークブックにあり、会社名と月を検索しコピぺ。会社がない場合・年を無視しています。上記の問題を挙げていただくか、又は、これを参考に自分で作って下さい。

投稿日時 - 2018-02-19 05:40:00

お礼

ご回答ありがとうございます。
説明不足で済みません。シート名"請求書入力フォーム"に記入した値はマクロを実行して、請求書データベースというシートに行単位で保存されます。

請求書データベースでは、Excelのフィルター機能を使って会社名や日付で、一社の該当月の請求書一覧を表示させ、可視セルを作業用シートに一時的にコピーするマクロを使って、作業用シートにコピーします。次に作業用シートのセルの値を、シート名”請求書”に表示させるという流れです。

一社毎に請求書を表示させて印刷しています。作業する人はフィルター機能を使って手作業で必要な情報を表示させるのは面倒ですが、その後、可視セルの内容を作業用シートにコピー、作業用シートの値を、請求書シートに貼り付け、印刷画面を表示させるところまで、マクロのボタンを一つを押せばできるようにしています。

今回、ご提示頂いたマクロを参考に検証してみます。ありがとうございました。

投稿日時 - 2018-02-19 15:16:16

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

データの各社の状況(他に月別の状況=シートのデータ状況)がよく説明されてない。他社も含めて、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)ぐらいに慣れて多少習熟しないと、エクセルぐらいで他社に出す請求書を作ろうというのは、会社にとって、危険と思う。
データベース機能が必要のため。
差し込み印刷を使って請求書を作る方法なんてのもありますよ。

投稿日時 - 2018-02-19 13:01:04

お礼

ご回答ありがとうございます。
請求書作成はマクロで組んでいます。作成後、何度も検証してから実際に運用しております。

一か月の請求書枚数は十数社程度ですので、万が一計算に間違いがないかは、実際に打ち出された情報を見て確認しています。

多分Accessのほうが、こう言う処理には向いていると思いますが、Accessの知識がありません。会社規模も小さいためExcelで運用している状況です。

投稿日時 - 2018-02-19 15:39:25

ANo.2

会社のお仕事ですよね?
安易にVBAで自動処理すると取り返しのできない失敗をすることになります。
お金が掛かっても専門のプログラマーにシステムを構築して貰うべきでしょう。

>Select Case やIf else if を使うと、マクロ分がとんでもなく長くなりそうです。
「マクロ分」は「マクロ文」の誤変換かと思います。
このような誤りが起る人はプログラムを組む上で重大な誤りや論理の思い違いが起ると思われます。
従って、前述のように専門のプログラマーに依頼して作業の効率化に役立てるべきと思います。
また、会社の仕事は小さな要素でも利益追求に影響しますので利益を増やすためのアイディアや処理方法を無償で第三者から受けるのは如何なものでしょう?

投稿日時 - 2018-02-19 08:14:55

お礼

ご回答ありがとうございます。

一つのブック上で請求書入力フォームの値を行単位で別のシートに行単位でコピーして、そのコピーした一覧リストにフィルターをかけて、可視セルの内容を請求書フォームに貼り付けるマクロを作成しています。(自分で何とか作成しました。)

問題なく運用できているのですが、後で各社・各月の請求金額一覧票が必要になり、手作業でしている状態です。

会社名が○○で、月が1なら別シートの会社名○○の1月のセルに、月が2なら別シートの2月のセルに貼り付けなさい、みたいなマクロを考えているわけです。

投稿日時 - 2018-02-19 15:26:08

あなたにオススメの質問