• ベストアンサー

コピーするセルの範囲を指定する方法

複数のシートを1枚にまとめたいのですが、各シートの中身が画像のように、空欄を含みます。 以下のような特徴があります。 ・ A1には必ず商品名が入力されています ・ 行数はシートによって異なります ・ 列数はM列までの固定です ・ 最終行を調べるにはJ列で判断ができます ・ この画像の例では、A1からM20までの範囲をコピーしたいです エクセルの知識がないので、ネットで調べながらいろいろ試してみましたが、コピーをする範囲の選択ができません。 シート1枚にまとめる方法はだいたい理解できましたので、上記のようなセルの範囲を指定する方法を教えて下さい。 どうぞ宜しくお願いします。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.4

最終行を判別するのはJ列で、貼り付け開始位置はA列なので、 Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select だと、A列で最終行を判別してしまいます。 Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select と記述すべきです。 If intLoop = 2 Then Range("A1").Select Else Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select End If を以下の様に訂正 If intLoop = 2 Then Range("A1").Select Else Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select End If

maokongreen
質問者

お礼

完全にパニクっていましたが、冷静になって修正しました。 いろいろ間違っていましたが、お蔭様で教えていただいた部分を参考にして、ちゃんと動くようになりました。 ありがとうございました。 マクロは昨日、必要に迫られて初めてネットで検索をして勉強したのですがなかなか面白そうですね。 ちゃんと腰を据えて勉強をしようと思います。 どうもありがとうございました。

maokongreen
質問者

補足

何度も教えていただいてありがとうございます&すみません。 時間がなくて焦ってしまい、頭がパニクっているのですが 下記のコードで動かしたら、今度はまとめ用のシートは空白になってしまいました。 ----------------------------------------------------- Sub MergeSheets() Dim intLoop As Integer Application.ScreenUpdating = False Worksheets.Add before:=Worksheets(1), Count:=1 For intLoop = 2 To Worksheets.Count Worksheets(intLoop).Select Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select Selection.Copy Worksheets(1).Select If intLoop = 2 Then Range("A1").Select Else Range("A" & Range("J" & Rows.Count).End(xlUp).Row).Offset(1).Select End If Next intLoop Application.CutCopyMode = False Worksheets.Select Range("A1").Select Worksheets(1).Select Application.ScreenUpdating = True MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。" End Sub ----------------------------------------------------- お忙しいこととは思いますが、またお時間がございましたら引き続きご指導をお願いします。 m(__)m

その他の回答 (3)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.3

マクロだったら、こんな感じでいいかと思います。 Range("A1:M" & Range("J" & Rows.Count).End(xlUp).Row).Copy

maokongreen
質問者

補足

ありがとうございます。 下記のコードに教えていただいた範囲選択を挿入して動かしてみたところ、まとめ用のシートに1行目だけが統合されました。 --------------------------------------------------------- Sub MergeSheets() Dim intLoop As Integer '画面更新の停止 Application.ScreenUpdating = False '先頭にワークシートを1枚追加 Worksheets.Add before:=Worksheets(1), Count:=1 For intLoop = 2 To Worksheets.Count '元データを選択してコピー Worksheets(intLoop).Select Range("A1").CurrentRegion.Select Range("A1:M" & Range("J" & Rows.Count).End(xlUp).Row).Copy '先頭のワークシートに貼り付け Worksheets(1).Select If intLoop = 2 Then Range("A1").Select Else Cells(ActiveSheet.Rows.Count,1).End(xlUp).Offset(1).Select End If ActiveSheet.Paste Next intLoop 'コピーモードを解除して全シートのA1セルを選択 Application.CutCopyMode = False Worksheets.Select Range("A1").Select Worksheets(1).Select '画面更新停止の解除 Application.ScreenUpdating = True '完了メッセージ MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。" End Sub --------------------------------------------------------- 1枚にまとめる部分ですが、やはり理解できていません(汗) おかしい点を教えていただけないでしょうか。 どうぞ宜しくお願い致します。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

