• ベストアンサー

AdvancedFilterを使って値のみ貼り付け

あるAシートからあるBシートに重複したコードのみ抽出して値のみの貼り付けたいのですが、 AdvancedFilterでは全コピーになってしまいます。 Bシートの書式は変更したくないので、 何かいい方法をご存知ないでしょうか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

filtercopyしてしまうと全コピーになってしまうのはそういうモノなので,どうしようもありません。 方法1:素直に。 sub macro1() application.screenupdating = false range("A1:A20").advancedfilter action:=xlfilterinplace, unique:=true range("A1:A20").copy worksheets("Sheet2").range("A1").pastespecial paste:=xlpastevalues activesheet.showalldata application.screenupdating = true end sub 方法2:参考にこんなやり口もあります。Advancedfilterより優位性があるワケじゃありませんが,ユニークなリストをメモリに確保したい目的でしばしば出てくる手口です。 Sub macro2()  Dim myDic As Object  Dim h As Range  Set myDic = CreateObject("Scripting.Dictionary")  For Each h In Range("A1:A" & Range("A65536").End(xlUp).Row)  If Not myDic.exists(h.Value) Then  myDic.Add h.Value, ""  End If  Next  Worksheets("Sheet2").Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.keys)  Set myDic = Nothing End Sub

aiurai54
質問者

お礼

ご教授ありがとうございます。 試してみます!!

その他の回答 (3)

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

