マクロ初心者がマクロの途中で躓いている理由と解決方法

このQ&Aのポイント
  • マクロ初心者が途中で躓く理由や解決方法を解説します。
  • マクロを使って特定の条件に合致する行を別のファイルにコピーする方法について説明します。
  • 具体的な作業手順と共に、マクロ初心者でも理解しやすく解説します。
回答を見る
  • ベストアンサー

マクロを途中まで組んで後半どう入力すればいいかで躓いてます

「記録→実行」が出来る程度のマクロ初心者です。 分かりにくいかもしれませんが、現在の状況です。 内容が仕事の話になるので、例としてのファイル名&データになります。 BOOKファイルが『1月』~『12月』までありまして 1つずつのBOOKファイルには【朝】【昼】【夕】【晩】と4つのsheetがあるとします。 sheet内は    A B~H列 3行:0 12 4行:0 25 5行:0 10 6行:1 13 7行:1 14 ~ 300行:23 15 このような感じで数値が入ってます。 やりたいことは例えば『2月』のファイルを開き、そこでマクロを実行したら4つのsheetの"A列"の"0"の数値を判断し、"0"の数値がある複数の行を指定する。 次にあらかじめ開いてある『2009年』という別のBOOK(同様に各sheetに【朝】【昼】【夕】【晩】があります)にその【朝】【昼】【夕】【晩】の空白の行に"0"の行をコピーする。 次に『3月』を開き、マクロを実行し同様に"0"の部分を指定し開きっぱなしの『2009年』の空白行(先ほどコピーした後のところ)に"0"の行をコピーする。 という感じでやりたいのですが、できるでしょうか? 拙い文章で分かりにくい質問ですが、よろしければ注釈付きで教えて頂けると幸いです。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.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 '------------------------------------------- 上記コードの知らないメソッド、プロパティを調べると 全体の流れが理解できるはずです。 以上です。    

aria1234
質問者

お礼

ありがとうございます。 シンプルにできていてとてもわかりやすい形だと思います。 個人的にやりたい形としては、1月~12月(仮のファイル名ですが)を一気に処理するのでなく、 1月を一つ開き処理して2009年のデータを見て、 次に自分で2月を開きまた処理して前後のデータを確認としてみたいと思っています。 コレを応用してできるかどうか分かりませんがやってみたいと思います。

その他の回答 (1)

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

