特定の値が存在する場合、IF数式を使用してセルの内容を動的にコピーしようとする


0

関連付けられたレコード[行]に特定の単語が含まれている場合、あるワークシートから別のワークシートにセルを複製する必要があります。

行2のセルAに「foo」があるとします。その行のすべてのセルを別のブックに複製したいと思います。A3に「floop」が含まれている場合、セルは複製されません。つまり、本質的に(空白行なしで)スキップされます。

データは次のとおりです。

    A   |   B   |  C

2  foo  | blah  | blah

3 floop | blah  | blah

4  foo  | blah  | blah

結果のテーブルは次のようになります。

    A   |   B   |  C

2  foo  | blah  | blah

3  foo  | blah  | blah

-

これは私が得た限りです:

数式= IF(ISNUMBER(SEARCH( "foo"、a2))、a2、 "") [Which I感覚は冗長ですが、機能しているように見える唯一のビットです。]

最終テーブルでは、= IF(ISNUMBER(ISBLANK(A52))、A2、[!!!!!])を使用しています [ここで[!!!!!]は、私が知らない表示コードです。] 「FALSE」として解決します

これは基本的な質問である可能性が高いことはわかっていますが、他の場所で答えを見つけることができなかったのです。

前もって感謝します!-p

PSこれを書いているときに、個々のセルではなく行全体を処理する必要があることを理解しているため、別のアプローチが必要になる可能性があります。しかたがない!ここまで来ました!


Ask Differentへようこそ!:)明確にするために、同じワークブック内の別のワークシートに行をコピーするのですか、それとも別のワークブックにコピーするのですか?
モノミース

回答:


1

これを実現するためにIF式を使用することには、いくつかの理由で問題があります。しかし、あなたがそれを機能させたと仮定すると、常に数式をセル内に配置する必要があるため、ワークブックはスケーラブルではないという問題が発生します(行を追加/削除した場合/時間が経過するとどうなりますか?)もちろん、それを回避することもできます(たとえば、データを適切なテーブル/リストとしてフォーマットすることで)が、私の経験からは、これを行うにはマクロを使用する方が良いでしょう。

手順1:Excelに[開発]タブを追加する

まず、Excelのリボンに[開発]タブが表示されていることを確認する必要があります。既に存在する場合(通常は[表示]タブの最後にある場合は、ステップ2:マクロの作成に進みます。それ以外の場合は、以下の手順を実行します。

  1. MS Excelを起動
  2. [Excel]> [設定]に移動します(または単にcommand,キーを押します)
  3. リボンとツールバーのアイコンを選択します
  4. リボンタブが上部で選択されていることを確認します
  5. 右側にタブのリストが表示されます-[開発]タブの横にあるチェックボックスを選択します(おそらく一番下に表示されます)
  6. クリックしてSave、ボタン
  7. 終了設定
  8. これで、[開発]タブが表示されます(下の画像を参照)。

ここに画像の説明を入力してください

ステップ2:マクロを作成する

次に、マクロを作成する必要があります。次の手順を実行します:

  1. Excelで、ブックが開いていることを確認します
  2. [開発者]タブを選択します
  3. Visual Basicオプション(リボンの左端)をクリックします
  4. これにより、Microsoft Visual Basicウィンドウが開きます。
  5. ウィンドウの左上は次のようになります。

  6. ThisWorkbookを右クリックして、[挿入]> [モジュール]を選択します(以下を参照)

  1. しばらくすると、Visual Basic Editorの右側に白いウィンドウが開きます。
  2. 次のコードをコピーして、空白に貼り付けます。

    Sub CopyRowsBasedOnCellValue()
    'This macro copies rows from one worksheet to another within the same workbook if that row contains a specific value in Column A
        Dim xRg As Range
        Dim xCell As Range
        Dim X As Long
        Dim Y As Long
        Dim Z As Long
        X = Worksheets("Sheet1").UsedRange.Rows.Count
        Y = Worksheets("Sheet2").UsedRange.Rows.Count
        If Y = 1 Then
            If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then Y = 0
        End If
        Set xRg = Worksheets("Sheet1").Range("A1:A" & X)
        On Error Resume Next
        Application.ScreenUpdating = False
        For Z = 1 To xRg.Count
            If CStr(xRg(Z).Value) = "foo" Then
                xRg(Z).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & Y + 1)
                Y = Y + 1
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    
  3. これで、次のようなものが表示されるはずです。

ここに画像の説明を入力してください

  1. 現在、このコードは質問の例専用に作成されているため、少しカスタマイズする必要があります。次の側面をカスタマイズする必要があります。

    • の2つのインスタンスをSheet1最初のワークシート(コピー元のワークシート)の名前に置き換えます
    • の3つのインスタンスをSheet22番目のワークシート(つまり、コピー先のワークシート)の名前に置き換えます
    • のインスタンスA1:Aは、一致させようとしている値を検索する列を示します(例では「foo」値。ワークシートの列Aでない場合は、必要な列にAを変更します。たとえば、ワークシートの列Dに「foo」値が含まれている場合、これはD1:D
    • 最後"foo"に、コード内にの単一のインスタンスが表示されます。fooを、一致させようとしている値に置き換えます。
  2. 最後に、ワークブックをマクロ対応のものとして保存する必要があります。これを行うには、左上にあるExcelアイコンをクリックしてExcelに戻り、[ファイル]メニューから[名前を付けて保存]オプションを選択します。ファイル形式については、ドロップダウンリストからExcelマクロ有効ワークブック(.xlsm)オプションを選択する必要があります。

ステップ3:マクロを使用する

これで準備完了です。マクロを使用するには、次の手順を実行します。

  1. Excelを起動してワークブックを開きます
  2. [開発者]タブを選択します
  3. マクロアイコンをクリックします(2番目のアイコンでなければなりません)
  4. これにより、マクロウィンドウが表示されます。
  5. CopyRowsBAsedOnCellValueマクロを選択します(以下を参照)

ここに画像の説明を入力してください

  1. クリックしてRun、ボタン
  2. マクロが実行され、条件に一致するすべての行が目的のシートにコピーされます。以下は、あなたの例に基づいて、前後のショットを示す画像です:

ここに画像の説明を入力してください


注:上記のコードは、元々https://www.extendoffice.com/から供給されたコードを修正したものです。私はそのウェブサイトとは一切関係ありません。


うわー、最初に読んで、これはまさに私が必要なもののように見えます!ありがとう!私は今すぐ試してはいけませんが、すべての努力にすぐに感謝したかったです。試しにチェックインします。
アレクシスレイチェル

心配ない!:)問題が発生した場合はお知らせください。ではごきげんよう!
Monomeeth
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.