>AdvancedFilterを使って値のみ貼り付け これはVBAの用語だが、VBAの質問ですか。 質問にはっきりさせること。 >重複したコードのみ抽出して 表現が不十分では無いですか。 私は下記データ例のように解した。重複出現のコード分のみを抜き出した。 下記のデータから1行のみのコードは捨てて他を集めた。 Paste:=xlPasteValuesで書式を捨てている。 >AdvancedFilterを使って、 私はAdvancedFilterで、相当考えたができなかった。 (質問者が言うのは下記で言えば[、適切なのは「a」の行の抽出であって、複数あれば結果が重複するのは当たり前。) 下記は相当てこずった。 A列  B列 コード 計数 a 12 b 23 a 43 b 55 c 34 a 1 d 2 e 3 e 4 e 5 e 6 数個所セルのパターン色を設定 ーー Sub test02() kw = Array("a", "b", "c", "d", "e") j = 30 For i = 0 To UBound(kw) MsgBox kw(i) Range("a30:B40").Clear Range("a1:B20").AutoFilter Range("A2").CurrentRegion.AutoFilter field:=1, Criteria1:=kw(i) Range("A2", Range("B20").End(xlUp)).SpecialCells(xlCellTypeVisible).Copy ActiveSheet.Range("A30").PasteSpecial Paste:=xlPasteValues r = Range("A30").CurrentRegion.Rows.Count If r > 1 Then Range("A30").CurrentRegion.Copy Cells(j, "h").PasteSpecial j = j + r End If Next i End Sub データ範囲や、作業セル範囲、結果を出すセル範囲など(時間がなくて)恣意的なので注意してください。 ーーー 結果 パターン色は消えている。 第30行以下 H列  I列 a 12 a 43 a 1 b 23 b 55 e 3 e 4 e 5 e 6 ーーーー フィルタ関係に拘ったが、私ならこんな複雑なロジックにしない。 kw = Array("a", "b", "c", "d", "e") も本当はプログラムで出さないとならないのだが、今回は手作業で済ました。

noname#204879
noname#204879
回答No.2

[No.1補足]へのコメント、 マクロ(VBA)の話でしたか? 私、マクロ音痴なので、アドバイスができません。 「AdvancedFilter」なんて唐突(?)に英語が出たので、英語版の Excel を使っておられると勘違いしておりました。

aiurai54
質問者

お礼

すみません。 いろいろと説明不足でした。 ご回答ありがとうございます。

noname#204879
noname#204879
回答No.1

》 AdvancedFilterでは全コピーになってしまいます 「全コピー」とはどういう意味ですか? Aシートのデータを[コピー]した後で、Bシートに[値の貼り付け](Paste Special)をしたら如何かと。

aiurai54
質問者

補足

説明不足で申し訳ありません。 全コピーとは書式がコピーされてしまうという意味になります。 現在下記のようなプログラムを作成しています。 Workbooks(file_name).Worksheets(A_sheet).Range("A2:A20").AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Workbooks(file_name).Worksheets(B_sheet).Range("A2"), Unique:=True PasteSpecialはどの箇所に入力したらいいのでしょうか??

関連するQ&A

  • EXCEL Advancedfilter Name(Criteria)の自動作成

    重複データから重複のないデータを抜き出すため、下記のようにCriteriaRangeを指定せずに、Advancedfilterを実行していますが、その際にシートの特定のセルにCriteriaという名前(Nameオブジェクト)が自動的に作成され、それが残る現象が生じます。 シートにその名前(Criteria)が残ると、別のSUBで重複データから重複のないデータを抜き出すためAdvancedfilterを実行すると機能しません(表題部だけ抜き出してくる)。 そこで、2点ご教示いただければ幸いです。 1 Criteriaを残さないAdvancedfilterの実行方法 2 残ってしまうCriteriaを削除する方法として、下記のコードを加えていますが、Namesコレクションの特定のName(Criteria)を特定して削除させていますが、この方法は=を使っていることが、後日のコード解析を分かりづらいものにするため、避けた方がよいと別に指導を受けているため、これ以外の効率的な方法があればご教示願います(例えば、Nameのプロパティを変更する方法による対処方法)。 Criteriaを削除するコード   Dim Objname As name For Each Objname In ActiveWorkbook.Names If Objname.name = "作業用シート!Criteria" Then Objname.Delete End If Next Objname Advancedfilterのコード   With Worksheets("作業用シート") M = .Range("B10000").End(xlUp).Row .Range(.Cells(6, 5), .Cells(M, 5)).AdvancedFilter _ Action:=xlFilterCopy, _ CopyToRange:=.Range("AA6:AA2000"), Unique:=True end with  

  • excelでAdvancedFilterを使って重複データを削除したい。

    初心者質問で申し訳ありません。 重複データを削除したいんですが、調べたところ AdvancedFilterを使って・・・とのことでした。 Sheets("コピー元sheet").Range("範囲").AdvancedFilter _ Action:=xlFilterCopy, _ CopyToRange:=Sheets("コピー先sheet名 ").Range("範囲"), _ Unique:=True ということは分かったのですが、「どの項目の重複 を削除したいのか?」というのはどこで指定するのでしょうか・・・。(例:B列の「部署」という項目の列で重複している部署があったらデータを削除したい・・・等) 例文が見苦しかったらごめんなさい!!!

  • excel2007 重複する値の抽出について

    いつもお世話になっております。 またお知恵を拝借しようと思い、質問しております。 重複するデータから 3つ重複する値のみを抽出したいときの抽出方法を教えてください。 例) A B 1 重複 1 重複 2 重複 2 重複 2 重複 3  4 重複 4 重複 4 重複 5 IF(COUNTIF($A$1:$A$10,A1)>1,"重複","") で重複するものは確認できました。 ここから3つ重複している値のみを抽出したいときの抽出方法がわからなくて困っています。 簡単な方法はありますか? 2つ重複している値と1つだけの値を削除すればいいのですが、大量にデータがあります。 重複のみを抽出した後、2つ重複した値だけを削除できる方法か、3つ重複した値のみ抽出する方法はありますか? 重複するのは3つまでで、なんせ3つ重複している値のみにしたいというわけです。 excel2007使用。「重複を削除」をすると全ての重複が削除されてしまうので、困っています。 どうかお力をお貸しください。

  • AdvancedFilterの状態把握

    ExcelのVBAで、AdvancedFilterを使って、データを 抽出するプログラムを作っています。 今のシートの状態が、AdvancedFilter実行後かどうか をVBAで取得したいのですが、可能でしょうか? ちなみに、AutoFilterは、「ActiveSheet.AutoFilterMode」 で取得できるようですが、AdvancedFilterの状態は 取得することができませんでした。 よろしくお願いします。

  • 値の貼り付け設定

    セルのデータをコピーするとき、貼りつけ先を毎回形式を選択して貼りつけ・・から値にチェックをいれてコピーしています。それを単なるコピペだけで自動的に値のみ(書式などをコピーせずに)コピーする設定ありますか。B列全部に適応させたいのです。よろしくお願いします。

  • エクセルVBA AdvancedFilterの範囲

    エクセルVBAのAdvancedFilterのついて教えてください AdvancedFilterは検索条件をCriteriaRangeで指定するかと思うのですが、そのつど変更することは可能なのでしょうか 現在、B3からO3に検索するための「見出し」が入力されています B4からO4に検索したい文字を入力しCriteriaRange:=Range("B3:O4")としてきたのですが、検索を増やし場合があります B5からO5にも入力し、Range("B3:O5")とすればいいのでしょうが、そのつど検索範囲を変更するのは大変です あらかじめRange("B3:O5")としてしまうと、4行目までしか入力しなかった場合に、5行目がORで検索されるので、余白行が検索されることになりすべてのデータを抽出してしまいます 最大でも10条件用意しておけば足りると思うので、Range("B3:O13")としたいです "空白セルの場合は、上の行をコピーする"と命令させておけば、空白セルがなくなりすべてのデータを抽出してしまうということは回避できるのかな?と考えたのですが、どのように実現するか分かりませんでした それか、"最終行を認識し、そこまでの範囲とする"とか"余白セルを無視する"ことも可能なのでしょうか 自分が思いついたやり方でなくでも構わないので、検索のつど範囲を変更できる方法があれば教えてください よろしくお願いします

  • Excel 2007 マクロ AdvancedFilterについて(再

    Excel 2007 マクロ AdvancedFilterについて(再投稿) 先ほど同じ質問を投稿したのですが、画像を添付していませんでした。削除できないため再度投稿しました。 元データ(Sheet1)の表が4つあります。元データは画像に添付しました。 この表で製品名かぼちゃで「空白」と「-」以外の数値が入っている行をSheet3にコピーして貼り付けるマクロを作成しています。 <Sheet2> 製品名その他 かぼちゃ<> かぼちゃ- 下記マクロを実行したところ、Sheet3にはA列の番号のみ表示されます。 Sub Test1() Sheets("Sheet1").Range("A1:E34").AdvancedFilter xlFilterCopy, _ Sheets("Sheet2").Range("A1", Sheets("Sheet2").Cells.SpecialCells(xlCellTypeLastCell).Address), _ Sheets("Sheet3").Range("A1") End Sub <Sheet3> A列は空白です。 B列からE列は表示されていません。 どのように修正すればよろしいでしょうか。

  • 値のみの貼り付けなのですが…。

    シート間での値の貼り付けをしたいのですが教えて下さい。宜しくお願いします。 例えば、A社・B社・C社・集計シートがあった時、まずA社の数式の入っているセルB10・E10・G10の数値を集計シートのC4・C5・C6のセルに値のみ貼り付けて、次の行にB社、また次の行にC社をと上書きでなく、データが追加されるようにしたいのですが、できますでしょうか?

  • 指定した複数範囲の値に一致する行を抽出するには

    Excelで、シートAには商品コード一覧が入力されています。シートBには、シートAに登録されていない商品も含めた商品コード一覧が入力されています。 いま、シートBにおいて、シートAに登録済みの商品コードの行のみを抽出したいのですが、どのようにすればよいかわかりません。 具体的に書くと、 【シートA】 商品コード 商品名 商品単価 AAAA    商品A 100 BBBB    商品B 150 CCCC    商品C 170 【シートB】 商品コード 数量  注文日 AAAA    50   06/01 YYYY    30   06/01 CCCC    10   06/02 XXXX    30   06/02 BBBB    50   06/03 ZZZZ    30   06/04 上記例の場合、抽出結果が AAAA    50   06/01 CCCC    10   06/02 BBBB    50   06/03 となるような方法を探しています。 関数を使用しても構いません。 抽出結果は、Bシート自体に反映されても、別シートに作成されても構いません。 比較元の値が数個程度ならば、フィルタ機能でもなんとかなりそうですが、今回は数百件あり、しかも、規則性のない値なので、フィルタの抽出条件でもうまく導き出すことができません。 よろしくお願いいたします。

  • EXCELで別シートから値の一致しないデータを抽出する方法

    Sheet1のA列に A1 123 A2 456 A3 789 のデータが入力されており、Sheet2のB列に B1 666 B2 123 B3 888 B4 999 B5 456 B6 888 のデータが入力されている場合に、 下の表のように、Sheet1のA4以降のセルにSheet2のB列から ・Sheet1のA1~A3に一致しないデータ ・Sheet2のB列で重複しないデータ ・降順 の3点の条件で抽出する方法を関数で教えてください。 よろしくお願いします。 Sheet1 A1 123 A2 456 A3 789 A4 999 <-ここからSheer2のデータでA1~A3以外の値でSheet2の重複をさけて降順で表示させたい A5 888 A6 666

専門家に質問してみよう