複数列でフィルターし、結果をコピーする
店舗が「世田谷」で賞味期限が「2024/07/07」以降でフィルターし、結果をコピーする事例です。
ChatGPTのプロンプト
下記の処理の概要に沿ったVBAコードを作成できますか? マクロ名:「 デモ 」 概要:
指定したセル範囲を、「 2つ 」の条件でフィルターし、その結果をコピーする。 手順: ・「 Sheet1 」シートのセル範囲「 A1 」セルから「 D1 」セルの最終行のセルまでを選択する。 ・選択した範囲にオートフィルタを適用する。 ・選択した範囲の「 1列目 」を「 世田谷 」、および「 4列目 」を「 2024/07/07 」より大きい日でフィルターする。 ・フィルタリングされたデータをすべて(値だけでなく、書式も含む)コピーし、「 Sheet1 」シートの「 G1 」セルに貼り付ける。 ・コピー状態を解除する。 ・フィルタを解除する。 全体的な指針: ・変数の宣言は使用する直前に行う。これは、変数の宣言を漏らさないためである。 ・日本語でコメントをいれる。 ・コードの最初に画面の更新と警告の表示を停止し、コードの最後でそれらを再開する。
(ポイント1)上の「プロンプトをコピーする」ボタンで、コピーできます。
(ポイント2)ChatGPTに貼り付けて、緑色の単語を、あなたの処理に合わせて修正します。内容の削除や追加もできます。
(注:プロンプトの全てを読む必要はありません。緑色の行のみ集中して読み、修正してください)
(ポイント3)会話のスタイルは、「より厳密に」を選択します。
(ポイント4)プロンプトの改行は、ShiftキーとEnterキーを同時に押します。
ChatGPTの回答
もちろんです。以下に指定の条件に基づいたVBAコードを示します:
Sub デモ() ' 画面の更新と警告の表示を停止 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 変数の宣言 Dim ws As Worksheet Dim rng As Range Dim lastRow As Long ' 「Sheet1」シートを選択 Set ws = ThisWorkbook.Sheets("Sheet1") ' 「A1」セルから「D1」セルの最終行のセルまでを選択 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row Set rng = ws.Range("A1:D" & lastRow) ' 選択した範囲にオートフィルタを適用 rng.AutoFilter ' 「1列目」を「世田谷」、および「4列目」を「2024/07/07」より大きい日でフィルター rng.AutoFilter Field:=1, Criteria1:="世田谷" rng.AutoFilter Field:=4, Criteria1:=">2024/07/07", Operator:=xlAnd ' フィルタリングされたデータをすべて(値だけでなく、書式も含む)コピー rng.SpecialCells(xlCellTypeVisible).Copy ' 「Sheet1」シートのセル「G1」に貼り付け ws.Range("G1").PasteSpecial Paste:=xlPasteAll ' コピー状態を解除 Application.CutCopyMode = False ' フィルタを解除 rng.AutoFilter ' 画面の更新と警告の表示を再開 Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
プロンプトを作成し、VBAコードを実行してみて! ChatGPT凄い!!😊
VBAマクロを無料のChatGPT(Microsoft Copilot)で作成します。
Copilot(https://copilot.microsoft.com)はログイン不要。すぐVBAマクロが完成します。