- ベストアンサー
エクセルのマクロで商品データを一括印刷する方法
- エクセルのマクロを使用して、シート1からシート3の商品データを入荷した商品名で検索し、その検索結果の行をコピーしてシート4に貼り付ける方法を教えてください。
- 現在は手作業で商品名を検索し、行をコピーして印刷用シートに貼り付けているため、時間がかかっています。
- バーコード印刷のマクロは既に作成済みであり、エクセルのバージョンは2003、OSはXPのSP3です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
If mSheet.Name = "Sheet1" Or mSheet.Name = "Sheet2" Or mSheet.Name = "Sheet3" Then Sheets("印刷シート").Select 上記のシート名はそれぞれ自身のシート名に変更しましたか?
その他の回答 (4)
- kmetu
- ベストアンサー率41% (562/1346)
> mInputStr = InputBox("検索する商品名")の("検索する商品名")のところが「コンパイルエラー:プロシージャーの外では無効です」と表示されてしまいます。 Sub プロシージャ名() End Sub の間に入れてますよね。 もしくはどこか別のところにコピーしたものが残ってないですか。
補足
kmetu様 ありがとうございました。 Sub 検索と印刷()を入れてありませんでした。入れなおして実行したところ、エラーは消えたのですが。検索画面「検索する商品名」に商品名を入れても候補が選択されません。もちろん印刷シートにも貼り付けられていませんでした。FindをSearchに変えてみましたが一緒でした。マクロって本当に難しいのですね。
- kmetu
- ベストアンサー率41% (562/1346)
たとえば 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 こんな感じでどうでしょう
補足
kmetu様さっそくの回答ありがとうございます。まだ初心者なもので、よくわからないので教えてもらいたいのですが。kmetu様の回答をコピーしてVBEの標準モジュールにコピーして実行してみたのですが、mInputStr = InputBox("検索する商品名")の("検索する商品名")のところが「コンパイルエラー:プロシージャーの外では無効です」と表示されてしまいます。なぜなんでしょうか。忙しいところ申し訳ありませんが対処方法はあるのでしょうか。
- kmetu
- ベストアンサー率41% (562/1346)
ちなみに印刷シートの最終行に貼り付けるのは Sheets("印刷シート").Select ActiveSheet.Range("A" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1).PasteSpecial とかでできます。
- kmetu
- ベストアンサー率41% (562/1346)
マクロのHELPでFindを検索してFindメソッドの使用例を参考にしてみたら簡単に出来ると思いますよ。
お礼
kmetu様本当にありがとうございました。「Sheet1」が「sheet1」になっていて、「S」が大文字になっていませんでした。直したら出来ました。大変助かりました。