Note: The other languages of the website are Google-translated. Back to English

Excelのセル値に基づいて行全体を別のシートに移動するにはどうすればよいですか?

セルの値に基づいて行全体を別のシートに移動するには、この記事が役立ちます。

VBAコードのセル値に基づいて、行全体を別のシートに移動します
Kutools for Excelを使用して、セル値に基づいて行全体を別のシートに移動します


VBAコードのセル値に基づいて、行全体を別のシートに移動します

以下のスクリーンショットに示すように、列Cに特定の単語「Done」が存在する場合は、行全体をSheet1からSheet2に移動する必要があります。次のVBAコードを試すことができます。

1。 押す 他の+ F11 キーを同時に開いて アプリケーション向け Microsoft Visual Basic 窓。

2. [Microsoft Visual Basic for Applications]ウィンドウで、[ インセット > モジュール。 次に、以下のVBAコードをコピーしてウィンドウに貼り付けます。

VBA code 1: Move entire row to another sheet based on cell value

Sub Cheezy()
'Updated by Kutools for Excel 2017/8/28
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            xRg(K).EntireRow.Delete
            If CStr(xRg(K).Value) = "Done" Then
                K = K - 1
            End If
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

注意:コードでは、 Sheet1 ワークシートには、移動する行が含まれています。 そして Sheet2 行を配置する宛先ワークシートです。 「「C:C」は特定の値を含む列であり、「クリックします」は、行を移動する特定の値です。 必要に応じて変更してください。

3。 プレス F5 キーを押してコードを実行すると、Sheet1の条件を満たす行がすぐにSheet2に移動します。

注意:上記のVBAコードは、指定されたワークシートに移動した後、元のデータから行を削除します。 行を削除するのではなく、セル値に基づいて行をコピーするだけの場合。 以下のVBAコード2を適用してください。

VBA code 2: Copy entire row to another sheet based on cell value

Sub MoveRowBasedOnCellValue()
'Updated by Extendoffice 2017/11/10
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
    If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Kutools for Excelを使用して、セル値に基づいて行全体を別のシートに移動します

VBAコードの初心者の場合。 ここで紹介します 特定のセルを選択 の有用性 Kutools for Excel。 このユーティリティを使用すると、ワークシート内の特定のセル値または異なるセル値に基づいてすべての行を簡単に選択し、必要に応じて選択した行をコピー先のワークシートにコピーできます。 次のようにしてください。

申請する前に Kutools for Excelについては 最初にダウンロードしてインストールします.

1.行を移動するセル値が含まれている列リストを選択し、をクリックします クツール > 次の項目を選択します。: > 特定のセルを選択。 スクリーンショットを参照してください:

2.オープニングで 特定のセルを選択 ダイアログボックスで、 行全体 選択タイプ セクション、選択 等しいです 特定のタイプ ドロップダウンリストで、テキストボックスにセルの値を入力し、[ OK ボタン。

別の 特定のセルを選択 ダイアログボックスがポップアップして、選択した行の数が表示されます。その間、すべての行には、選択した列に指定した値が含まれています。 スクリーンショットを参照してください:

3。 プレス Ctrlキー + C キーを押して選択した行をコピーし、必要な宛先ワークシートに貼り付けます。

注意:XNUMXつの異なるセル値に基づいて行を別のワークシートに移動する場合。 たとえば、「完了」または「処理中」のセル値に基づいて行を移動すると、 Or の条件 特定のセルを選択 以下のスクリーンショットのようなダイアログボックス:

  無料トライアルをご希望の方は(30-day) このユーティリティの クリックしてダウンロードしてください、次に、上記の手順に従って操作を適用します。


関連記事:


最高のオフィス生産性ツール

Kutools for Excelはほとんどの問題を解決し、生産性を80%向上させます

  • 再利用: すばやく挿入 複雑な数式、チャート および以前に使用したものすべて。 セルを暗号化する パスワード付き。 メーリングリストを作成する そしてメールを送る...
  • スーパーフォーミュラバー (複数行のテキストと数式を簡単に編集できます); 読書レイアウト (多数のセルを簡単に読み取って編集する); フィルター範囲に貼り付け...
  • セル/行/列をマージする データを失うことなく; 分割セルコンテンツ; 重複する行/列を組み合わせる...重複セルを防止します。 範囲を比較する...
  • [複製]または[一意]を選択します 行; 空白行を選択 (すべてのセルは空です); スーパーファインドとファジーファインド 多くのワークブックで; ランダム選択...
  • 正確なコピー 数式参照を変更せずに複数のセル。 参照の自動作成 複数のシートに; 箇条書きを挿入、チェックボックスなど...
  • テキストを抽出、テキストの追加、位置による削除、 スペースを削除する; ページング小計の作成と印刷。 セルの内容とコメントを変換する...
  • スーパーフィルター (フィルタースキームを保存して他のシートに適用します); 高度な並べ替え 月/週/日、頻度など。 特殊フィルター 太字、斜体...
  • ワークブックとワークシートを組み合わせる; キー列に基づいてテーブルをマージします。 データを複数のシートに分割; xls、xlsx、PDFをバッチ変換...
  • 300 以上の強力な機能. Office / Excel 2007-2021 および 365 をサポートします。すべての言語をサポートします。 企業や組織に簡単に導入できます。 フル機能の 30 日間無料トライアル。 60日間の返金保証。
kteタブ201905

Officeタブは、タブ付きのインターフェイスをOfficeにもたらし、作​​業をはるかに簡単にします

  • Word、Excel、PowerPointでタブ付きの編集と読み取りを有効にする、パブリッシャー、アクセス、Visioおよびプロジェクト。
  • 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
  • 生産性を 50% 向上させ、毎日何百回もマウス クリックを減らすことができます!
officetab下部
コメントを並べ替える
コメント (299)
まだ評価はありません。 最初に評価してください!
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、私はこの特定のガイドが私が見た他のものよりも本当に役立つと思いました。 ありがとうございました! 私が抱えている問題は、目的の値を「クローズ」に変更した場合、F5を実行して行を移動する必要があることです。 自動的に動かして欲しいのですが。 私はExcelを初めて使用するので、ご協力いただければ幸いです。 Sub Cheezy()Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets( "ECR Incident Tracker")。UsedRange.Rows.Count J = Worksheets( "Resolved Issues")。UsedRange.Rows。 Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets( "Resolved Issues")。UsedRange)= 0 Then J = 0 End If Set xRg = Worksheets( "ECR Incident Tracker")。Range( "B1:B" &I)エラー時に次のApplication.ScreenUpdating = False For Each xCell In xRg If CStr(xCell.Value)= "Closed" Then xCell.EntireRow.Copy Destination:= Worksheets( "Resolved Issues")。Range( "A" &J + 1)xCell.EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、モジュールを開いてF5キーを押すことなく、セルの移動を自動化しようとしています。 この質問を解決したことはありますか? 前もって感謝します!
このコメントは、サイトのモデレーターによって最小化されました
クリスタルは今日それを行う方法についての情報を提供しました-彼女の反応を見るためにこのスレッドのXNUMXページを見てください。 列(私の場合はL)に今日の日付が含まれる行を別のワークシートに自動的に移動します。
このコメントは、サイトのモデレーターによって最小化されました
このコードを実行していて、列Iに表示されている今日の日付に基づいて行を移動しようとしています-Range( "B1:B"&I)をRange(I1:I "&I)に変更しました。"を変更しました例の「完了」を日付に変更します。ただし、今日の日付が、必要に応じてI列だけでなく、行のどこかに表示されると、行は別のワークシートに移動します。これが発生する理由と、行を移動させる方法についてのアイデア今日の日付が他の列に表示されているかどうかに関係なく、今日の日付が列Iにある場合のみですか?
このコメントは、サイトのモデレーターによって最小化されました
行を移動するために多くの値と多くのシートが必要な場合は、そのセルに異なる値を使用してコード全体を再度作成する必要がありますか? つまり、XNUMXつのセルにNAを入れると、Naシートになり、W#を入れると、間違った番号シートなどになります。
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、これはとても役に立ちました。 データの行をXNUMX番目のシートに移動せずに、コピーする方法はありますか? では、データは両方のシートに残りますか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、コードは非常に役に立ちましたが、行全体をコピーする代わりに、特定の行を選択して次のシートに移動する必要があります。 行全体ではなく範囲を定義するにはどうすればよいですか?Sub Cheezy()Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets( "Sheet1")。UsedRange.Rows.Count J = Worksheets( " Sheet2 ")。UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets(" Sheet2 ")。UsedRange)= 0 Then J = 0 End If Set xRg = Worksheets(" Sheet1 ")。Range( "C1:C"&I)エラー時に次のアプリケーションを再開します。ScreenUpdating= False For each xCell In xRg If CStr(xCell.Value)= "Done"ThenxCell。全体の行.Copy Destination:= Worksheets( "Sheet2")。Range( "A"&J + 1)J = J + 1 End If Next Application.ScreenUpdating = True End Sub
このコメントは、サイトのモデレーターによって最小化されました
行(特定のセル)を別のシートの特定のセルにコピーする場合のコードは何ですか? しかし、値にも基づいています例: カラー商品画像文字列 ホワイトブレンダー2ホワイトブレンダー2ブラックジューサー3ブラックジューサー3レッドテレビ1レッドテレビ1グリーンアイアン4グリーンアイアン4ストリングを別のシートにコピーしたいのですが、画像列の数字はコピーする回数を示しています(この場合、ブレンダーストリング2行でコピーする必要があります
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、非常に素晴らしいコードで、非常にうまく機能しています。 このコードを変更して、あるシートから別のシートではなく、あるテーブルから別のテーブルに行を移動するにはどうすればよいですか? どうもありがとう !
このコメントは、サイトのモデレーターによって最小化されました
こんにちは私はコードを使おうとしていますが、Dim xCellAsRangeで構文エラーが発生します。 手伝ってもらえますか?
このコメントは、サイトのモデレーターによって最小化されました
Sub Cheezy()Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets( "Sheet1")。UsedRange.Rows.Count J = Worksheets( "Sheet2")。UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)= 0 Then J = 0 End If Set xRg = Worksheets( "Sheet1")。Range( "C1:C"&I)On Error Resume Next Application.ScreenUpdating = False For Each xCell In xRg If CStr(xCell.Value)= "Done" Then xCell.EntireRow.Copy Destination:= Worksheets( "Sheet2")。Range( "A"&J + 1)xCell。 CompleteRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub 2番目のワークシートを追加して行をsheetXNUMXに移動するにはどうすればよいですか?
このコメントは、サイトのモデレーターによって最小化されました
値として日付を含めたい場合は、何を入力すればよいですか? したがって、日付がない場合、行はシート1に留まり、日付がない場合はシート2に移動しますか?
このコメントは、サイトのモデレーターによって最小化されました
[quote]こんにちは、これはとても役に立ちました。 データの行をXNUMX番目のシートに移動せずに、コピーする方法はありますか? では、データは両方のシートに残りますか?マディー[/quote]誰かがこれを解決しましたか
このコメントは、サイトのモデレーターによって最小化されました
この「xCell.EntireRow.Delete」をコードから削除します
このコメントは、サイトのモデレーターによって最小化されました
そのコード行を削除してマクロを再度実行すると、Excelがフリーズします。 なぜ、どのように修正すればよいですか? データを両方のワークシートに配置し、元のワークシートから削除しないようにします。 TIA
このコメントは、サイトのモデレーターによって最小化されました
これに対する答えはありますか? 私もフリーズします行をコピーしたいのですが削除したくない
このコメントは、サイトのモデレーターによって最小化されました
グッド·デイ、
以下のVBAコードは、行を削除するのではなく、行のみをコピーするのに役立ちます。

サブチージー()
範囲としての薄暗いxRg
xCellAsRangeを暗くする
薄暗い私は長く
ディム J アズ ロング
ディム K アズ ロング
I = Worksheets( "Sheet1")。UsedRange.Rows.Count
J = Worksheets( "Sheet2")。UsedRange.Rows.Count
J=1の場合
Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)=0の場合J= 0
終了する場合
xRg = Worksheets( "Sheet1")。Range( "C1:C"&I)を設定します
エラーで次の再開
Application.ScreenUpdating = False
K=1の場合xRg.Countへ
If CStr(xRg(K).Value)= "Done" Then
xRg(K).EntireRow.Copy Destination:= Worksheets( "Sheet2")。Range( "A"&J + 1)
J = J + 1
終了する場合
次へ
Application.ScreenUpdating = True
End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、私はこれのバリエーションを探しています。 スクリプトを継続的に実行するか、特定のフィールドの値が変更されるたびに失敗する必要があります。 コード自体は機能しますが、独立して実行する必要があります。 自動化してほしい。 誰かが助けることができますか?

