- ベストアンサー
マクロ初心者がマクロの途中で躓いている理由と解決方法
- マクロ初心者が途中で躓く理由や解決方法を解説します。
- マクロを使って特定の条件に合致する行を別のファイルにコピーする方法について説明します。
- 具体的な作業手順と共に、マクロ初心者でも理解しやすく解説します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>「記録→実行」が出来る程度のマクロ初心者です 短いコードでできるのですが、質問者のレベルでは 回答のコードを実際のものに合わせてメンテするのはちょっと難儀かも。 レイアウトなど変更になったら尚のこと。。 ま、それは置いといて、 参考ということで簡単なコードをアップしときます。 (必須条件) 各シートとも左端から【朝】【昼】【夕】【晩】の順番になっていること 各シートとも2行目が見出しで、データは3行目から始まっていること 各シートともA列から始まっていること 纏めブック(2009年.xls)のシートも同様であること 実行するときは、マクロブックと2009年.xlsが開いていること マクロ用ブックの標準モジュールに下記コードを。 '------------------------------------------------ Sub Test() Dim BK As Workbook Dim BK2009 As Workbook Dim myCell As Range Dim myRange As Range Dim myAdrs As String Dim R As Long Dim i As Integer Dim j As Integer Application.ScreenUpdating = False Set BK2009 = Workbooks("2009年.xls") For i = 1 To 12 '●1~12月 Set BK = Workbooks.Open(ThisWorkbook.Path & "\" & i & "月.xls") For j = 1 To 4 '●シート左から4つが対象 With BK.Sheets(j) Set myRange = .Range(.Cells(3, "A"), .Cells(Rows.Count, "A").End(xlUp)) Set myCell = myRange.Find(0, myRange(myRange.Rows.Count), xlValues, xlWhole) If Not myCell Is Nothing Then myAdrs = myCell.Address Do .Rows(myCell.Row).Copy _ BK2009.Sheets(j).Cells(Rows.Count, "A").End(xlUp).Offset(1) Set myCell = myRange.FindNext(myCell) Loop While myAdrs <> myCell.Address End If End With Next j BK.Close False Next i Application.ScreenUpdating = True End Sub '------------------------------------------- 上記コードの知らないメソッド、プロパティを調べると 全体の流れが理解できるはずです。 以上です。
その他の回答 (1)
- STICKY2006
- ベストアンサー率29% (1536/5269)
こんちくは。 >>という感じでやりたいのですが、できるでしょうか? Excelマクロ。。。まぁ、VBAは、エクセル操作のためのプログラムのようなもんなので、やって出来ないこたないですよ。 ただ。。。 >>やりたいことは例えば~(中略) ファイルが12個。 シートが4個。 データの引っ張ってくる先は、最大48箇所なわけですよね? 簡単に言うと。。。48回繰り返すだけで終わる作業。です。 Excelマクロを組む際には、「マクロ組むのと手作業でやるのとどっちが早く終わるか」を天秤にかけるといいでしょう。 手作業でやれば、2~3時間で終わる作業のためのマクロを、8時間かける1週間かけて作っても、時間の無駄ですよね?? 2~3時間で終わる作業。。。だけど、それを毎日、しかも永遠と繰り返していく必要がある。ならマクロ化すればよいと思いますが。。。 質問文からだけですと、1回こっきりな作業に見えましたので、まずはマクロじゃなくていいんじゃない?ってアドバイスとさせてください。 >>やりたいことは例えば~(中略) 読み取った限りだと。。。 ・各シートで、「A列」に対して並び替え機能を使ってソート。 ↓ ・「0」の範囲だけコピーしてきて、別ブック(シート)に貼り付け。 を48回繰り返すことで終わりかなと思いました。 。。。多分、これだけの作業なら、30分ぐらいで終わるかな。。。 その「48回」が「数百社セット分あります」 。。。なら、また考えましょう(;´Д`)
お礼
解答ありがとうございます。 これはあくまでも例として挙げただけで、実際には海外から月に1回送られてくるデータで数百ファイルあります。 項目名も違います。 さらに今後もこの作業は必要になってくる状況です。 また、元々A列にある数値も計算して出し、ゼロの数値も並び替える作業があります。 ここまでのマクロは単純なので記録させ組むことはできたのが現状です。 で、この先でA3のゼロ数値も2行だけのときもあったり10数行の時もあり、それを指定し4Sheet分を別のBook4Sheetにコピペするというのはかなり腕が疲れます。 とりあえずそんな状況です。 あと書き忘れましたがExcelは2003です。 社内はネット禁止なため、現在携帯から書き込んでいるので読み取りにくいかも知れませんが、何か手がありましたらお願いします。
お礼
ありがとうございます。 シンプルにできていてとてもわかりやすい形だと思います。 個人的にやりたい形としては、1月~12月(仮のファイル名ですが)を一気に処理するのでなく、 1月を一つ開き処理して2009年のデータを見て、 次に自分で2月を開きまた処理して前後のデータを確認としてみたいと思っています。 コレを応用してできるかどうか分かりませんがやってみたいと思います。