• 締切済み

vbaでどう書くのですか?

現在2000件のデータをエクセルで処理しているのですが、ある特定のデータを指定して1件(1行)ごとに印刷するのを手作業でやっています。マクロでうまく自動化できる方法はありませんか? データシートにあるデータから必要なデータを検索で探してコピーし、印刷シートの所定の行にデータをペーストして印刷する。印刷以降は問題ないのですが、コピー&ペーストまでがなかなか自動化が出来ません。 以上よろしくお願いいたします。

みんなの回答

  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.2

フィルタオプションを使って、現在の表以外の場所に抽出する作業を キートレースで記録すれば、それなりのマクロがちゃんと出来ます。 http://allabout.co.jp/computer/msexcel/closeup/CU20070905A/ 印刷処理を自力でVBAにするコトが出来るレベルなら、フィルタオプション を使った処理でも「記録さえ出来れば」何とかできると思います。 オートフィルタを記録しちゃうと、必要なデータを処理するためには 一ひねり必要になりますので。

msdankan
質問者

補足

ありがとうございます。 目下猛勉強中ですが、実云いますと参考書のなかの見本を適当に拾い、PC学校の先生に手直してもらってようやく印刷マクロができあがった次第で、全くのビギナーズラックです。 ご指摘の件トライしてみます。 今後ともよろしくお願いします。

すると、全ての回答が全文表示されます。
  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

Sub KENSAKU() Dim FindAnswer As Object Dim i As Integer Dim ArryRecord As Variant Dim add As Integer Dim RETSU As String Worksheets("データシート").Activate With Worksheets("データシート").Range("A2:A30") Set FindAnswer = .Find(What:="hoge", LookAt:=xlWhole, SearchOrder:=xlByColumns) End With 'レコードの有無をチェック If FindAnswer Is Nothing Then Worksheets("印刷シート").Activate MsgBox "該当するレコードが存在しません。" Else 'レコードが存在する場合 ActiveCellCheck = FindAnswer.Address RETSU = Mid(ActiveCellCheck, 4, 2) '切り取りは再修正の必要あり 'array方式で該当レコードの値を保持 ArryRecord = Array(Range("A" & RETSU ), Range("B" & RETSU ), Range("C" & RETSU ), Range("D" & RETSU ), Range("E" & RETSU )) End If If (IsEmpty(ArryRecord) = False) Then Worksheets("印刷シート").Activate With Worksheets("印刷シート") .Cells(1, 2) = ArryRecord(0) .Cells(1, 3) = ArryRecord(1) .Cells(1, 4) = ArryRecord(2) .Cells(1, 5) = ArryRecord(3) .Cells(1, 6) = ArryRecord(4) End With End If End Sub スマートではありませんが、こんな感じでできる気がします・・^^; セルアドレスやメソッドの引数は必要に応じて変更してくださいね。 エラーが出たら補足お願いします。

msdankan
質問者

お礼

ありがとうございます。 小生にはちょっとレベル高く難しそうですが、トライしています。 今後ともよろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A