プロが教える店舗&オフィスのセキュリティ対策術

エクセルのマクロは超初心者のため、難しいことは全く分かりません。
よろしくお願いいたします。  m(_ _)m

同じbook内に複数のsheetがあります。
そのsheetは同じ型式のデータベースなのですが、sheetによって行が違います。

そのsheetのデータを一つのシートにコピー(一番上の先頭行はデータベースの名称でコピーしたくありません)
をして一覧でまとめたいのですが、方法がわかりません。

sheet数が多いので、一つずつコピー→ペーストをするのが大変なので…どうぞよろしくお願いします。

A 回答 (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
    • good
    • 0

マクロの自動記録でシート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

この回答への補足

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

補足日時:2010/05/30 14:24
    • good
    • 0

おはようございます



>その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
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!