余談ですが、範囲内の特定のセルのみをコピーしたい場合、それはどのように達成されますか?
このコメントは、サイトのモデレーターによって最小化されました
親愛なるロブ、

そのフィールドのセルが変更されたときにスクリプトを自動的に実行する必要がある場合は、以下のVBAコードが役立ちます。 現在のシート(自動的に移動する行のあるシート)タブを右クリックし、コンテキストメニューから[コードの表示]を選択してください。 次に、以下のVBAスクリプトをコピーしてコードウィンドウに貼り付けます。

プライベートサブワークシート_Change(ByValターゲットを範囲として)

xCellAsRangeを暗くする

薄暗い私は長く
エラーで次の再開

Application.ScreenUpdating = False

xCell = Target(1)を設定します
xCell.Value ="Done"Thenの場合
I = Worksheets( "Sheet2")。UsedRange.Rows.Count
I=1の場合

Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)= 0の場合、I = 0

終了する場合

xCell.EntireRow.Copy Worksheets( "Sheet2")。Range( "A"&I + 1)

xCell.EntireRow.Delete
終了する場合

Application.ScreenUpdating = True

End Subの


XNUMX番目の質問では、行全体ではなく、いくつかのセルをコピーするだけですか? または、質問のスクリーンショットを提供していただけますか? ありがとうございました!

