エクセルのマクロで商品データを一括印刷する方法

このQ&Aのポイント
  • エクセルのマクロを使用して、シート1からシート3の商品データを入荷した商品名で検索し、その検索結果の行をコピーしてシート4に貼り付ける方法を教えてください。
  • 現在は手作業で商品名を検索し、行をコピーして印刷用シートに貼り付けているため、時間がかかっています。
  • バーコード印刷のマクロは既に作成済みであり、エクセルのバージョンは2003、OSはXPのSP3です。
回答を見る
  • ベストアンサー

エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の

エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の商品データ)にあるデータを入荷した商品名で検索し、その検索結果の行を入荷した数量分コピーして、シート4(印刷)に上から順に貼り付けます。その結果をバーコードラベルで印刷し、商品に貼り付けていきたのですがどなたか教えてください。現在は、いちいちシート毎で「Ctrl+F」で検索画面を出し、商品名を検索し、なければ別のシートで検索し、該当するものが見つかれば選択して、行をコピーして印刷シートに貼り付けています。とても時間がかかっています。 シート1から3の構成は、ジャンル別で分かれていますが、 A列:商品名、B列:メーカーコード、C列:自社コード、D列:売価、E列:原価、F列:登録日 です。バーコード印刷のマクロは出来てます。 複数のシートから検索し、コピーして、印刷シートに貼り付けるマクロです。 エクセルは2003で、OSはXPのSP3です。

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

If mSheet.Name = "Sheet1" Or mSheet.Name = "Sheet2" Or mSheet.Name = "Sheet3" Then Sheets("印刷シート").Select 上記のシート名はそれぞれ自身のシート名に変更しましたか?

mima1229
質問者

お礼

kmetu様本当にありがとうございました。「Sheet1」が「sheet1」になっていて、「S」が大文字になっていませんでした。直したら出来ました。大変助かりました。

その他の回答 (4)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

> mInputStr = InputBox("検索する商品名")の("検索する商品名")のところが「コンパイルエラー:プロシージャーの外では無効です」と表示されてしまいます。 Sub プロシージャ名() End Sub の間に入れてますよね。 もしくはどこか別のところにコピーしたものが残ってないですか。

mima1229
質問者

補足

kmetu様 ありがとうございました。 Sub 検索と印刷()を入れてありませんでした。入れなおして実行したところ、エラーは消えたのですが。検索画面「検索する商品名」に商品名を入れても候補が選択されません。もちろん印刷シートにも貼り付けられていませんでした。FindをSearchに変えてみましたが一緒でした。マクロって本当に難しいのですね。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

