dポイントプレゼントキャンペーン実施中!

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

A 回答 (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
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/05/30 13:57

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


これはVBAの用語だが、VBAの質問ですか。
質問にはっきりさせること。
>重複したコードのみ抽出して
表現が不十分では無いですか。
私は下記データ例のように解した。重複出現のコード分のみを抜き出した。
下記のデータから1行のみのコードは捨てて他を集めた。
Paste:=xlPasteValuesで書式を捨てている。
>AdvancedFilterを使って、
私はAdvancedFilterで、相当考えたができなかった。
(質問者が言うのは下記で言えば[、適切なのは「a」の行の抽出であって、複数あれば結果が重複するのは当たり前。)
下記は相当てこずった。
A列  B列
コード計数
a12
b23
a43
b55
c34
a1
d2
e3
e4
e5
e6
数個所セルのパターン色を設定
ーー
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列
a12
a43
a1
b23
b55
e3
e4
e5
e6
ーーーー
フィルタ関係に拘ったが、私ならこんな複雑なロジックにしない。
kw = Array("a", "b", "c", "d", "e")
も本当はプログラムで出さないとならないのだが、今回は手作業で済ました。
    • good
    • 0

[No.1補足]へのコメント、



マクロ(VBA)の話でしたか?
私、マクロ音痴なので、アドバイスができません。

「AdvancedFilter」なんて唐突(?)に英語が出たので、英語版の Excel を使っておられると勘違いしておりました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/05/13 22:12

》 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はどの箇所に入力したらいいのでしょうか??

補足日時:2011/05/13 21:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています