• ベストアンサー

エクセルのマクロで会社別・商品別に納品書を出力したい

 エクセル2000のマクロを使って納品書を自動出力したいと思っています。  下のように、一覧表に数値を入力してからそれをもとに納品書を出力する、というものです。 【シート1(一覧表)の内容】    烏龍茶  ビール  日本酒 A商事   3   10      B商事        5    1 C商事   2 【シート2(納品書)の内容】 A商事 御中   「烏龍茶」 3ケース  例えば、「A商事」向けに「烏龍茶」と「ビール」の納品書を1部ずつ印刷します。  過去ログもいろいろ調べてみたのですが、なかなか良いヒントが得られませんでしたのでご教授よろしくお願いします。

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

  • ベストアンサー
  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

マクロは、次の通り。 Sub test() For i = 2 To 4 For j = 2 To 4 Sheets("sheet1").Select If Cells(i, j) <> "" Then Sheets("sheet2").Cells(1, 1) = Cells(i, 1) & "御中" Sheets("sheet2").Cells(3, 1) = "「" & Cells(1, j) & "」" Sheets("sheet2").Cells(3, 2) = Cells(i, j) & "ケース" Sheets("sheet2").Select Worksheets.Print End If Next Next End Sub

SHU_2006
質問者

お礼

ありがとうございました。まさにこれです! 思い通りに実現することができました。 一つひとつの意味も大体解り、自身の業務向けにアレンジしているところです。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

例 データ Sheet1 A1:D4 納品先 商品 烏龍茶 ビール 日本酒 A商事 3 10 B商事   5 1 C商事 2 ーーー Sheet2 12 月分 納品書 A1,B1,C1   下記の通り納品します B2 C商事 御中 A3,B3   空白行   商品名 数量 単価 金額 B5からE5   烏龍茶 2        B6-E6 Sheet2のA1は=MONTH(NOW())を設定してます。 ーーーーー 標準モジュールに Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '------ For i = 2 To sh1.Range("A65536").End(xlUp).Row For j = 2 To 4 If sh1.Cells(i, j) <> "" Then sh2.Cells(3, "A") = sh1.Cells(i, "A") 'A2会社名 sh2.Cells(6, "B") = sh1.Cells(1, "B") 'B5品名 sh2.Cells(6, "C") = sh1.Cells(i, j) 'C5数量 sh2.Cells(6, "D") = sh1.Cells(i, "F") 'D5単価 sh2.Cells(6, "E") = sh2.Cells(6, "C") * sh2.Cells(6, "D") 'E5金額 '--印刷 sh2.Range("A1:F10").PrintOut '---クリア(会社名以外) sh2.Cells(6, "B") = "" 'B5 sh2.Cells(6, "C") = "" 'C5 sh2.Cells(6, "D") = "" 'D5 sh2.Cells(6, "E") = "" 'E5 End If Next j '次列へ行き繰り返し '----クリア(変動セル全て) sh2.Cells(2, "A") = "" 'A2 sh2.Cells(6, "B") = "" 'B5 sh2.Cells(6, "C") = "" 'C5 sh2.Cells(6, "D") = "" 'D5 sh2.Cells(6, "E") = "" 'E5 Next i '次行へ行き繰り返し End Sub (行が変わる時の、後半クリアC,D,E列は不要かも) ーー とりあえず、上記簡単データでテストしてみてください。 5枚シートが印刷され出てくるはず。 ーーー (チューニング) まづSheet2の印刷項目が本番ではどうなるか決めて、テストの コードのどの部分に影響する(当然追加もある)か考えること。 Sheet2の不動文字(見出し、罫線、項目見出し)の内容、位置 フォントや書式(色、サイズ、種類、配置)など手作業かVBAで設定のこと。 変動セルの数量セルと得意先名セルは表示形式を手作業かVBAで設定のこと。フォント、行高、列幅、罫線なども同じ。 これらのコードは操作をして、マクロの記録をとればわかります。 ページ設定についても、マクロの結果の該当部分を、本件向きに適当に修正してください。(上記コードには、全く含めていません) 印刷範囲はSheet2が完成すれば自ずと決まる。 Sheet1が上例と変わるとどこが変わるか、じっくり考えてください。 ーーー しかし、単価のない納品書など許されるの? 単価が得意先別に品物別に決まるなら、事ですぞ。 本格的なACCESSでも使う勉強をしてください。 その点、判らないので、とりあえず上の例では、ほったらかしています。 一般に仕事に関連した、この程度のものをエクセルVBAで作るのは 余程VBAのベテランでないと難しいのでは。 アクセスを使うのが適当と思うが、これも難物。

SHU_2006
質問者

お礼

分かりやすい説明ありがとうございます! 実は納品書ではないのです。ごめんなさい。 FAXの送付状のような書類を作成したいと思っていたのです。 書類が「A商事」向けに何件、「B商事」向けに何件という内容ですが、ネット上のサンプルを見て納付書がイメージに近いと思い、質問させて頂いた次第です。 これを機にいろいろと勉強していきたいので、よろしくお願いします。

