マクロでキーワード切取貼付

このQ&Aのポイント
  • エクセルのマクロを使用して、特定のキーワードが含まれる行を別のシートに貼り付ける方法について質問しています。
  • 質問文章では、セルA列にキーワードCCCが含まれている行を削除してSheet2に貼り付けるマクロを書こうとしていますが、エラーが発生しているそうです。
  • 質問者は、マクロのどの部分に問題があるのか教えて欲しいと思っています。
回答を見る
  • ベストアンサー

マクロでキーワードを抽出して別のシートに貼り付けする

セルA列にキーワードCCCが含まれていた場合に その行を削除してSheet2に貼り付けをしたく、下記のソースを 書いてみましたがエラーがでてしまいます。 どこが間違っているか添削していただけないでしょうか? Sub キーワード切取貼付() Dim r As Range For Each r In Range("A1", Range("A65536").End(xlUp)) Do Set r = Range("A:A").Find(What:=CCC, LookAt:=xlPart) If r Is Nothing Then Exit Do r.Worksheets("Sheet1").Range("A:A").Cut r.Worksheets("Sheet2").Range("A1").PasteSpecial Loop Next End Sub

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

merlionXXです。 > After:=Range("A65536").End(xlUp)) > の意味は次のシートも続けて検索しますよ、ということですよね? (´^∇^)σ ち、違いますよ~ 最終行を指定しておいて変だと思われるでしょうが一番先頭のA1セルから順に検索しなさいということです。 Findは、After:=で指定した基準セル(何も指定しない場合はA1)の次のセルから検索を始めます。もしA1にヒットする対象(*CCC*)があると、これが一番最後に検索され、移動先のSheet2では最下行になってしまいます。 それじゃgoo0607さんが困るかなあと思って最終セルを基準セルに指定してみました。これで先頭のA1から順に検索されるはずです。 あと、やってみればわかると思いますが、現在のコードでは切り取られた行が空白のまま残ってしまいますが、このままでいいんですか? もし空白行を上に詰めたいのであれば以下のようにしてみてください。 ちょいとサービスし過ぎかなあ (*´О`*)? Sub キーワード切取貼付02() Dim r As Range, ur As Range, rr As Long Dim rd(), v Set r = Range("A1", Range("A65536").End(xlUp)).Find(What:="CCC", LookAt:=xlPart, After:=Range("A65536").End(xlUp)) If r Is Nothing Then 'なかったら MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん  " Exit Sub '終了 Else 'あったら Do Until r Is Nothing '対象がなくなるまで ReDim Preserve rd(rr) '動的配列を用意 rd(rr) = r.Address(0, 0) '対象セルアドレスを配列に格納 rr = rr + 1 'カウント r.EntireRow.Cut Destination:=Sheets("Sheet2").Cells(rr, 1) '行の切り取り貼り付け Set r = Range("A1", Range("A65536").End(xlUp)).FindNext(r) '連続検索 Loop '繰り返し For Each v In rd() '各配列要素を If ur Is Nothing Then Set ur = Range(v) Else Set ur = Union(Range(v), ur) 'ユニオンに End If Next v ur.EntireRow.Delete 'ユニオンセルの属す行を一括削除 Set ur = Nothing Set r = Nothing End If MsgBox rr & "件をSheet2に移動しました。", vbInformation, " ( ̄ー ̄)v" End Sub

goo0607
質問者

お礼

先生すごいです。できそこないの生徒ですいません。 ちょっと後半ついていけてないですが、本買いましたので調べてがんばります。 先生!次回はふりがなをマクロでつけることに挑戦したいと思います。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

て、添削のしようが・・・・φ( ̄_ ̄;)  Sub キーワード切取貼付() Dim r As Range, rr As Long Set r = Range("A1", Range("A65536").End(xlUp)).Find(What:="CCC", LookAt:=xlPart, After:=Range("A65536").End(xlUp)) If r Is Nothing Then 'なかったら MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん  " Else 'あったら Do Until r Is Nothing rr = rr + 1 'カウント r.EntireRow.Cut Destination:=Sheets("Sheet2").Cells(rr, 1) '行の切り取り貼り付け Set r = Range("A1", Range("A65536").End(xlUp)).FindNext(r) '連続検索 Loop '繰り返し Set r = Nothing End If MsgBox rr & "件をSheet2に移動しました。", vbInformation, " ( ̄ー ̄)v" End Sub

goo0607
質問者

お礼

私のは全くだめなソースでした。 非常にわかりやすく、素晴らしい添削先生でした。ありがとうございました。 After:=Range("A65536").End(xlUp)) の意味は次のシートも続けて検索しますよ、ということですよね?

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

マクロのどの行で、どんなエラーが出るのかを書きましょう。 とりあえず、Range("A1", Range("A65536") が文法的に間違っているのは確かですけど。

関連するQ&A

  • マクロでキーワードを抽出して別のシートに挿入する

    質問番号:4733370の質問と回答を勝手に引用させて頂きます。 セルA列にキーワードCCCが含まれていた場合に その行を削除してSheet2に貼り付けする・・・という下のマクロを 貼り付けの部分を挿入に変更したいのですが、なにぶんマクロ初心者 の為よくわからないので教えていただけないでしょうか・・ 宜しくお願い致します。 Sub キーワード切取貼付02() Dim r As Range, ur As Range, rr As Long Dim rd(), v Set r = Range("A1", Range("A65536").End(xlUp)).Find(What:="CCC", LookAt:=xlPart, After:=Range("A65536").End(xlUp)) If r Is Nothing Then 'なかったら MsgBox "ありません", vbCritical, "? ( ̄~ ̄;)う~ん  " Exit Sub '終了 Else 'あったら Do Until r Is Nothing '対象がなくなるまで ReDim Preserve rd(rr) '動的配列を用意 rd(rr) = r.Address(0, 0) '対象セルアドレスを配列に格納 rr = rr + 1 'カウント r.EntireRow.Cut Destination:=Sheets("Sheet2").Cells(rr, 1) '行の切り取り貼り付け Set r = Range("A1", Range("A65536").End(xlUp)).FindNext(r) '連続検索 Loop '繰り返し For Each v In rd() '各配列要素を If ur Is Nothing Then Set ur = Range(v) Else Set ur = Union(Range(v), ur) 'ユニオンに End If Next v ur.EntireRow.Delete 'ユニオンセルの属す行を一括削除 Set ur = Nothing Set r = Nothing End If MsgBox rr & "件をSheet2に移動しました。", vbInformation, " ( ̄ー ̄)v" End Sub

  • エクセルで特定の行をマクロで削除したい。

    Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="ここにキーワード", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub 上記のソースだと一つのキーワードだけなのですが、複数のキーワードを追加したいのとブック全体(複数のシートから検索)で実行させたいのですが教えていただけませんか?

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    以下は同一ブック内の「置換」のワークシートに A列に検索文字 B列に置換文字 を書き、置換するマクロなのですが、これですと同一ブック内でしか作業できません。 このリストを別ファイル(例えば"Book2.xls"の"sheet1")に書き、別のファイル(例えば"Book1.xls")で実行するにはどうしたらよいでしょうか。 Sub 置換() For i = 1 To Worksheets("置換").Range("A65536").End(xlUp).Row Cells.Replace What:=Worksheets("置換").Range("A" & i).Value, _ Replacement:=Worksheets("置換").Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End Sub

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    置換専用につくったワークシートに A列に検索文字 B列に置換文字を入力したリスト(例えば"Book2.xls"の"sheet1")を作りました。 このリストを使って別のブック内(例えば"Book1.xls")の複数のシート内を一括して置換えがしたいです。 自分で調べてみて下記で置換えはできたのですが、その都度、各シートを選択しなければだめでした。 一括で同ブック内の複数シート内を置換えさせるには、どこを修正したらいいのでしょうか? 見よう見まねの初心者です。 どうぞよろしくお願いします。 Sub 置換()  With ThisWorkbook   If ActiveSheet Is .Worksheets(1) Then Exit Sub   For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row    ActiveSheet.Cells.Replace _      What:=.Worksheets(1).Range("A" & i).Value, _      Replacement:=.Worksheets(1).Range("B" & i).Value, _      LookAt:=xlPart, SearchOrder:=xlByColumns   Next  End With End Sub

  • このマクロを少し修正したい

    先日、こちらのサイトで下記のマクロを作っていただきました。 エクセルの置換えシートを使って、別のエクセルシートを一括置換えするマクロです。 ただ、置換えしたいシートのセルが結合していたり、文字の前に空欄が入っていると変換されません。 上記も認識しての置換えは、下記のマクロを修正して可能でしょうか? 修正したマクロを教えていただけると助かります。  With ThisWorkbook   If ActiveSheet Is .Worksheets(1) Then Exit Sub   For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row    ActiveSheet.Cells.Replace _      What:=.Worksheets(1).Range("A" & i).Value, _      Replacement:=.Worksheets(1).Range("B" & i).Value, _      LookAt:=xlPart, SearchOrder:=xlByColumns   Next  End With End Sub

  • マクロでのデータの抽出&貼り付けについて

    代理店ごとに伝票書類を作成するのに、マクロを組んでいます。 シート1のデータをオートフィルタで抽出して、シート2へ貼り付けますがうまくいかないので教えていただきたいです。 代理店は10社ほどあります。 代理店ごとの伝票(シート2以降)へはシート1の必要なデータのみ貼り付けたいです。 【シート1】 A B C D E 代理店名 合計 小計 消費税 注文No 代理店A ○○○ ・・・ ・・・ aaa 代理店B ××× ・・・ ・・・ bbb 代理店A  ●●● ・・・ ・・・ ccc 代理店C △△△ ・・・ ・・・ ddd 【シート2】「代理店A」 注文No 合計 aaa ○○○ ccc ●●● 下記のマクロが間違っているのは重々承知なのですが、一応記載します。 初心者なので必要な情報があれば、追記しますので教えていただければと思います。 ★エクセルは2003です ★貼り付けるときに1行目の「注文No」や「合計」の記載は必要なし ★オートフィルタで抽出後、必要な項目のデータのみ、シート2の各指定の列に貼り付けたい Sub 代理店A() With Worksheets("シート1").Range("A1") .AutoFilter Field:=1, Criteria1:="代理店A" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("代理店A").Range("A1") .AutoFilter End With Worksheets("代理店A").Activate End Sub

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • 複数のシートでマクロの実行

    ブック内の全てのシートで同一のマクロを実行させたいのですが。 Sub Test() Dim ws As Worksheet  For Each ws In Worksheets  処理内容   Next ws End Sub 上記の「処理内容」が以下だと成功します。 ws.Range("A1").Value = ws.Name が、以下だと(置換処理)、一番最初のシートしか実行されません。 Range("A1:G20").Select Cells.Replace What:="A", Replacement:="B", _ LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, _ SearchFormat:=False, ReplaceFormat:=False 「Range("A1:G20").Select」の「Range」を「ws.Range」にすると、その行がエラーになってしまいます。 置換処理を全てのシートで実行させるためには、マクロをどのように直せばいいでしょうか?

  • マクロ EXCELの範囲をコピーして貼付け

    『End(xlDown).Row』で取得した値を使ってセルの範囲指定&コピーを行い、 新しく追加したシートに貼り付けたいのですがうまくいきません。 Sub attendanceJoin() Dim MaxRow As Integer 'シートの最終行の値 Workbooks("test.xls").Activate Dim NewWorkSheet As Worksheet Set NewWorkSheet = Worksheets.Add() '新しいシートを追加する MaxRow = Worksheets(2).Range("M1").End(xlDown).Row  'A列の最終行を取得 NewWorkSheet.Name = "統合"  '新しく追加したシートの名前を変更 With Workbooks("test.xls") .Worksheets(2).Range("A1:M&MaxRow").Copy   'コピーするセルの範囲を指定    '↑ここでエラー。.Worksheets(2).Range("A1:M38").Copy を指定するイメージです。 .Worksheets("統合").Range("A1").PasteSpecial End With End Sub どなたか間違っている箇所のご教示お願い出来ますでしょうか。 どうぞよろしくお願い致します。

  • エクセルVBAで別シートにコピー貼り付け

    VBA初心者です。下記のようにプログラムしましたがうまくいかなくて困ってます。どなたかお力をお貸しください。内容としましては輸入Partsのシートからコピーして商品内容確認のシートのセルB17に貼り付けたいです。輸入Partsシートで3列目の空白を探し同じ行の1列目をコピーします。商品内容確認のシートのセルB17にはカーソルは動いているようですが貼りつきません。 Private Sub 商品内容確認2_Click() If MsgBox("商品内容確認へ移動しますか?", 33, "移動の確認") = 2 Then MsgBox "処理を中止します。" Range("A2").Select Exit Sub End If Dim Line As String Dim Maxrow As String Worksheets("輸入Parts").Select Line = 2 Do Until Cells(Line, 1).Value = "" On Error Resume Next If Cells(Line, 3).Value = "" Then Cells(Line, 1).Copy 'コピーする Maxrow = Worksheets("商品内容確認").Range("B17").End(xlDown).Row + 1 Worksheets("商品内容確認").Range("B" & Maxrow).PasteSpecial Paste:=xlPasteValues '値を貼り付け End If On Error GoTo 0 '次の行に移り最後の行まで検索 Line = Line + 1 Loop Worksheets("商品内容確認").Visible = True Worksheets("商品内容確認").Select Worksheets("商品内容確認").Range("B6").Select Worksheets("商品内容確認").輸入Partsシート2.Visible = True Worksheets("商品内容確認").輸出Partsシート2.Visible = False Worksheets("輸入Parts").Visible = False End Sub

専門家に質問してみよう