こんちくは。 >>という感じでやりたいのですが、できるでしょうか? Excelマクロ。。。まぁ、VBAは、エクセル操作のためのプログラムのようなもんなので、やって出来ないこたないですよ。 ただ。。。 >>やりたいことは例えば~(中略) ファイルが12個。 シートが4個。 データの引っ張ってくる先は、最大48箇所なわけですよね? 簡単に言うと。。。48回繰り返すだけで終わる作業。です。 Excelマクロを組む際には、「マクロ組むのと手作業でやるのとどっちが早く終わるか」を天秤にかけるといいでしょう。 手作業でやれば、2~3時間で終わる作業のためのマクロを、8時間かける1週間かけて作っても、時間の無駄ですよね?? 2~3時間で終わる作業。。。だけど、それを毎日、しかも永遠と繰り返していく必要がある。ならマクロ化すればよいと思いますが。。。 質問文からだけですと、1回こっきりな作業に見えましたので、まずはマクロじゃなくていいんじゃない?ってアドバイスとさせてください。 >>やりたいことは例えば~(中略) 読み取った限りだと。。。 ・各シートで、「A列」に対して並び替え機能を使ってソート。 ↓ ・「0」の範囲だけコピーしてきて、別ブック(シート)に貼り付け。 を48回繰り返すことで終わりかなと思いました。 。。。多分、これだけの作業なら、30分ぐらいで終わるかな。。。 その「48回」が「数百社セット分あります」 。。。なら、また考えましょう(;´Д`)

aria1234
質問者

お礼

解答ありがとうございます。 これはあくまでも例として挙げただけで、実際には海外から月に1回送られてくるデータで数百ファイルあります。 項目名も違います。 さらに今後もこの作業は必要になってくる状況です。 また、元々A列にある数値も計算して出し、ゼロの数値も並び替える作業があります。 ここまでのマクロは単純なので記録させ組むことはできたのが現状です。 で、この先でA3のゼロ数値も2行だけのときもあったり10数行の時もあり、それを指定し4Sheet分を別のBook4Sheetにコピペするというのはかなり腕が疲れます。 とりあえずそんな状況です。 あと書き忘れましたがExcelは2003です。 社内はネット禁止なため、現在携帯から書き込んでいるので読み取りにくいかも知れませんが、何か手がありましたらお願いします。

関連するQ&A

  • 複数のワークシートから循環してペースト

    エクセルのマクロについて質問です。 複数のワークシートを循環して貼り付けれるマクロを作りたいのですが わかる方教えてください。 やりたいことは、sheet1のD列の3行目の数値を空白にまでコピーし、別ブックのsheet1のB列の4行にはりつけし 次にもとのブックのsheet2のD列の3行目の数値を空白にまでコピーし、別ブックのsheet2のB列の貼り付けた最後尾に貼り付けし また、もとのブックのsheet3のD列の3行目の数値を空白にまでコピーし、別ブックのsheet3のB列の貼り付けた最後尾に貼り付け という作業を循環してほしいです。 よろしくお願いします。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • エクセルマクロで空欄と空欄の間のデータを取得する

    添付画像のようなデータが並んだエクセルシートがあります。(ブックA) ブックAsheet1のA列に数値が入っている行のB列~D列のデータを別のブックBから取得したいのです。 ブックBにsheet1~sheet20まであります。 ブックAsheet1のA列に数値が入っている行のB列~D列のデータを1セットとして、ブックBのsheet1のB1にコピーする。 次のグループをブックBのsheet2のB1にコピーする、 また次のグループをブックBのsheet3のB1にコピーする。 ブックBには書式設定してあるので、値のみコピーします。 ブックAのB列~D列の数値の配置はそのままでコピーします。 この作業をブックBからマクロで行う方法を教えて下さい。 宜しくお願いします。

  • コピーするExcelマクロを作りたいです(2)

    「コピー元」ブックから「コピー先」ブックにコピー&ペーストを 行うマクロを作りたいのですが、列の計算が複雑で困っています。 Excelブックのキャプチャ画像を加えて再投稿します。 画像ではシートになっていますが、画面左のシートのような表から 右のシートの当てはまるセルにデータを写すようにお考えください。 「コピー元」ブックは月に一度ダウンロードするデータで、ピボット テーブルです。一月ごとに、前月の列が各営業所ごとに増えていき ます。行には、商品ごとの売上げが入力されています。 また、各営業所ごとに、年度合計列があります。(営業所の数は10 前後、商品の行は50以上はあります。) 「コピー先」ブックは、あらかじめ年度末までの行列セル、合計列が 用意されていて、「コピー元」ブックからデータを移動してくるのみ でレポートとして毎月提出する体裁です。 単純にコピーするだけならばよいのですが、毎月各営業所一列ずつ 増えていくというのが式にして表せません・・・また、できる限り 数値の変更を最低限にして、毎年度利用できるマクロにするという 希望もあります。 ご面倒かと思いますが、お力を貸してください。

  • 【マクロ】初心者です。色々教えていただきたいことがありますのでご教授く

    【マクロ】初心者です。色々教えていただきたいことがありますのでご教授ください。 やりたいことは下記になります。 元データ A B C 1 2 3 4 5 6 新データ D E F 3 1 2 3 1 2 6 4 5 6 4 5 かなり簡略化で書いていますがやりたいことを記述していきます。 (1)マクロの記述しているブックのシート1にボタンを作成する。 ボタンから別のブックの元データ(CSVファイル)を選択。 元データのブックのシート1をマクロブックのシート2にコピーします。 コピーデータを加工、修正していきます。 (2)次に列のデータを入れ替えます。 これは法則がないので一行目の行をみて判断します。 (ex.C行の列ならD行に挿入する) (3)列を入れ替えた後、 3 1 2 6 4 5 になっていますがこれを 3 1 2 3 1 2 6 4 5 6 4 5 というふうに一行を二行にしていきます。 (4)最後にorder byします。 1、3、2列目の順にorder byします。 以上がやりたいことになります。 特に(1)がよくわからずボタンを使用時に 別ブックのデータをコピー、貼り付けるのは どうしたらいいのでしょうか? どなたかご教授ください。 よろしくお願いします。

  • 自動入力マクロ教えてください

    sheet1のB列に数値を入力していますデータは10行目以降に入力されています。 データが1,10.20ならsheet2のB列、2.15.35ならsheet2のC列5.40ならsheet2のD列それ以外はsheet2のE列に自動的に入力したいのですがそのマクロを教えていただけないでしょか。行はsheet1と同じ行に入力します

  • データ変換マクロ

    数値データのシートがあります。 A列に空白があった場合、その行のEとFのセルをコピーして1行上のEとFのセルにコピーしたいというマクロを作成しています。 全部で100行ほどのデータに、いくつか空白セルがあって規則性はありません。空白セルのある行はすべてが対象となります。 空白を見つけた後、「その行のEとFのセル」という指定の仕方で詰まってしまいました。 良い方法をおしえてください。

  • マクロを使用し、EXCELのデータから必要な部分を取り出し2つのsheetに貼り付けたい

    条件 EXCELのデータ A列からL列まで 複数行(行数は、決まっていない) (例) 40行ほどあるデータを見て 1行目から10行目までをsheet1に 12行目から20行目までをsheet2に貼り付けたい場合。 11行目のA列(空白になっている)に手入力で「a」と入力 21行目のA列(空白になっている)に手入力で「b」と入力し、 1行目から「a」のある行までをコピーし、sheet1に貼り付ける 「a」のある行より1行下から「b」のある行までをコピーし、sheet1に貼り付ける 以上のことをマクロで実行する方法を教えて下さい。

  • マクロで、新しいシートを作りたい。

    エクセルのマクロを教えてください。 今は、Sheet1のA2に年月日、B2:H2にコード、項目1、項目2、・・・と入力します。 入力が終わったら、マクロを実行し、その後A2:H2をクリアしています。 今回やりたいのは、マクロの実行時に新しいシートを追加し、A2:H2をコピーしたいのです。 1 Sheet1のA2から、年月を取り出す。2003/1/1→200301 2 シートの中に、Sheet200301が有るかどうか調べ、無かったらSheet200301というシートを作る。 3 新しいシートを作ったら、Sheet4のA1:Z2をSheet200301に貼り付ける。 4 Sheet200301の最後の空白行を調べる。(新しいシートを作って最初は2行目になってもらいたい) 5 4で調べた空白行を次の行に貼り付ける。 6 4で調べた空白行にSheet1のA2:H2を貼り付ける。 7 Sheet1のA2:H2をクリアします。 よろしくお願いします。

  • 至急お願いします。エクセルのマクロに関してです。

    かなり至急です><エクセル2010のマクロの質問です。 2つ質問があります。 1つ目です。 以下の一連の作業を1つのマクロで行いたいのですが、どうしたらいいでしょうか? 現在は、シート1にデータがあります。 (1)選択した3列を、B~D列に移動する (2)B列に含まれるセルのうち、0(空白)でないセル数分だけシートを追加する。 (たとえば、シート1のB14~B18に数字がはいっていたら、シートを5枚追加するという感じです。) (3)B列に含まれるセルのうち、0(空白)でないセル数分に対し、2行ずつ各シートの3・4行目にコピーする。 (たとえば、シート1のB14~B18に数字がはいっていたら、シート2の3・4行にシート1の14・15行のコピーを貼り付け、シート3の3・4行にシート1の15・16行のコピーを貼り付け、シート4の3・4行にシート1の16・17行のコピーの貼り付ける・・・という感じです。) 現在は (1)Sub () Selection.Cut ActiveCell.Columns("A:C").EntireColumn.Select Selection.Cut Columns("B:B").EntireColumn.Select Selection.Insert Shift:=xlToRight End Sub (2) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets.Add Next End Sub (3) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets("Sheet1").Rows(n & ":" & n + 1).Copy _ Sheets("Sheet" & n - 252).Range("A3") Next End Sub と別々のマクロに分けてます。 また(2)(3)でみられる For n = 14 To 18 ' の部分の数字は手動でいれてますが、かなり時間をくってしまうので・・・。 2つ目です。 複数ブックに同じ動作をするエクセルのマクロが知りたいです。 現在100ほどブック(Book1~100)を開いていて、100のブックすべてのSheet1のA1のセルに「1」と入れたいのですが、 そのようなマクロはどうくんだらよろしいでしょうか。 ちなみにExcel2007です。 困っているので、お願いします。

専門家に質問してみよう