- ベストアンサー
AdvancedFilterを使って値のみ貼り付け
あるAシートからあるBシートに重複したコードのみ抽出して値のみの貼り付けたいのですが、 AdvancedFilterでは全コピーになってしまいます。 Bシートの書式は変更したくないので、 何かいい方法をご存知ないでしょうか?
- みんなの回答 (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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
>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") も本当はプログラムで出さないとならないのだが、今回は手作業で済ました。
[No.1補足]へのコメント、 マクロ(VBA)の話でしたか? 私、マクロ音痴なので、アドバイスができません。 「AdvancedFilter」なんて唐突(?)に英語が出たので、英語版の Excel を使っておられると勘違いしておりました。
お礼
すみません。 いろいろと説明不足でした。 ご回答ありがとうございます。
》 AdvancedFilterでは全コピーになってしまいます 「全コピー」とはどういう意味ですか? Aシートのデータを[コピー]した後で、Bシートに[値の貼り付け](Paste Special)をしたら如何かと。
補足
説明不足で申し訳ありません。 全コピーとは書式がコピーされてしまうという意味になります。 現在下記のようなプログラムを作成しています。 Workbooks(file_name).Worksheets(A_sheet).Range("A2:A20").AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Workbooks(file_name).Worksheets(B_sheet).Range("A2"), Unique:=True PasteSpecialはどの箇所に入力したらいいのでしょうか??
お礼
ご教授ありがとうございます。 試してみます!!