- 締切済み
VBAでの転記方法を教えて下さい
はじめまして。 ExcelのVBAを使用して、一覧から請求書への転記が出来ないか考えています。 本やサイトを見て試行錯誤しているのですが、行き詰まりご教授頂けないかと思い投稿させて頂きました。 要件 1.一覧シートから必要項目を請求書の書式シートに転記する 2.一覧は約50件程度で、請求書シートは一覧にある分だけ、下に連なる 3.請求書はimageの黒い太枠ごとに印刷を行う 4.お客様への控えも一緒に印刷を行いたいので、同じ内容(一部文字が違うのみ)が二つ並ぶ 添付は簡易なイメージになります。 一覧にボタンを設置し、記入があるだけ請求書に反映できればと考えております。 宜しければお力添えをお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
yon56です。 1枚の請求書がずっと下に連なり、 1枚の書式ごとに1件の内容が転記される形は難しいでしょうか。 いいえ、難しくはありません。 書き込む回数が増えるだけです。 XXX()のデータは、プログラム内では、いつでも自由に何回でも取り出せます。 ただ、アドバイスとしては「下に連なっている部分」を別の書式として、 別シートとされる方が、今後のシステム発展にはベターだと思います。 Sheets("請求書02")とかして、同じ要領で書き込み印刷すればいいだけですから。 つまり、Sheets("請求書")部分のプログラムをコピー張り付けし、 部分的な手直しだけでプログラムが完成します。
- 米沢 栄蔵(@YON56)
- ベストアンサー率36% (37/102)
sky9881さんのお考えによく似たシステムを作った経験からアドバイスします。 <システムの要点> ・一覧と称されているシート名をAAA、そのシートを含むファイル名をBBB、そのファイルの存在するフォルダ名をCCCとします。 ・CCCの中に請求書等(印刷したい書式シート)を持つ書式様式ファイルを作り、そのファイル名をDDDとします。 ・その中に請求書に該当する書式シートを作ります。そのシート名をEEEとします。 ・プログラムのシナリオ (1)AAAより起動し、転記したいデータを取得する。(請求先数A個、転記したいデータ数B個) (2)DDDを開き、EEEを選択し、1個目の必要事項を書き込み、印刷する。 (3)印刷したデータをText形式にして、CCCの中のFFFというフォルダに保存する。(保存不要ならば省略) (4)印刷したデータを消去し、2個目の必要事項を書き込み、印刷し、Textデータを保存する。(計A回) (5)DDDを変更しないで閉じ、プログラムを終了する。 <起動> ・コントロールツールボックスより、コマンドボタンを作る。 ・Private Sub CommandButton1_Click()に標準モジュールの本プログラムZZZに跳ぶ記述をする。 ・ZZZにシナリオに沿ったプログラムを記述する。 <転記したいデータ数Aの取得> ・いろいろな手法がありますが、私はAAAのA列に1列挿入し、何番目のデータかを表す数値を入れ、そのMax値を取得する方法を採りました。ワークシート関数のMax関数です。データ数は200個以下と仮定します。 <取得したいデータの格納庫(行列変数XXX)の作り方> ・Dim XXX()→Aを取得した後、ReDim XXX(A,B) Bはあなたが設定する値 <XXXへのデータの格納方法> For H=1 to A J=Application.WorksheetFunction.Match(H,Range("A1:A200"),0) XXX(H,1)=Cells(J,Y1).Value Y1はデータの存在するセルの列番号値 XXX(H,2)=Cells(J,Y2).Value Y2はデータの存在するセルの列番号値 ・・・・・・・ Next H <DDDを開き、EEEを選択する方法> Workbooks.Open Filename :=Thisworkbook.Path & "\DDD.xls" Sheets("EEE").Select <XXXのデータをAAAに書き込み、EEEを印刷し、Text形式にしてFFFに保存し、印刷したデータを消去する方法> For H=1 to A Cells(J,Z1)=XXX(H,1) Z1はデータを書き込むセルの列番号値 Cells(J,Z2)=XXX(H,2) Z2はデータを書き込むセルの列番号値 ・・・・・・・ ActiveSheets.PrintOut (これは通常使うプリンターで印刷する方法 プリンターの選択や印刷部数設定等はご自身で) EE = Thisworkbook.Path & "\FFF\" & Format(Date, "yymmdd") & Format(H, "000") & ".txt" Open EE For Output As #33 (33は私の好きな数値) For M = 1 To 60 (EEEにデータが入力されている範囲が60行10列と仮定) Write #33, Format(M, "00"), Cells(M, 1), Cells(M, 2), Cells(M, 3), Cells(M, 4) _ , Cells(M, 5), Cells(M, 6), Cells(M, 7), Cells(M, 8), Cells(M, 9), Cells(M, 10) Next M Close #33 Range(Cells(J,Z1),Cells(J,Z2),・・・・・・・)="" Next H <DDDを変更しないで閉じ方法> Workbooks("DDD.xls").Close False 長々と失礼しました。
お礼
詳細まで記載いただき、本当にありがとうございます。 1点お伺いしたいのですが、1枚の請求書がずっと下に連なり、 1枚の書式ごとに1件の内容が転記される形は難しいでしょうか。 もし宜しければご返答頂けると助かります。 宜しくお願い致します。