Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

Microsoft Excelでは、特定の条件に一致する行だけを抜き出して、別のワークシートへコピーしたい場面がよくあります。この記事では、Excelで条件を満たす行を別のシートにコピーするための実践的な方法を6つ、手順つきでわかりやすく解説します。

練習用ワークブックのダウンロード

以下からワークブックをダウンロードすれば、記事の手順を実際に操作しながら学べます。

条件に基づいて行を別のシートにコピーする6つの方法

ここでは、初心者でもすぐ使える6つの方法を紹介します。どれも実用性が高く、目的やデータ量に応じて使い分けできます。それでは、順番に見ていきましょう。

1. フィルター機能を使って行を別のシートにコピーする

まずは最も基本的なフィルターを使った方法です。例として、「果物名・単価・重量・合計金額」を含むデータセットを使用します。この表はFilter Op.というシートに保存されており、Result1シートへ条件に合う行をコピーします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

手順:

  • まず、データ範囲を選択します。
  • 次に、リボンのデータタブを開きます。
  • 続いて、並べ替えとフィルターグループ内のフィルターをクリックします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 絞り込みたい列(ここではFruits列)のフィルター矢印をクリックします。
  • 抽出したい項目を選択します。例としてMangoのみにチェックを入れます。すべての行を対象にする場合は(すべて選択)を選びます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 表示されたデータ全体を選択し、Ctrl+Cでコピーします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • シート見出し下の+ボタンをクリックして新規シートを作成します(ショートカットキーShift+F11でも可)。
  • 新しいシートResult1上でCtrl+Vを押して貼り付けます。
  • これで、Filter Op.から抽出したデータがResult1へコピーされます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

2. 詳細フィルターを使って行を複製する

次に、詳細フィルター(Advanced Filter)を使う方法です。ここでは、合計金額が150より大きい果物の行を、元データのシートからResult1.1シートへコピーします。

手順:

  • まず、Result1.1シートを開き、データタブの詳細設定をクリックします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • ダイアログで「指定した範囲」(Copy to another location)を選択します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • リスト範囲欄をクリックし、元データシートに移動してデータセット全体を選択します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 次に、検索条件範囲欄に、あらかじめ作成しておいた条件(合計金額>150など)のセル範囲を指定します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 抽出先欄を選択すると自動的にResult1.1シートへ切り替わるので、貼り付け先の任意のセルをクリックします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • OKボタンを押します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • これで、指定した条件に一致する行だけが元シートからResult1.1へ抽出・コピーされます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

3. 配列数式を使って行を別のシートにコピーする

数式を使えば、コピー処理を自動化できます。ここでは、前述のデータセットにショップ名(Shop Names)の列を追加したデータを使用し、ショップ名ごとに新しいシートへ行を振り分けます。各シートにはショップ名と同じ名前を付けておきます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

手順:

  • まず、ショップ名ごとの新しいワークシートを作成します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 次に、例えばRootedシートのセルB4に以下の数式を入力し、Ctrl+Shift+Enterで確定します。Microsoft 365をお使いの場合はEnterだけでOKです。

=IFERROR(INDEX(Sheet7!$A$4:$E$100,SMALL(IF(Sheet7!$F$4:$F$100=$F$3,ROW(Sheet7!$A$4:$B$100)-ROW(Sheet7!$B$4)+1),ROWS(Sheet7!$A$4:$B4)),COLUMN()),"")

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

数式の解説

この配列数式では、以下のExcel関数を使用しています。

ROWS(array)
ROWS関数は、指定した配列またはセル範囲に含まれる行数を返します。

COLUMN([reference])
COLUMN関数は、引数に渡したセル参照に対応する列番号を返します。

SMALL(array, n)
SMALL関数は、指定した配列の中からn番目に小さい値を求めます。第1引数にデータ範囲、第2引数に取得したい順位を指定します。

INDEX(array, row_num, [column_num])
INDEX関数は、範囲内の指定した位置にある値を返します。第1引数に対象の配列、第2引数に行番号、第3引数(省略可)に列番号を指定します。

IFERROR(value, value_if_error)
IFERROR関数は、数式全体の外側に配置されたエラー処理用の関数です。結果がエラーの場合に、代わりの値(ここでは空文字)を返します。

  • さらに、数式を下方向・右方向にコピーすると、条件に一致するすべての行が表示されます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 他のワークシートについても同じ操作を繰り返します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 元データのArray Formulaシートで値を変更してみると、各シートの内容が自動的に更新されることが確認できます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • Rootedシートを開いて変更が反映されているかチェックしましょう。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

4. 複数の関数を組み合わせて行を複製する

次は、IF・AND・MAX・INDEX・MATCHなどの関数を組み合わせる方法です。ここでも同じデータセットを使い、ドロップダウンリストからショップ名を選択してEnterキーを押すと、Functionsシートから合計金額が130以上の行だけがResult2シートへ自動的に表示される仕組みを作ります。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

手順:

  • まず、FunctionsシートのセルG5に以下の数式を入力します。

=IF(AND(F4=Sheet15!$C$1,E4>=130),MAX(G$1:G2)+1,"-")

  • Enterキーを押します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • フィルハンドルをドラッグして数式を下の範囲までコピーします。プラス(+)マークをダブルクリックすればオートフィルも可能です。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • これで、条件に一致する行に通し番号が付けられます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

数式の解説

MAX(number1, [number2], ...)
MAX関数は、引数に渡した数値の中から最大値を返します。