たとえば Dim mInputStr As String Dim mSheet As Worksheet Dim c As Object mInputStr = InputBox("検索する商品名") For Each mSheet In ActiveWorkbook.Worksheets If mSheet.Name = "Sheet1" Or mSheet.Name = "Sheet2" Or mSheet.Name = "Sheet3" Then With Worksheets(mSheet.Name).Range("A1:A" & mSheet.Range("A" & Rows.Count).End(xlUp).Row) Set c = .Find(mInputStr, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do Sheets(mSheet.Name).Select ActiveSheet.Rows(c.Row & ":" & c.Row).Copy Sheets("印刷シート").Select ActiveSheet.Range("A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With End If Next Application.CutCopyMode = False こんな感じでどうでしょう

mima1229
質問者

補足

kmetu様さっそくの回答ありがとうございます。まだ初心者なもので、よくわからないので教えてもらいたいのですが。kmetu様の回答をコピーしてVBEの標準モジュールにコピーして実行してみたのですが、mInputStr = InputBox("検索する商品名")の("検索する商品名")のところが「コンパイルエラー:プロシージャーの外では無効です」と表示されてしまいます。なぜなんでしょうか。忙しいところ申し訳ありませんが対処方法はあるのでしょうか。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

ちなみに印刷シートの最終行に貼り付けるのは Sheets("印刷シート").Select ActiveSheet.Range("A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial とかでできます。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

マクロのHELPでFindを検索してFindメソッドの使用例を参考にしてみたら簡単に出来ると思いますよ。

関連するQ&A

  • エクセルのマクロについて教えて下さい。

    添付した画像の様な注文管理シートがあります。 バーコードリーダーを使ってバーコードのJANを読み取り、該当する商品を検索したいです。 商品コードは 自社コード/JAN の形式になっています。 入荷した商品のバーコードを読み取ると、該当する商品のD列に読み取った日付を自動的に入力したいです。 その際に、既に入荷している商品はスキップして、未入荷の商品を検索する方法を教えて下さい。 例えば、 JAN 49000001 のバーコードを読み取った場合、D10に本日の日付を入力したいです。 また、バーコードを読むと、該当するセルにカーソルが移動する方法も合わせて教えて頂きたいです。 こちらも既に入荷している商品はスキップして、未入荷の商品を検索したいです。 例えば、 JAN 49000002 のバーコードを読み取った場合、A12にカーソルが移動する様にしたいです。 関数やマクロ等を使用して、これらを行う方法を教えて頂きたいです。 よろしくお願いします。 動作環境 windows 7 PRO エクセル2010 バーコードリーダー BC-BR900L 補足 出力用のデータの入力先はセルにしたいと思います。 特にセルでなくてはならない理由は今の所ありませんが、空いた列を使用したいです。 この例だとE列でお願いします。 カーソルの移動の理由ですが、作業の工程が違うので、カーソル移動が必要です。 日付を入れる方は、商品の荷受け作業の際に使用します。 バーコードを読んで、どの注文分の商品が該当するかを付け合わせる際に使用したいです。 カーソルの移動は、発送作業の際に使用します。 バーコードを読んで、どの発送分かを確認する際に使用したいです。 実際のシートには、顧客情報や注文番号などのセルが存在しています。 それらの情報を確認する際に使用したいです。 わかりにくい説明で申し訳ありませんが、どうかよろしくお願いします。

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

  • マクロで別シートに数値を移したいのですが・・・

    タイトルにありますとおり、マクロを駆使し、数値を別シートに移したいのですが なにぶんマクロに関してほとんど経験、知識はありません。 毎回手動でコピーを繰り返しているのですが、なんとかマクロで自動コピーできればありがたいです^^; 方法としては、フォームのボタンにマクロを埋め込むような形にしたいと思っております。 以下のようなシートがあったとします。 シート1 (抽出内容”平均”)    A   B   C   D   E   F   G 1  回数 25 2  2   3   4   6   3   2   9   3 1行目に、回数とあります。今回は25回目のデータとします。 2行目に、同一シートの別表から抽出された数値が並びます。 この数値は別表でオートフィルで抽出された数字ですので、毎回変更されるものとします。 今回は仮に”平均”という内容で抽出したデータだとします。 シート1 (抽出内容”合計”)    A   B   C   D   E   F   G 1  回数 25 2  10 10  20  11  15  16  8   3 同じく、25回目、抽出内容”合計”として、オートフィルで抽出した数値です。 シート2     A   B   C   D   E   F   G   H 100 回数 平均(1) 2  3  4  6  3  2  9  101 25  平均(2) 102     平均(3)  103     合計(1)10 10 20 11 15 16 8 104     合計(2) 105     合計(3) 106 107 108 回数 平均(1) 109 26  平均(2) シート2は、シート1で抽出された数値をコピーした表です。 A列は今回の回数、25となっております。この数値はこれより上に24回分の表があり、今回が25回目という意味です。 107行目以降も26、27、28と回数は続いていますが、現状では25が最新とし、108行以降は数値はなく、空白とします。 それぞれ平均、合計共に、シート1で3回抽出し、それぞれ別の数値が入るものとします。 これまでは、シート1で抽出後、手動でコピーし、シート2の該当セルに貼り付ける、という作業でした。 シート1  →   シート2  のコピーにマクロを使用したいのですが 回数が25の場合、シート2でA列を検索し、さらに抽出内容が”平均”1回目だった場合 平均(1)にコピーし、2回目だった場合平均(2)にコピーする、といった具合です。 イメージとしては、シート1に、(1)、(2)、(3) と、それぞれ入ったリストボックスなどがあり [平均][合計] のそれぞれボタンがあり、(1)を選び、平均を押すと100行目の平均(1)に入り 合計を押すと、103行目の合計(1)に数値が入る。と、いうような感じです。 この説明で私の意図するところが伝わるか不安ではありますが、このような場合に使えるマクロの式がございましたら ご教示いただけませんでしょうか^^; 実際の表とは若干ちがいますが、大まかなイメージとしては上に書いてある通りです。

  • Excel マクロ 検索結果を別シートにコピー

    Excel2010の「ホーム」タブの「編集」グループより「検索と選択」の「検索」で住所録の「名前」を検索しています。 「検索する文字列」に「名前」を入力して「すべて検索」をクリックすると検索結果がでますが、検索結果の表示方法が「セル番地」だけを表示しているため一つ一つそのセルをクリックして内容を確認しています。 これを検索された複数のデータを住所録一覧表の項目名に合わせてまとめて別シートにコピーしたいのですが・・・。 Sheet1に次の項目名で住所録を作成しています。 A列:会社名 B列:名前 C列:住所 D列:電話番号 「名前」で検索して、検索されたデータのA列からD列までのデータを別シート(Sheet2)の同じ表にコピーしたいのです。 名字だけの検索ですので結果が複数ある場合は、すべての検索結果を数行にわたってコピーできればいいのですが・・・。 このメニューのコマンドを使わなくても、何か他の方法でVBAの例があれば教えていただきたいと思います。 宜しくお願いします。

  • 別シートから値のある行を検索し、別シートに転記

    シート1とシート2があり、 シート1のA7がシート2のB列にあり、シート1のB20がシート2のその行のD列の値と同じ場合、シート2該当行のF列の値をシート1のL20に書き込むのですが、どのようにマクロを記述すればいいでしょうか 例えば、 シート1のA7に「A社」、B20に「商品A」があり、 シート2のB10に「A社」が、D10に「商品A」がある場合、F10の値をシート1のL20に返す方法です。 シート2のB列には「B社」や「C社」もあるため、B列の中からシート1のA7と合致する行を検索することになります。

  • excel マクロで複数シート検索し行をコピー

    excel2010 マクロで下記のようなことをしたいのですが どのようにしたら良いか教えていただけないでしょうか? (1)sheet1のA1を検索用の欄とする (2)sheet2・sheet3・sheet4にはそれぞれデータを入力しておく (A列~H列 まで使用し、行数は多くても500程度) (3)sheet1のA1に検索したい単語を入力することで、sheet2・sheet3・sheet4全てのA列を検索する (4)一致(部分一致)したら、その行をsheet1の10行目以降にコピーする なお複数ヒットすると思われるため、複数ヒットした場合には行を追加しながらコピーしたいです。 マクロでは無理なのでしょうか? どのように書いたらよいか、参考になるHPでも助かりますので、教えていただきたく よろしくお願いします。

  • Excel データの一部を別シートにコピー

    Excelで、データ行のどこかをクリックし、ボタンを押したとき、その行を別々のシートに分類してコピーさせるマクロを作りたいと思っています。 このとき、コピー先のシートをA列のデータで区別したいのです。 1.クリックした行のA列のセルを判定し、そのセルのデータを読み取る方法 2.読み取ったデータ(文字)を、コピー先シート名に指定する方法 このマクロの記述方法を教えてください。よろしくお願いします。 コピー範囲を指定し、貼り付け先のシートをアクティブにできれば、あとは記録マクロをつないで作るつもりです。

  • 特定の行を選択して別のシートにコピーするマクロ

    指定した行と、 特定の文字(複数)がある行を 全て選択し、別のシートにコピーする マクロをお教えいただけませんか?  選択したい行は(同じシートで)  必ず3行目と、  A列に『ABC』、『DEF』という文字がある全ての行です。 このようなマクロはどのように作ればいいでしょうか? マクロに詳しい方、お知恵をお貸し頂けませんでしょうか?

  • 文字を検索してその行を別シートにコピーするマクロ

    A列 郵便番号 B列 住所 C列 名前 で出来ているファイルがあるのですが、住所欄にある市ごとにその行を別のシートにコピーさせたいと考えています。 マクロを起動させ、ダイアログボックスにコピーしたい市を入力するとSheet2又は新しいシートにコピーするマクロが出来たら助かるのですが、私用の範囲内で使いますのでご教授お願いします。

  • エクセルマクロ

    全くの素人です。 200人のお得意先に案内状を送付します。 sheet1 A列1~A列200に会社名、 B列1~200までに、代表者の名前を入力しています。 sheet2に案内状があります。 会社名と名前だけ変えて200回するのもひと苦労ですので、マクロを使えればと思います。 1マクロに記憶する 2A列1・B列1をコピー 3sheet2に貼り付け4印刷 5マクロ記憶終了 マクロを実行するとA列1・B列1ばかり印刷されます。 A列2・B列2 A列3・B列3 と言うように順番に下段を印刷させる設定はどのようにすれば良いのでしょうか

専門家に質問してみよう