• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel2003 検索後コピー貼付マクロ)

Excel2003 検索後コピー貼付マクロ

このQ&Aのポイント
  • Excel2003を使用して、データ一覧から特定の項目のデータを別のシートにコピー&ペーストするマクロの作成方法を教えてください。
  • 以下の手順で行ってください。
  • 1. データ一覧が記載されているシートを選択します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.4

Sub bPaste() Const targetStr As String = "圧縮" Dim rIdx1, rIdxA, targetN As Long Sheets("SheetA").Select Columns("A:A").Insert Shift:=xlToRight For rIdx1 = 1 To Range("B65536").End(xlUp).Row Cells(rIdx1, 1).Value = rIdx1 Next Cells(1, 2).Select Selection.SortSpecial SortMethod:=xlSyllabary, Key1:=Range("B1"), Order1:=xlAscending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom For rIdx1 = 1 To Range("A65536").End(xlUp).Row If Cells(rIdx1, 2).Value = targetStr Then rIdxA = rIdx1 Exit For End If Next For rIdx1 = rIdxA To Range("A65536").End(xlUp).Row If Cells(rIdx1, 2).Value = targetStr Then targetN = targetN + 1 Else Exit For End If Next Range(Cells(rIdxA, 2), Cells(rIdxA + targetN - 1, 4)).Copy Sheets("SheetB").Activate Range(Cells(1, 1), Cells(targetN, 3)).PasteSpecial xlPasteAll Cells(1, 1).Select Sheets("SheetA").Select Cells(1, 1).Select Selection.SortSpecial SortMethod:=xlSyllabary, Key1:=Range("A1"), Order1:=xlAscending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Columns("A:A").Delete Shift:=xlToLeft End Sub 何をやっているのかは、ご自身で解析してみてください。

e05513
質問者

お礼

解析できました。 本当にありがとうございました。 勉強になりました。 ***下記のようにしました。*** Sub bPaste() MyCode = Application.InputBox("作業内容入力", Type:=2) Dim targetStr As String targetStr = MyCode 'targetStr = InputBox("入力してね") Dim rIdx1, rIdxA, targetN As Long Sheets("SheetA").Select Columns("A:A").Insert Shift:=xlToRight For rIdx1 = 1 To Range("B65536").End(xlUp).Row Cells(rIdx1, 1).Value = rIdx1 Next Cells(1, 2).Select Selection.SortSpecial SortMethod:=xlSyllabary, Key1:=Range("B1"), Order1:=xlAscending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom For rIdx1 = 1 To Range("A65536").End(xlUp).Row If Cells(rIdx1, 2).Value = targetStr Then rIdxA = rIdx1 Exit For End If Next For rIdx1 = rIdxA To Range("A65536").End(xlUp).Row If Cells(rIdx1, 2).Value = targetStr Then targetN = targetN + 1 Else Exit For End If Next Range(Cells(rIdxA, 2), Cells(rIdxA + targetN - 1, 4)).Copy Sheets("SheetB").Activate Range(Cells(1, 1), Cells(targetN, 3)).PasteSpecial xlPasteAll Cells(1, 1).Select Sheets("SheetA").Select Cells(1, 1).Select 'Selection.SortSpecial SortMethod:=xlSyllabary, Key1:=Range("A1"), Order1:=xlAscending, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom Columns("A:A").Delete Shift:=xlToLeft End Sub

e05513
質問者

補足

処理時間が早い為、これはいいと思うのですが ・・・・解析わかりませんでした。 "圧縮"だけでは無くて他のデータも検索、コピーペーストしたいので、 以前に使用した MyCode = Application.InputBox("作業内容入力", Type:=2) を使おうと思いましたが駄目でした。。。 勉強不足ですね。もう少し考えてみます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

この質問は、質問と言うより、丸投げでコード作成「依頼」ではないか。 先日も入試問題の回答作成を質問コーナーにした問題がキッカケで、考える人が少なくなっていることに批判が多い。 フィルタでA列の{圧縮」行を抜き出し、可視セルを選択して(編集ージャンプーセル選択ー可視セルーコピー)、別シートへ-貼り付ける操作をして、マクロの記録を採って勉強すること。 それをしてから判らない点があれば質問するのが筋。

e05513
質問者

補足

大変に失礼を致しました。 マクロにフィルターは、一番最初に試してみました。 マクロをそのままをコピーペーストしてしまいます。 動いているのですが、データが大きいので保存や集計に時間がかかります。 他にもマクロを使用しているし、関数も使用しているので、ここが問題なのかは調査中ですが、方法が無いかと思い相談をしてみました。 言葉足らずで大変に失礼を致しました。 ********************************************* Sub MyFilter() 'フィルター検索と貼付 Sheets("表示データベース").Select Dim MyCode As String Dim Rng As Range Set Rng = Range("A1").CurrentRegion 'アクティブセル領域取得 Rng.AutoFilter 'フィルタ設定 MyCode = Application.InputBox("作業内容入力", Type:=2) Rng.AutoFilter Field:=1, Criteria1:=MyCode '変数MyCodeに格納されたデータ抽出 '可視セルをコピー Rng.SpecialCells(xlCellTypeVisible).Copy _ 'Destination:=Sheets("試行").Range("A10") Worksheets("KYF分析シート").Select ActiveSheet.Paste Rng.AutoFilter 'フィルタ解除 '「試行」シートで With Worksheets("KYF分析シート") End With End Sub ***************************************

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.2

できたのであれば、質問を締め切られた方がよろしいと思います。

e05513
質問者

補足

ありがとうございます。 できたのですが 1014行のデータから抽出をするのに使いたい為 教えて頂いたマクロでは検索に時間がかかり過ぎていました。 他にも方法があるのではと思い閉め切りませんでした。 申し訳ありませんが、もう少し待ってから閉め切ります。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

Sub aPaste() Const targetStr As String = "圧縮" Dim rIdx1, rIdx2 As Long For rIdx1 = 1 To Range("A65536").End(xlUp).Row Sheets("SheetA").Select If Sheets("SheetA").Cells(rIdx1, 1).Value = targetStr Then rIdx2 = rIdx2 + 1 Sheets("SheetA").Activate Range(Cells(rIdx1, 1), Cells(rIdx1, 3)).Copy Sheets("SheetB").Activate Range(Cells(rIdx2, 1), Cells(rIdx2, 3)).PasteSpecial xlPasteAll End If Next End Sub

e05513
質問者

お礼

大変に失礼を致しました。 できました。ありがとうございました。

e05513
質問者

補足

ありがとうございました。 素人で申し訳ありませんが、"圧縮"は4行のデータがあります。 1行だけコピーされました。4行コピーをしたいです。 また、行数は項目によってバラバラです。 以上、よろしくお願い致します。

関連するQ&A