よろしく、クリスタル
このコメントは、サイトのモデレーターによって最小化されました
結晶、


あなたの助けがもっと必要です:)



ここに別のcrtieriaを追加するにはどうすればよいですか。たとえば、Doneの横にCompletedを転送したいと思います。


プライベートサブワークシート_Change(ByValターゲットを範囲として)

xCellAsRangeを暗くする

薄暗い私は長く
エラーで次の再開

Application.ScreenUpdating = False

xCell = Target(1)を設定します
xCell.Value ="Done"Thenの場合
I = Worksheets( "Sheet2")。UsedRange.Rows.Count
I=1の場合

Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)= 0の場合、I = 0

終了する場合

xCell.EntireRow.Copy Worksheets( "Sheet2")。Range( "A"&I + 1)

xCell.EntireRow.Delete
終了する場合

Application.ScreenUpdating = True

End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちはクリスタル
これは私がウェブ上で見つけた最も有用な情報であり、このマクロは私が望むことを実行します。 しかし、私は行をあるテーブルから別のテーブルに移動しています-このマクロを使用すると、情報はテーブル内の次の空き行ではなく、テーブルの外側の最初の空き行に移動しますか? 手伝ってくれますか?
このコメントは、サイトのモデレーターによって最小化されました
このコードを実行していて、列Iに表示されている今日の日付に基づいて行を移動しようとしています-Range( "B1:B"&I)をRange(I1:I "&I)に変更しました。"を変更しました例の「完了」を日付に変更します。ただし、今日の日付が、必要に応じてI列だけでなく、行のどこかに表示されると、行は別のワークシートに移動します。これが発生する理由と、行を移動させる方法についてのアイデア今日の日付が他の列に表示されているかどうかに関係なく、今日の日付が列Iにある場合のみですか?
このコメントは、サイトのモデレーターによって最小化されました
親愛なるデビッド、

現在までの範囲と変量値を変更した後、コードは私にとってうまく機能します。 コードの日付形式は、ワークシートで使用した日付形式と一致する必要があります。 または、ワークシートを添付すると便利ですか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちはクリスタル、


コードとスプレッドシートの日付形式が一致する必要があると言ったときの意味がわかりません。私はVBの専門家ではなく、初心者レベルです。 私のスプレッドシートでは、列Fに今日の日付を行の入力日としてctrl +:の形式で入力します。 有効期限を「I」列にmm/dd/yyyy形式で入力します。 ただし、これにより、新しい行エントリを作成し、列Fに今日の日付を入力すると、行が新しいワークシートに移動されるため、問題が発生します。さらに、ブックを開いたときに実行する追加のコードが表示されません。私がそうすることを強制せずに実行する。 非常に些細な問題である可能性がありますが、申し訳ありませんが、これらの問題については聞き取れません。 どんな助けでもいただければ幸いです。
このコメントは、サイトのモデレーターによって最小化されました
親愛なるデビッド、

私はあなたが上で述べたのとまったく同じように試みましたが、私の場合、問題は現れません。 Excelバージョンを提供できますか? この問題を解決するのに役立つ情報がもっと必要です。 ご迷惑をおかけして申し訳ありません。

よろしく、クリスタル
このコメントは、サイトのモデレーターによって最小化されました
クリスタル、これらは関係するワークシートです。 コピーしたコードで、列Lで「今日の日付まで」を検索していることがわかります。その列に「最大」で今日の日付が含まれている場合は、その日付を含む行を新しいワークシートに移動します。 現在、行のどこかに今日の日付を入力すると(たとえば、今日勧誘が発行された場合は列F)、行全体がアーカイブされたスプレッドシートに自動的に移動します。 私は通常、ctrl +:の組み合わせを使用して、通常は列Fに今日の日付を入力します。
さらに、ワークブックを開いたときにこの移動を実行したいと思います。 現在、コードを表示してからF5キーを押す必要があります。 それを行う方法についてのアドバイスは歓迎されます。
このコメントは、サイトのモデレーターによって最小化されました
残念ながら、マクロが有効なワークブックは、フォーマットがサポートされていないと表示されているため、アップロードされません。 これらはExcel2016にあります
このコメントは、サイトのモデレーターによって最小化されました
親愛なるデビッド、

次のVBAコードは、それを実現するのに役立ちます。

プライベートサブWorkbook_Open()
範囲としての薄暗いxRg
xCellAsRangeを暗くする
薄暗い私は長く
ディム J アズ ロング
I = Worksheets( "CURRENT OASIS OPPORTUNITIES")。UsedRange.Rows.Count
J = Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange.Rows.Count
J=1の場合
If Application.WorksheetFunction.CountA(Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange)= 0 Then J = 0
終了する場合
xRg = Worksheets( "CURRENT OASIS OPPORTUNITIES")。Range( "L1:L"&I)を設定します
エラーで次の再開
Application.ScreenUpdating = False
xRgの各xCellについて
CStr(xCell.Value)=DateThenの場合
xCell.EntireRow.Copy Destination:= Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。Range( "A"&J + 1)
xCell.EntireRow.Delete
J = J + 1
終了する場合
次へ
End Subの

注意:
1.VBAスクリプトをThisWorkbookコードウィンドウに配置する必要があります。
2.ワークブックをExcelマクロ対応ワークブックとして保存する必要があります。

上記の操作の後、ワークブックを開くたびに、列Lのセルが今日の日付に達すると、行全体がARCHIVEDワークシートに移動します。

よろしく、クリスタル
このコメントは、サイトのモデレーターによって最小化されました
ありがとうクリスタル、
これは、今日の日付が列Lで達成された場合にうまく機能します。また、今日の日付までを列Lに含める方法はありますか。そのため、ワークブックを何日もチェックしないと、それより前の日付が自動的に含まれます。今日は? ご助力ありがとうございます。
このコメントは、サイトのモデレーターによって最小化されました
親愛なるデビッド、

申し訳ありませんが、質問があります。 その場合、以前の日付が列Lに表示されている限り、すべての行が移動されますか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちはクリスタル、

ワークシートを数日間開かず、列Lに入力された日付が過ぎた場合、つまり、列Lのセルの日付が11年2017月13日であるが、XNUMX月XNUMX日までワークシートを開かない場合列Lのすべてのエントリが今日の日付までのすべての日付でチェックされるように、対応する行を新しいシートに移動します。 現在、丁寧に提供されたコードを使用して、列Lに現在の日付がある行のみが新しいシートに移動され、列Lに以前の日付がある行が残り、現在手動​​で新しいシートに移動されます。 ご協力いただきありがとうございます。
このコメントは、サイトのモデレーターによって最小化されました
親愛なるデビッド、



私はあなたのポイントを取得します。 以下のVBAスクリプトを試してください。 ブックを開くと、列Lの今日の日付までの日付を持つすべての行が新しい指定されたシートに移動されます。



プライベートサブWorkbook_Open()
範囲としての薄暗いxRg
範囲としての薄暗いxRgRtn
xCellAsRangeを暗くする
xLastRowを暗くする
薄暗い私は長く
ディム J アズ ロング
エラーで次の再開
xLastRow = Worksheets( "CURRENT OASIS OPPORTUNITIES")。UsedRange.Rows.Count
xLastRow <1の場合、Subを終了します
J = Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange.Rows.Count
J=1の場合
If Application.WorksheetFunction.CountA(Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange)= 0 Then J = 0
終了する場合
xRg = Worksheets( "CURRENT OASIS OPPORTUNITIES")。Range( "L1:L"&xLastRow)を設定します
I=2の場合xLastRowへ
xRg(I).Value> Date ThenExitSubの場合
If xRg(I).Value <= Date Then
xRg(I).EntireRow.Copy Destination:= Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。Range( "A"&J + 1)
xRg(I).EntireRow.Delete
J = J + 1
I = I-1
終了する場合
次へ
End Subの

VBAスクリプトをThisWorkbookコードウィンドウに配置し、ブックをExcelマクロ対応ブックとして保存する必要があります。
このコメントは、サイトのモデレーターによって最小化されました
ありがとうCrystal、それはうまくいきます。
このコメントは、サイトのモデレーターによって最小化されました
クリスタル、私はコードが機能したと答えるのに少し急いでいました。 今日ワークブックを開きましたが、列Lのセルに以前の日付エントリを含む行はまだ「現在のオアシス機会ワークシート」にあり、期待どおりに「アーカイブされたオアシスワークシート」に移動していません。 なぜこれが当てはまるのか、何か考えはありますか?
このコメントは、サイトのモデレーターによって最小化されました
強調表示されたセルは、上記の質問に関して列Lにあり、行を新しいワークシートに移動するための基準(今日の日付まで)です。 この画像がお役に立てば幸いです。
このコメントは、サイトのモデレーターによって最小化されました
これは、上記に関連するVBAウィンドウのコピーでもあります。
このコメントは、サイトのモデレーターによって最小化されました
クリスタル、私はコードが機能したと答えるのに少し急いでいました。 今日ワークブックを開きましたが、列Lのセルに以前の日付エントリを含む行はまだ「現在のオアシス機会ワークシート」にあり、期待どおりに「アーカイブされたオアシスワークシート」に移動していません。 なぜこれが当てはまるのか、何か考えはありますか?
このコメントは、サイトのモデレーターによって最小化されました
結晶、

ブックをアップロードできないため、ここで行と列を再現します

ABCDEFGHIJKL
#タイプ取り置き勧誘修正#発行日質問顧客納品場所プロジェクト提案期限

1 SS SB 1234567/1/09陸軍名なし場所ドライブタンク6/17/09

以下のコードを使用して、列Lが今日の日付に達したときに、行全体を新しいワークシートに移動するようにします。 また、ワークシートを何日も完成させていない場合は、L列の「今日まで」の検索を使用して同じことを行いたいと思います。 また、可能であれば、ブックを開いたときにこれを自動的に実行したいと思います。 現在、データを入力するときに列Fなど、行の任意のセルに今日の日付を入力すると、行全体がアーカイブワークシートに移動します。 (Excel 2016を使用)

[モジュール1コード]

サブDaveV()

範囲としての薄暗いxRg

xCellAsRangeを暗くする

薄暗い私は長く

ディム J アズ ロング

I = Worksheets( "CURRENT OASIS OPPORTUNITIES")。UsedRange.Rows.Count

J = Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange.Rows.Count

J=1の場合
If Application.WorksheetFunction.CountA(Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange)= 0 Then J = 0

終了する場合

xRg = Worksheets( "CURRENT OASIS OPPORTUNITIES")。Range( "L1:L"&I)を設定します

エラーで次の再開

Application.ScreenUpdating = False

xRgの各xCellについて

CStr(xCell.Value)=DateThenの場合

xCell.EntireRow.Copy Destination:= Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。Range( "A"&J + 1)
xCell.EntireRow.Delete

J = J + 1
終了する場合

次へ
Application.ScreenUpdating = True

End Subの
このコメントは、サイトのモデレーターによって最小化されました
【シート1コード】

プライベートサブワークシート_Change(ByValターゲットを範囲として)
xCellAsRangeを暗くする
薄暗い私は長く
エラーで次の再開
Application.ScreenUpdating = False
xCell = Target(1)を設定します
xCell.Value =DateThenの場合
I = Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange.Rows.Count
I=1の場合
If Application.WorksheetFunction.CountA(Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。UsedRange)= 0 Then I = 0 End If
xCell.EntireRow.Copy Worksheets( "ARCHIVED OASIS OPPORTUNITIES")。Range( "A"&I + 1)
xCell.EntireRow.Delete
終了する場合
Application.ScreenUpdating = True
End Subの

上記がお役に立てば幸いですが、私はVBAの担当者ではないため、コードに必要な処理を実行させる方法がわかりません。 あなたの助けをいただければ幸いです。
このコメントは、サイトのモデレーターによって最小化されました
スクリプトに大きなエラーがあります!

行7の列Cに「Done」という単語が含まれていることを検出したとすると、それをコピーして行を削除します。
行を削除すると、リストの次の行は9行ではなく8行になります。これは、7行目を削除すると、8行目のコンテンツが7行目になり、すべての行が1行上に移動したためです。 したがって、チェックする次の行は行#8であるはずでしたが、以前は行#9にあったデータが含まれているため、行を削除するたびに、実際には行をスキップしてチェックします!!!
このコメントは、サイトのモデレーターによって最小化されました
親愛なるショーアロン、

コメントありがとうございます。 コードが更新され、エラーが修正されました。 アシスタントありがとうございます。

よろしく、クリスタル
このコメントは、サイトのモデレーターによって最小化されました
コードが更新されたと言っても、同じ行を何度もコピーし続けます。 これは私が持っているものです:

サブチージー()
'Kutools for Excel 2017/8/28により更新
範囲としての薄暗いxRg
xCellAsRangeを暗くする
薄暗い私は長く
ディム J アズ ロング
ディム K アズ ロング
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("購入アーカイブ").UsedRange.Rows.Count
J=1の場合
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
終了する場合
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
エラーで次の再開
Application.ScreenUpdating = False
K=1の場合xRg.Countへ
CStr(xRg(K).Value) = "はい" の場合
xRg(K).EntireRow.Copy Destination:=Worksheets("購入アーカイブ").Range("A" & J + 1)
xRg(K).EntireRow.Delete
CStr(xRg(K).Value) = "はい" の場合
K = K-1
終了する場合
J = J + 1
終了する場合
次へ
Application.ScreenUpdating = True
End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちはフレッド、
コードを実行するたびに、コードは指定された範囲を検索するため、どの行が既にコピーされているかがわからないため、同じ行が何度もコピーされます。 同じ行を繰り返しコピーしないようにするために、指定したセルに一致する値が入力されたときにコードを自動的に実行することができます。
「PURCHASE FORCAST」という名前のワークシートで、シート タブを右クリックし、 コードを表示 コンテキストメニューから。 次に、シート (コード) ウィンドウで次の VBA コードをコピーします。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Kutools for Excel 20220830
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Yes" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Yes" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
このコメントは、サイトのモデレーターによって最小化されました
誰かが私がこの仕事をするのを手伝ってもらえますか? ファイルと一致させる必要のある部分を変更しようとしましたが、これが表示され、どうすればよいかわかりません。
このコメントは、サイトのモデレーターによって最小化されました
Excelファイルをアップロードしようとすると、ファイルがサポートされていないと表示されます。 申し訳ありません...今日これに苦労しています。
このコメントは、サイトのモデレーターによって最小化されました
同様のタスクについてサポートが必要ですが、少し異なります。 5列の数値があり、25000列あたり約1で、各列の見出しは5〜1です。列2の値がゼロより大きい場合、または列3がゼロより大きい場合は、行全体を別のシートにコピーしたいと思います。 、OR列4がゼロ未満、OR列5がXNUMXより大きい、OR列XNUMXがXNUMXより大きいなど、これは可能ですか?
このコメントは、サイトのモデレーターによって最小化されました
画像のアップロードが機能していません...ごめんなさい。
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、
こちらのアップロードボタンをご利用ください。
このコメントは、サイトのモデレーターによって最小化されました
したがって、目的は、ガスのいずれかが式で設定する制限を超えているかどうかを確認することです。卵全体が新しいシートにコピーされます。

助けてくれてありがとう。
このコメントは、サイトのモデレーターによって最小化されました
添付画像
このコメントは、サイトのモデレーターによって最小化されました
親愛なるマイケル、
たぶん、Excelアドインを使用してこの問題を解決することができます。 ここでは、KutoolsforExcelのSelectSpecificCellsユーティリティをお勧めします。 このユーティリティを使用すると、指定した列の値が数値より大きいか小さい場合に、certian範囲内のすべての行を簡単に選択できます。 必要なすべての行を選択したら、それらを手動でコピーして新しいワークシートに貼り付けることができます。 下の添付画像をご覧ください。

以下のハイパーリンクをたどると、この機能について詳しく知ることができます。
https://www.extendoffice.com/product/kutools-for-excel/excel-select-specific-cells-rows.html
このコメントは、サイトのモデレーターによって最小化されました
この数式に感謝しますが、行を別のシートに移動したいときに、自動的に実行されないという問題がありました。 別の式を教えてもらえますか? そのため、セルの値を変更すると、自動的に移動しました。


感謝
このコメントは、サイトのモデレーターによって最小化されました
親愛なるジャナン、
実行ボタンを手動でトリガーするまで、コードは自動的に実行されません。
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、

このマクロを設定したいのですが、2つの引数があります。 列Oのセルの値に基づいて、ファイルでマクロを機能させることができました。ただし、行を移動する前に、マクロで列Sが入力されている(または<> "")かどうかも確認したいと思います。 。 最後に、コピーした行をXNUMX番目のシートの行と同じフォーマットにします。 それはマクロを完全に変えますか?
このコメントは、サイトのモデレーターによって最小化されました
親愛なるヒューグ、
私はあなたを正しい方法で理解しているかどうかわかりません。 つまり、列Sのセルが入力され、列Oのセルに同時に特定の値が含まれている場合、フォーマットを使用して行を移動しますか? そうでなければ、動かないのですか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちはクリスタル、

はい、それはまさに私が言っていることです。 実際、私のデータはプロジェクトに関するものです。 列Oはプロジェクトのステータス、Sはプロジェクトの終了日です。
情報を持っていて、それを挿入する必要があるユーザーが、ステータスが「クローズ」で「終了日」を挿入した場合にのみ、プロジェクトを「アーカイブ」できるようにしたいと思います。


これが物事を明確にするのに役立つことを願っています
このコメントは、サイトのモデレーターによって最小化されました
親愛なるヒューグ、
返信が遅くなってすみません。 次のVBAコードは、問題の解決に役立ちます。 この記事の手順に従って、VBAスクリプトを適用してください。

Sub MoveRowBasedOnCellValue()
Dim xRgStatus As Range
範囲としての薄暗いxRgDate
薄暗い私は長く
ディム J アズ ロング
ディム K アズ ロング
I = Worksheets( "Sheet1")。UsedRange.Rows.Count
J = Worksheets( "Sheet2")。UsedRange.Rows.Count
J=1の場合
Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)=0の場合J= 0
終了する場合
xRgStatus = Worksheets( "Sheet1")。Range( "O1:O"&I)を設定します
xRgDate = Worksheets( "Sheet1")。Range( "S1:S"&I)を設定します
エラーで次の再開
Application.ScreenUpdating = False
Application.CutCopyMode = False
xRgStatus(1).EntireRow.Copy
Worksheets( "Sheet2")。Range( "A"&J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
K=2の場合xRgStatus.Countへ
If CStr(xRgStatus(K).Value)= "Closed" Then
If(xRgDate(K).Value <> "")And(TypeName(xRgDate(K).Value)= "Date")Then
xRgStatus(K).EntireRow.Copy
Worksheets( "Sheet2")。Range( "A"&J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
終了する場合
終了する場合
次へ
Application.CutCopyMode = True
Application.ScreenUpdating = True
End Subの
このコメントは、サイトのモデレーターによって最小化されました
親愛なるクリスタル、

ご協力ありがとうございました!

よろしく、

ヒューグース
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、


行を移動する代わりにコピーするにはどうすればよいですか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、


これが数回投稿されていることは知っていますが、答えが見つかりません。 資料を新しいシートにコピーし、元のシートから削除しないようにするにはどうすればよいですか?
このコメントは、サイトのモデレーターによって最小化されました
親愛なるマイク、
行を削除するのではなくコピーしたい場合は、以下のVBAコードが役立ちます。 コメントありがとうございます!

サブチージー()
範囲としての薄暗いxRg
xCellAsRangeを暗くする
薄暗い私は長く
ディム J アズ ロング
ディム K アズ ロング
I = Worksheets( "Sheet1")。UsedRange.Rows.Count
J = Worksheets( "Sheet2")。UsedRange.Rows.Count
J=1の場合
Application.WorksheetFunction.CountA(Worksheets( "Sheet2")。UsedRange)=0の場合J= 0
終了する場合
xRg = Worksheets( "Sheet1")。Range( "C1:C"&I)を設定します
エラーで次の再開
Application.ScreenUpdating = False
K=1の場合xRg.Countへ
If CStr(xRg(K).Value)= "Done" Then
xRg(K).EntireRow.Copy Destination:= Worksheets( "Sheet2")。Range( "A"&J + 1)
J = J + 1
終了する場合
次へ
Application.ScreenUpdating = True
End Subの
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、

マクロを使用するのは初めてですが、特定の値の後に以下のデータを貼り付けて、列の終わりまで繰り返すことはできますか?
いいね:

「カラー」の後に「ブルー」を転送

A1=青
A5=色
A6 =(ここに「青」を転送)
など...
このコメントは、サイトのモデレーターによって最小化されました
ジョン親愛なる、
セルの列に「色」が含まれている場合、最初のセルのテキストを「色」の下のセルにコピーし、列の最後までこのテキストを繰り返しコピーしますか?
ここにはまだコメントが投稿されていません
読み込み中

フォローする

著作権©の2009 - WWW。extendoffice.com。 | | 全著作権所有。 搭載 ExtendOffice。 | サイトマップ
MicrosoftおよびOfficeのロゴは、米国MicrosoftCorporationの米国およびその他の国における商標または登録商標です。
SectigoSSLで保護