数式のタブ→名前の定義で、名前に例えば「範囲」、数式に「=OFFSET(!$A$1,,,COUNTA(!$J$:$J$),13)」の様に入れ、OK 各シート、数式バーの左横の「名前ボックス」に、直接「範囲」と入力、Enterで必要範囲を範囲選択できます。

  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

単純に写真のA1からM20を選択したいのでしたら、 A1セルを選択した後にctrl+Shift+Endキーを押すと選択してくれます。

maokongreen
質問者

補足

すみません、大事なことを書き忘れていました。 マクロでの範囲指定の方法でした。 お時間がございましたら、引き続きご指導宜しくお願いします。

関連するQ&A

  • VBA 範囲指定してコピー&ペーストしたい

    WindowsXP SP2 Office2003 を使っています。 ExcelVBAで、 シート「Sheet1」のセル(B9:B40)を範囲選択してコピーし、 シート「Sheet2」のセル(A2:A33)に貼り付けをしたいのです。 行数は毎月増えていきます。 例えば、1月が9から40でしたら、2月は41から70、3月は71から102・・・ B列だけだったら、Range("B" & tateA & " :B" & tateB).Select で記述できますが、 列は、7個ずつ増えた列数の情報を取得したいのです。 Sheet1では、B列から始まり7個ずつ列数が増え、I列(I9:I40)、P列(P9:P40)、W列(W9:W40)・・・の値を Sheet2のB列、C列、D列に値ベースで貼り付けするマクロを考えています。 (Sheet2の列数は1個ずつ増えます。) ざっくりになりますが表のイメージとしては、 Sheet1にはカテゴリ毎に複数の項目があり、 Sheet2にはSheet1のカテゴリ毎の合計値だけを一覧にし、見やすく表示させたいのです。 1回の処理では1ヶ月分の処理を行うため、行情報は9から40で固定なのですが、 列番号は一定の数増えたものを変数にしたいのですが、表示の仕方が分かりません。 ようは『Range("B" & tateA & " :B" & tateB).Select』 の列表示のBも変数にして、 その変数を7個ずつ増やして処理をしたいのです。 説明がうまく出来なくて申し訳ないのですが、 列と行を変数にした表示の仕方を分かる方がいましたら、教えてください。 よろしくお願いします。

  • 表を指定範囲内にコピーする

    シート1で表を作りコピーボタンを押すと、その表を別のシートにコピーするにはどうすればいいのですか?(コピーボタンは、シート1内にある物とする)条件として、別のシートのC列~N列の間で最終行の次の左端にコピーするものとする。また、C列~N列以外にデーターがあっても関係ないものとする。例、シート1の表(B1~L24)をシート2にコピーするとする。シート2を見るとA20,F15,P18にデーターがあります。A20とP18はC列~N列の範囲外で範囲内にあるセルF15によりセルC16からコピーするにはどうすればいいですか。また、実際には、シート2のデーターは決まっていません。 よろしくお願いします。

  • 特定のセルの数値の行数だけコピーしたい

    お世話になります。 Excel2002で次のことをやろうとしています。 特定のセルに表示されている数値の行数だけコピーする。 これを、マクロを使って実行したいのですが、その方法が思いつきません。 どのようにしたら良いかお教えください。 [コピー元]のシートの"J53"のセルに、例えば「13」が表示されています。 この「13」がコピーする行数です。 このシートには多くのデータが入っていますが、そのうちの"A1"~"G13"だけのセルをコピーし、[コピー先]のシートの"A8"~"G20"に貼り付けるものです。 コピーする行数を表示しているセル"J53"は、常にこの位置です。 コピーするデータの列は常に"A"~"G"で、変わることはありません。 コピーするデータの行は、始まりは常に"1"からで、最後は"J53"に表示されている数値の行です。 コピーする行数を示す"J53"に表示される数値は「1」~「52」の範囲内です。 コピー先の位置は、[コピー先]のシートの"A8"~で、変わることはありません。 類似の質問を探したり、他にもネット上で探したのですが見つかりませんでした。 よろしくお願いします。

  • 検索した文字のセルを基準に範囲指定コピーのマクロ

    表題のマクロを教えてください。 検索範囲 シート1のA1:K100 検索する文字 ” 成績 ” コピーする範囲 見つかったセルの下の行から5行~10列まで全部。 貼り付ける場所 シート2のB1 宜しくお願いします。

  • EXCEL2000でデータ行コピーしてコピーした列のセルを置換する作業をカンタンにする方法をご教授ください

    EXCEL2000を使っています。 データとしては、A~BC列(シートによって列数は違います)くらいまでのシートが複数あります。 これらのシートのA列には必ず西暦4桁が入力されています。 Sheet1シートのA列に2007と入力されている複数行をコピーして、最終行に貼り付けて、貼り付けた行のA列を2004から2008までのデータに置き換えていく作業を行ってます。 今はコピーして貼り付けて、貼り付けた範囲指定で2007から2004へ置換の作業を繰り返しておりますが作業しなければいけないシート数が沢山あって苦慮しております。 シート毎でもブック毎でも構いません。 VBA等の解決策や方法等を何卒ご教授願います。

  • 簡単なセルのコピー方法を教えて下さい。

    お世話になります。Office2003を使用しております。 エクセルで甲のシートのA列に、乙のシートのA行のセルの データを7列おきにコピーしたいのですが、簡単な方法があれば 教えて頂けないでしょうか。           A1 B1 C1 D1 1  →    1  8 15 22 2 3 4 5 6 7 ・ ・ 100

  • エクセルで離れたセルのコピー

    ある列に週の平均値が入っているのですが、数値が入っているのは、日曜日のセルだけで、他のセルは空欄です。この平均値だけを抽出して、別のシートにコピーしたいと思いますが、どうやったらいいのでしょうか。 次の方法を試しましたがうまくいきませんでした。 sheet2のA1に=sheet1!B1と入れる sheet2のA2に=sheet1!B8と入れる sheet2のA1とA2を選択してオートフィルでコピー

  • 行と列数を指定してセル内容を複写

    A1に行数、B1に列数を入力して、C1にそれに合致するセルの内容をコピーしたいと思います。 例えばA1に2、B1に1を入力したときは、2行目、1列目即ちA2の内容をC1にコピーし、 A1に100、B1に2を入力したときは、B100の内容をC1にコピーするといった具合です。 この場合、C1にはどのような関数を入れればよいでしょうか。

  • VBAにて範囲選択およびコピーの方法について

    連休中失礼いたします。VBA初心者です。 VBAにて範囲選択の方法およびコピーの方法について教えてください。 (1)範囲選択の方法  まず最初の条件としてD列における値が1.0以上(数値表記は少数点)の場合に限り、 それに該当する行をコピー(A~D列)したいのですが… この方法をVBAの式で表したいのです。  範囲選択として求めたい範囲は、下表で行くとRange(”A3:D6”)の範囲を選択したいのです。  ※D列における値が1.0以上の条件の指定までは、何とかできてそうな感じなのですが、   その条件を満たす、範囲選択がうまくできません。 (2)コピーの方法  (1)で選択した範囲を、選択sheetを変更して貼り付けたいのですがどのようにしたらよろしいでしょうか??       A列     B列     C列      D列 1行    13     10      10      0.5 2行    10     8       7       0 3行    11     9       7       1.0 4行    9      25      18      1.5 5行    8      43      23      1.5 6行    7      12      23      1.0 7行    6      23      43      0.5  8行    15     23      54      0 … …

  • Excelでのセルの参照について

    Excel2000を使っています。 例えば Sheet2のA1に=IF(ISBLANK(Sheet1!A1),"",VLOOKUP(Sheet1!A1,Sheet3!$A$1:$B$100,2,0)) を入れてあります。 これをA列奇数行だけにコピーすると、検索するセルも参照するセルも奇数行になってしまいます。 少数だったら行数を直せばよいのですが、たくさんあって手に負えません。 何かいい方法はありませんか? 助けてください。

専門家に質問してみよう