• ベストアンサー

エクセルのマクロは超初心者のため、難しいことは全く分かりません。

エクセルのマクロは超初心者のため、難しいことは全く分かりません。 よろしくお願いいたします。  m(_ _)m 同じbook内に複数のsheetがあります。 そのsheetは同じ型式のデータベースなのですが、sheetによって行が違います。 そのsheetのデータを一つのシートにコピー(一番上の先頭行はデータベースの名称でコピーしたくありません) をして一覧でまとめたいのですが、方法がわかりません。 sheet数が多いので、一つずつコピー→ペーストをするのが大変なので…どうぞよろしくお願いします。

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

  • ベストアンサー
回答No.3

マクロの自動記録でシート2枚分行ってみました 一番左に一覧シートがあり、タイトル行が入っている データベースはA列が埋っているという条件で Sub Macro1() Sheets("一覧").Select '「一覧」シートを選ぶ ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 Range("A2").Select 'A2セルの選択 Range(Selection, Selection.End(xlToRight)).Select '[Shift]+[Ctrl]+[→] Range(Selection, Selection.End(xlDown)).Select '[Shift]+[Ctrl]+[↓] Selection.Copy ''[Ctrl]+[C]コピー Sheets("一覧").Select '「一覧」シートを選ぶ Range("A65535").Select 'A65535セルの選択 Selection.End(xlUp).Select '[Ctrl]+[↑] ActiveCell.Offset(1, 0).Range("A1").Select '[↓] ActiveSheet.Paste '[Ctrl]+[V]貼り付け ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 Range("A2").Select 'A2セルの選択 Range(Selection, Selection.End(xlToRight)).Select '[Shift]+[Ctrl]+[→] Range(Selection, Selection.End(xlDown)).Select '[Shift]+[Ctrl]+[↓] Sheets("一覧").Select '「一覧」シートを選ぶ Range("A65535").Select 'A65535セルの選択 Selection.End(xlUp).Select '[Ctrl]+[↑] ActiveCell.Offset(1, 0).Range("A1").Select '[↓] ActiveSheet.Paste '[Ctrl]+[V]貼り付け Application.CutCopyMode = False '[Esc] End Sub 改善案 Sub Macro2() Dim n As Long '変数nの定義 Dim i As Long '変数iの定義 Sheets("一覧").Select 'シートの枚数-1回分、全体を繰り返す For n = 1 To Worksheets.Count - 1 Step 1 '[Ctrl]+F6]を押す回数が増えていることに着目 For i = 1 To n Step 1 ActiveSheet.Next.Select Next i Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("一覧").Select Range("A65535").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste Next n Application.CutCopyMode = False '[Esc] End Sub

noname#204947
質問者

補足

CoalTarさん、ご回答ありがとうございます。今教えていただいた情報で惜しいところまでいきました。 教えていただいた内容をもとに例示のマクロに以下のように修正を自分で加えました。 ですが、「[Ctrl]+[F6]右隣のシートへ移動」のところが上手くいかず同じシートを2回コピーして終了となっています。 またbookによって設けているsheet数が違うので、sheetを設けた分コピーをしたいのですが、どのような手があるのか教えていただけると助かります。 もしかしたらご提示いただいた改善案のところにヒントがあるのかもしれませんが、まだ力不足で理解できていない状態です。ネットでも調べてみたのですが、同じく力不足で読み解くことができませんでした。 他人だよりでも申し訳ありませんが、お手すきのときにまた追記いただけると助かります。 よろしくお願いします。 【今のマクロの状態(いただいた例示をもとに少し改造しまいた)】 Sub まとめコピー() Sheets("一覧").Select '「一覧」シートを選ぶ ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 Range("A2:P2").Select 'A2セルの選択 Range(Selection, Selection.End(xlDown)).Select '[Shift]+[Ctrl]+[↓] Selection.Copy ''[Ctrl]+[C]コピー Sheets("一覧").Select '「一覧」シートを選ぶ Range("A65535").Select 'A65535セルの選択 Selection.End(xlUp).Select '[Ctrl]+[↑] ActiveCell.Offset(1, 0).Range("A1").Select '[↓] ActiveSheet.Paste '[Ctrl]+[V]貼り付け ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 ActiveSheet.Next.Select '[Ctrl]+[F6]右隣のシートへ移動 Range("A2:P2").Select 'A2セルの選択 Range(Selection, Selection.End(xlDown)).Select '[Shift]+[Ctrl]+[↓] Sheets("一覧").Select '「一覧」シートを選ぶ Range("A65535").Select 'A65535セルの選択 Selection.End(xlUp).Select '[Ctrl]+[↑] ActiveCell.Offset(1, 0).Range("A1").Select '[↓] ActiveSheet.Paste '[Ctrl]+[V]貼り付け Application.CutCopyMode = False '[Esc] End Sub

その他の回答 (3)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

あなたが目で見て判る,たとえば今のシートは何列から何列まで使っているのかとか,タイトル行は1行なのか2,3行なのか,そもそも表はA1セルを左上にして置いてあるのかとか,そういった事だけでも具体的な情報をご相談に書いてみると良いですね。 サンプル: どのシートもA:F列を使っている どのシートも1行目をタイトル行にしている どのシートも2行目から実データが入っている どのシートも少なくともA列は,表としてデータを入れてる範囲の一番下のセルが空欄になってたりしないで,ちゃんとデータが入っている。 作成例: sub macro1()  dim i  worksheets.add before:=worksheets(1)  worksheets(2).range("1:1").copy destination:=worksheets(1).range("A1")  for i = 2 to worksheets.count   worksheets(i).range("A2:F" & worksheets(i).range("A65536").end(xlup).row).copy _    destination:=worksheets(1).range("A65536").end(xlup).offset(1)  next i end sub

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

おはようございます >そのsheetは同じ型式のデータベースなのですが、sheetによって行が違います。 行数は違っても列数は同じとして回答します。 「Cells」と「Range」を使った範囲指定で出来ます(方法はいろいろとありますので他の方は別の方法を紹介するかもしれません)。 要素になりそうなことを説明していきますので、一つ一つ試してみて、どういう動作になるのか確認してみてください。 1.「A2:Z200」をコピーする Sub sumple() Range("A2:Z200").Copy End Sub 2.最終行を取得する Sub sumple() Dim LastRow As Long LastRow = [A65536].End(xlUp).Row MsgBox LastRow End Sub …ただし、「A列は必ず値が入っている」および「65536行は使っていない」が条件です。  65536というのは、Excel2003までのバージョンの最終行です。 3.A~Z列の2行目から最終列までコピーする Sub sumple() Dim LastRow As Long LastRow = [A65536].End(xlUp).Row Range("A2", Cells(LastRow, "Z")).Copy End Sub 4.複数のシートに同じ(同じような)処理をする Sub sumple() Dim MyWorksheet As Worksheet For Each MyWorksheet In Worksheets MyWorksheet.[A1] = "Hallo World" Next MyWorksheet End Sub -------------- セルの指定の仕方には ・Range (セルの範囲を指定する) ・Cells (行番号、列番号でセルを指定する) ・[] (セル・セル範囲を直接指定する) の3つがあります。いろいろと試して見てください。 p(^^)q

  • CGSK
  • ベストアンサー率21% (30/138)
回答No.1

エクセルに関して、ここで答えて簡単に判るとは、ちょっと無理としか申せません。

関連するQ&A