AND(logical1, [logical2], ...)
AND関数は論理関数で、すべての条件が満たされればTRUE、そうでなければFALSEを返します。

IF(logical_condition, [value_if_true], [value_if_false])
IF関数は、条件の真偽に応じて異なる値を返す代表的な条件分岐関数です。

  • 続いて、Result2シートのセルB7に以下の数式を入力します。

=IFERROR(INDEX(Sheet14!F:F,MATCH(ROWS($1:1),Sheet14!$G:$G,0))&"","")

  • Enterキーを押します。

数式の解説

ここで新しく登場するのはMATCH関数です。

MATCH(lookup_value, lookup_array, [match_type])
MATCH関数は、第1引数に検索値、第2引数に検索範囲、第3引数に照合の型(-1、0、1)を指定し、検索値が範囲内の何番目にあるかを返します。

  • さらに、数式を下方向・右方向へコピーします。
  • ドロップダウンから任意のショップ名を選択すると、そのショップのうち合計金額が130以上の果物の行だけが表示されます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

5. FILTER関数を使って行を別のシートにコピーする

FILTER関数(Microsoft 365/Excel 2021以降で利用可能)を使うと、条件に一致するデータを一瞬で抽出できます。FILTERシートのデータを、条件に基づいてResult3シートへコピーしてみましょう。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

手順:

  • まず、結果を表示させたいセルを選択します。ここではResult3シートのセルB5です。
  • そこに以下の数式を入力します。

=FILTER(FILTER!B4:F14,FILTER!F4:F14="Rooted")

  • Enterキーを押します。
  • これで完了です!条件を満たすすべての行が、FILTERシートからResult3シートへ自動的に展開されます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

6. VBAを使って行を別のシートにコピーする

最後はVBAマクロによる自動化です。コマンドボタンを1回クリックするだけで、VBAシートから合計金額が150より大きい果物の行をResult4シートへ転記します。

手順:

  • まず、開発タブを開きます(表示されていない場合はExcelのオプションから有効化してください)。
  • 挿入からActiveX コントロールのコマンドボタンを選択します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • プロパティウィンドウで、ボタンのキャプションやフォントを好みに合わせて変更します。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • ボタンをダブルクリックするとVBE(VBAエディター)が開くので、以下のコードを貼り付けます。

コード:

Private Sub CommandButton1_Click()
a = Worksheets("VBA").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To a
If Worksheets("VBA").Cells(i, 4).Value > 150 Then
Worksheets("VBA").Rows(i).Copy
Worksheets("Result4").Activate
b = Worksheets("Result4").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Result4").Cells(b + 1, 1).Select
ActiveSheet.Paste
Worksheets("VBA").Activate
End If
Next
Application.CutCopyMode = False
ThisWorkbook.Worksheets("VBA").Cells(1, 1).Select
End Sub

VBAコードの解説

  • まずVBAシートの最終行番号を取得し、変数aに格納します。
  • For文で各行をループし、IF文で各行の合計金額が150より大きいかを判定します。
  • 条件に一致したら行をコピーし、Result4シートの最終行番号を変数bに取得します。
  • b+1行目に貼り付けることで、既存データの下へ順に追記していきます。
  • コードを実行するには、F5キーを押すか、シート上のボタンをクリックします。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

  • 最後にResult4シートを開けば、条件に一致する行がコピーされているのが確認できます。

【Excel】条件に合う行だけを別のシートにコピーする6つの方法

まとめ

この記事では、Excelで条件に一致する行を別のシートへコピーする6つの方法を、具体例とともに解説しました。手作業で済ませたいならフィルター詳細フィルター、自動化したいなら配列数式・FILTER関数・VBAがおすすめです。用途に合わせて最適な方法を選んでみてください。

関連記事

  • 他のセルのテキストを表示する方法(4選)
  • 2つのシートを比較して差分をコピーするVBAコード
  • VBAで書式なしで値だけを貼り付ける方法
  • Excelでコピー&ペーストができないときの原因と対処法(9パターン)
  • マクロで複数行をコピーする方法(4つの例)
  1. Excelで条件に基づいて行を列に転置する方法(数式・VBAの2つのアプローチ)

    通常、行を列に変換したい場合にはTRANSPOSE関数がよく利用されます。しかし、TRANSPOSE関数では「一意の値(ユニークな値)だけを抜き出す」といった特定の条件に基づいた結果を返すことができません。そこで本記事では、Excelで条件に基づいて行を列に転置する方法をわかりやすく解説します。 Excelで条件に基づいて行を列に転置する2つの便利な方法 以下の図には、複数の商品名とそれぞれの数量をまとめたサンプルデータセットを用意しました。ここから行を列へ転置していきます。データ内には同一商品の重複行が含まれているため、一意の値を条件として転置処理を行います。 まずはINDEX関数・MATC

  2. Excelで別シートからデータをマッピングする6つの便利な方法

    複数のワークシートを行き来しながら作業することは、Excelユーザーにとってごく日常的なことです。しかし、シート間でデータをマッピング(対応付け)するのは非常に時間のかかる作業になりがちです。そこで本記事では、別シートからデータをマッピングするための6つの便利な方法を、具体例とともにわかりやすく解説します。 サンプルファイルのダウンロード こちらからサンプルファイルをダウンロードして、実際に手を動かしながら練習してみてください。 Excelで別シートからデータをマッピングする6つの方法 説明用として、ここでは2つのデータセットを用意しました。1つ目は、注文番号・顧客名・国の情報をまとめたも