• 締切済み

エクセルで25行間隔で行をコピーする方法

エクセルに関して質問させてください。 エクセルに25行間隔で、行ごとをコピーしたいです。 その行は前の24行分の平均値を出したもので関数が入っています。 全部で5万行あるため、平均値の行だけを抽出する法則があればと思いました。 お分かりになる方いらっしゃいましたら教えてください。 よろしくお願いします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

次のようにすることでマクロや関数を使わずに抽出し表示させることができます。黄色のセルといった色にこだわる必要もありません。 仮にシート1のP列に平均値が載ったセルが有るとします。 P列を選択したのちに「ホーム」タブの「検索と選択」から「検索」をクリックします。 表示の画面で検索する文字列の窓に =AVERAGE と入力して「すべて検索」をクリックします。 該当するセル番地などの一覧が下方に窓に表示されます。 Shiftキーを押しながら最初の行から最終行までをクリックします。エクセルの画面上では該当のセルが選択状態になりますので右クリックして「コピー」を選択します。 その後にシート2のA1セルを選択してから右クリックして「選択のオプション」から「リンク貼り付け」を選択して貼り付けを行います。 シート1に戻ってEscキーを押してから「検索と置換」の画面を消します。 シート2のA1セルの数式バーには例えば =Sheet1!$P$10 などのように表示されますね。 シート1での該当の行を抽出して表示できるようにするためには、例えばシート1のA列からすべての列を抽出して貼り付けできるようにするためにはA1セルの式を例えば =Sheet1!A$10のように変換することが必要です。 そのために次の操作を行います。 シート2のA列を選択したのちに「検索と選択」から「置換」をクリックします。 検索する文字列の窓には $P と入力し、置換後の文字列の窓には A と入力し、「すべて置換」をクリックします。 この操作によって例えばA1セルの式は =Sheet1!A$10 のように変わります。この式を右横方向にドラッグコピーすることでシート1の10行目のA列から横の列のデータが表示されることになります。 P列から横の列を表示したいのでしたら 置換後の文字列の窓には P と入力すればよいでしょう。 実際には例えばA100セルまでデータが有るとしたらA1セルからA100セルまでを選択してからA100セルの右下隅の■をクリックして右横方向にドラッグコピーすれば該当するすべての行のデータが表示されることになりますね。

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

Excel2007以降であれば、フィルタを使えば、黄色のみ表示出来ます。 色のある列を選択→データ→フィルタを選び、1行目の▼より、色フィルタ→黄色を選びます。 これを、ホーム→検索と選択→条件を選択してジャンプ→可視セルを選びOKし、コピーして、新規シートに貼り付けます。 Excel2003までであれば、以下のマクロでできます。 Sub macro() Dim C As Range For Each C In Range("P1:P" & Range("P" & Rows.Count).End(xlUp).Row) If C.Interior.ColorIndex <> 6 Then C.EntireRow.Hidden = True End If Next C Cells.SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteValues Rows.Hidden = False End Sub

回答No.3

時間掛かりそう... Sub CopyRows() Const xSheet = "Sheet1" '入力(データ)シート Const xStep = 25 '抽出の行間隔 Const xTop = 2 '入力開始行 Const wTop = 2 '出力開始行 Dim xEnd As Long Dim jj As Long Dim kk As Long '出力はアクティブシート xEnd = Worksheets(xSheet).Range("A65536").End(xlUp).Row kk = wTop For jj = (xStep + XTop - 1) To xEnd Step xStep Worksheets(xSheet).Rows(jj).Copy ' Rows(kk).PasteSpecial Paste:=xlPasteFormulas Rows(kk).PasteSpecial Paste:=xlValues kk = kk + 1 Next End Sub

回答No.2

その対象となる行全体が黄色で塗られているとして、 1. [Ctrl]+[F]検索 2. 書式▼ 書式 パターン 黄色 [OK] 3. [すべて検索] - [Ctrl]+[A]すべて選択(黄色で塗られた行が選択される 4. [閉じる] 5. [Ctrl]+[C]コピー 6. 別シートのA1セルを選んで [Ctrl]+[V]貼り付け

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

表をまず、新規シートに、形式を選択して貼り付け→値で貼り付けます。 A列を選択し、右クリック挿入で1列、挿入し、 A1のセルに1、A26のセルに2と入力し、 A1:A50まで選択し、下へ5万行までオートフィル 表全体を範囲選択→データ→並べ替え A列をキーにして、昇順で並べ替えします。 A列に数字がある部分が平均値の行です。

maki0225
質問者

補足

早々の御解答ありがとうございます。 そんな方法があるとは思いつきませんでした。 ただ折角教えていただいたのに申し訳ありません。 今やってみたのですが、最初のほうは25行づつなのですが、微妙にずれている部分があったようです。。。。。 抽出したい平均値の行の部分は黄色に背景が塗られているのですが、背景が塗られている行だけ抽出するような方法はありませんでしょうか。 表としては現在下記のようになっています。 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(←ここが平均値で黄色い拝啓) 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1(←ここが平均値で黄色い拝啓) 行はもっと多く、大体25行間隔です。 またA行からではなくP行から始まっているような感じになっています。 MVBをわからないなりに調べてやってみているのですが、エラーがでてしまい下記ような状態でとまっています。 Sub try() Dim i As Long, j As Long Dim k As Integer i = 26 j = 1 For k = 1 To 40 Sheets("Sheet2").Range("P" & Z).Resize(1, 24).Value = _ Sheets("Sheet1").Range("P" & Z).Resize(1, 24).Value i = i + 25 j = j + 1 Next End Sub 度々の質問申し訳ありまえんが、黄色で塗られた部分を抽出する方法ありましたら教えていただけませんでしょうか。 よろしくお願いします。

関連するQ&A