関連するQ&A

  • エクセルのマクロでHTMLファイルを出力するには

    エクセルのマクロでHTMLファイルを出力するには 下記アドレスのソースをもとに、エクセルでHTMLファイルを複数出力できたらと考えています。 内容は、sheet1のA列にテキストが入っていると、それを任意のファイル名(ダイアログ)でテキストとして保存が可能になるソースです。 ttp://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_040.html 出来ればこれを以下のように変えたいと考えております。 ●シート名「1」~「50」の計50シートのA列のテキストを、 それぞれのシート名+任意の文字列で保存をしたい。 ●ファイル名の任意の文字列については、シート内のセル (例:sheet1のA4)に記載されている内容としたい。 ●ファイル形式は、HTML形式で保存をしたい。 ●保存先のフォルダは任意のディレクトリ内 (例:C:\Documents and Settings\All Users\デスクトップ)の配下に、 シート内のセル(例:sheet1のA3)に記載されている内容を フォルダ名として、新規に作成し、その中に保存したい。 恐れ入りますが、ご回答よろしくお願いいたします。

  • エクセルでシートコピーするマクロについて

    マクロ初心者です。宜しくお願いします。 エクセルで一つのSheet1があります。そのSheet1には、一覧表があります。マクロを実行することで、Sheet1の後ろにSheet2を作成して、Sheet1と同じ一覧表をコピーして表示できるようにし、それを、マクロを実行すれば、ワークシートが一枚追加され、Sheet2のシート名になり、シートを追加する度にシート名が、Sheet3、Sheet4、Sheet5となるようにしたいです。 分かりづらい説明ですが、宜しくお願いします。

  • エクセルで納品書を作成する

    納品、請求書をエクセルで作成しようと始めました。 第一歩でつまずきましたので教えてください。 シート1に納品書の雛形を作りシート2に顧客名簿一覧を作る。 シート1名前に電話番号(下4桁)を打ち込むと該当顧客の シート2の内容がシート1のテキストボックスに表示される。 選択すると、シート1名前が電話番号の顧客に変わる。 こんな風にしたいのですが、シート2の内容をテキストブックにコピーする方法がわかりません。 どうか初心者にわかるようにお教えください。

  • エクセル ツールバーからの呼び出しマクロのシート非表示 

    他部署から受け取った一覧表の内容をチェックするエクセルマクロをツールバーのボタンに割り当てていますが、一覧表を開いておいてボタンを押すとマクロを組み込んだエクセルシート(VBA上でのThisWorkbook.Sheet)が表示されるようになりました。以前は一覧表の裏に隠れていたはずなんですが、目障りなのでこのシートを表示しない方法を教えてください。複数体制なので共有ドライブに置いたエクセルマクロを各自が自分のツールバーに組み込んで使っています。 (アドインでは修正発生時に各自が再度取り込む必要があると思って避けています)

  • VBAマクロでCSV出力

    はじめまして、よろしくお願いします。 ExcelのVBAマクロで 特定のセルの範囲を「シート名.csv」で出力するようなプログラムを書きたいです。 例)シート名「TEST」内にあるマクロボタンを押すと  A1:A10のセルの内容が「TEST.csv」(アスキー形式ならなんでも)  に出力される。 どういうやり方があるか、お勧めのサイト等、 ご教授いただけないでしょうか? 以上、よろしくお願いいたします。

  • エクセルマクロ ファイル出力

    エクセルマクロにおいてファイル出力の件で、教えてください。 Asheetに、PDF出力とCSV出力を一括で行えるマクロを付加したボタンを作成したいです。 PDF出力範囲は、AsheetのA1:L40で固定。 CSV出力範囲は、BsheetのA1:BF29で固定。 また両方の出力ファイル名を、AsheetのF1の内容をファイル名にしたいです。 マクロに関して初心者ですので、お手柔らかにお願いいたします。 よろしくお願いいたします。

  • エクセルのマクロでエラー処理

    WindowsXPでOffice2003です。 エクセルのマクロの初心者です。 履歴一覧表から部屋別シートに転記しようとしています。 シート名は部屋番号を、数字のみ (4桁)、A101~、B101~に分けています。 今、一覧表の部屋番号が、本来A101のところがA-101になっていたりすると、シート名が見つからずエラーになってしまいます。 この時にA-101をA101に書き換えて続行させる方法が分からず立ち往生しています。 急いではいませんのでよろしくお願いします。

  • EXCELのマクロを教えてください

    マクロ初心者のため教えてください SHEET1に下記のデータがあり A   B   C   D 名前 性別 年齢  クラス それをある条件(たとえば 性別が男で年齢が20歳以上)でSHEET2に一覧表として作りなおしたいのです。並び替えてやってもできるのですが、定期的な作業のため マクロでボタンを押してできるようにしたいと思っています。又データが5000件程度あるため結構毎回面倒になっています。 教えてください。 説明に不足があれば補足させていただきます よろしくお願いします

  • エクセルでマクロをやりたい。

    エクセルメニュー「ツール」→「マクロ」→「Visual Basic Editor」を開いていただき、左にある「プロジェクト」の一覧表などの置いてあるシート名          上記の様には開けません。そもそもツールの中にマクロが無いのです。                

  • オフコンで出力した納品書のデータをエクセル修正したいのですが。

    T社のオフコンで売上計上処理し、そのあとレーザプリンタで出力するA4版「納品書」という帳表があります。特定の得意先用で、その日売り上げた商品や数量、単価、金額などが載っています。これをOCRソフトかなんかで読み込んで、MS-Excel2000に変換し、単価を一律80円UPに手で修正し、金額欄も再計算して客に送りたいのですが、具体的にどんなツールを使用すべきでしょうか?あるいはよい方法がありますか?オフコンのデータは素人には到底扱うことができませんし、「日次更新をかける」とやらをやるとそのデータもどこだかわからないエリアに消えてしまいます。従って作業者の手元には出力された「納品書」の表があるのみです。エクセルでそっくりに作成した「納品書」フォームにオフコン帳票の内容を1件1件手打ち入力したほうが作業は早いでしょうか。

専門家に質問してみよう