- ベストアンサー
エクセル・マクロで請求と売上の連結
excel2003で、請求書作成ファイルで作成した請求内容を売上台帳ファイルに 転記するマクロを作りました。 請求書作成ファイルのマクロで売上台帳ファイルを開き、転記すことはできたのですが、 売上台帳は、4~3月の月分シートを作っていて、 例えば5月分の請求内容を5月分シートに転記するのですが、 前処理として、予め、売上台帳ファイルの5月分シートを開いて保存してないと、 5月分のシートに転記しません。 これを、請求書作成ファイルのマクロ上で、 簡単に売上台帳ファイルの該当の月分シートを開いて転記することは可能でしょうか。 ちなみに転記する内容は、日付、請求先、請求金額です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>転記する内容のうちの日付を利用して、売上台帳のシートを開くことはできますか? できますよ。 まずは、質問とちょっと違いますが、「今月」の売上台帳を開く方法から説明します。 その場合は、 NameSheet = InputBox("Sheet name?") をこういう風にします。 NameSheet = Format(Date,"yyyymm") Dateというのは、VBAで現在の日付を返す関数で、Format()は、変数を特定のフォームの文字列として返す関数です。 上のようにすると、例えば今日この式を走らせると 「201204」という文字列を返します。 2012年04月と言う意味です。シートの名前をこういう風にすることにしておけば、このマクロを走らせると、自動的に「今月」のシートを開きます。 Format()については、VBAのヘルプや例えば↓のサイトで調べてみてください。これは使いでのある関数です。 http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/function/vba_string3.html 次に、 >転記する内容のうちの日付を利用して、 ですが、一言で言えば、上の例でDateとしたところを、その記入してある日付にするのです。 必ず日付がセルA1にあるのなら、Dateの代わりにRange("A1").Valueとします。そのセルの書式によってはもしかしたら、そのままでは正しい値を返さないかもしれません。でもたぶん、日付の書式でしょう? 日付が、決まった場所にない場合は、それを見てみないとなんともしようがないです。 例えば、その請求書作成ファイルのデータが一覧表の形式で、A列が日付だと言う場合は、 Cells(Activecell.Rows, 1).Value これで、今選択しているセルのある行のA列の値を返します。
その他の回答 (1)
ようするに >該当の月分シートを開いて ができればいいんですか? もし、それでよければ、売上台帳ファイルを開いた後に Worksheets("5月").Activate というのを一行追加すればいいです。 もし、何月というのを、任意に決めたければ Dim NameSheet as String ........ NameSheet = InputBox("Sheet name?") Worksheets(NameSheet).Activate というようにします。 シート名を入力し、入力したシート名のシートがなければエラーを出します。
補足
早速のご回答、感謝しております。 うまく動きました。 インプットボックスにシート名を入力させる方法以外に、 転記する内容のうちの日付(請求書作成ファイルでは、 請求の発生した日、例えば5/5というに記入しています)を 利用して、売上台帳のシートを開くことはできますか? この場合、シート名は変更しても構いません。 「最初から、そのように言え!」と怒られそうですが、すみません!うまく言葉が文字にできなくて・・・!もったいぶった言い方になりました。
お礼
ありがとうございました。 Dim NameSheet As String NameSheet = Format(Range("A1).Value,"yyyymm") を、売上台帳をopenした後に記述したため、うまくいかず苦戦しましたが、 ”ひょん”なことから閃いて(出来る方は単なるケアレスミスでしょうが、(^_^;) ) openを後にしたら、バッチリ動きました。 マクロの初心者なので、思い切り感動しました。