プロが教えるわが家の防犯対策術!

よろしくお願いします。
office365なのですが。

コピー元でフィルタをかけ、表示されたままでコピー先にコピーしたいのですが。。。

例えば(わかりづらかったらすいません)

No 名前
1  あ
2  い
3  う
4  え
5   お


というのがあって、フィルタを掛けてNo1、3,5(あ、う、お)
表示します。それをコピーして
コピー先でも同じ形となるようコピーしたいです。
行もコピー元でフィルタをかけ表示されていない、No2,4(い、え)はコピーされず、空白となるようにコピーしたいのですが。。。(行を詰めた形でのコピーとならないようにしたいです。)

方法がわからず、そもそもそのようなこぴーはできないのでしょうか

詳しい方教えて頂ければと思います。

A 回答 (6件)

No1です。



マウロで対応する例を考えてみました。
方法はいろいろありますが、これまでとほぼ同様に使える感じにしてみました。

◇ 準備作業
下記のマクロを標準モジュールにコピペし、そのマクロにお好みのショートカットキーを登録しておきます。
(このショートカットキーを押すと、マクロが実行される)

◇ 使い方
1)フィルターをかけた(かけてなくてもかまいませんが)状態で、コピーしたい範囲を選択し、上記のショートカットキーを押します。
(これにより、ご希望の形式でクリップボードにコピーした状態になります)
2)ペーストしたいセルを選択し、Ctrl + V などでペースト。

これまでの、コピー、ペースト(Ctrl+C、Ctrl+V)の代わりに、登録したショートカットを使うだけの違いで、ご質問のような処理になります。


※ 処理の都合上「作業用のシート」(=copy_work)を利用しています。
 非表示にしてありますので、気にはならないと思いますが、シートがあるのでブックの容量がわずかに増加します。
(シートは勝手に追加されますので、気にする必要はありません)
(作業シートなしでも可能ですが、使い勝手を優先しこの方法にしてあります)

※ 実際に行っている処理内容は「指定範囲を非表示の行は空白行としてコピーする」というものですので、フィルター操作には直接関係しません。
ですので、フィルター範囲に対して一部分だけのコピーも可能ですし、フィルター外の範囲を含めてのコピーも可能です。

※ 対象範囲に関数式等がある場合、ペースト時に値が変わってしまう可能性があるため、以下のマクロでは「値をコピー」の状態にしてあります。
もしも、「数式は数式のままコピーしたい」(=エクセルによって変換される可能性がありますが・・)のであれば、以下のコードの下から5行目の
 dRange.Rows(i).Value = sRange.Rows(i).Value '***
の1行を削除すればそのようになります。

以下、マクロコードです。

Sub Q13786277()
Dim sh As Worksheet, cs As Worksheet
Dim dRange As Range, i As Long
Dim sRange, s, M
Const sn = "copy_work"
M = Split("セル範囲を選択してください,指定範囲が複雑すぎます", ",")

Set sRange = Selection
If TypeName(sRange) <> "Range" Then MsgBox M(0): Exit Sub
If sRange.Areas.Count > 1 Then MsgBox M(1): Exit Sub

Set sh = ActiveSheet
For Each s In Worksheets
If s.Name = sn Then Set cs = s: Exit For
Next s
If cs Is Nothing Then
Set cs = Worksheets.Add(before:=Worksheets(1))
sh.Activate
cs.Name = sn
End If
cs.Visible = False
cs.Cells.Clear

Set dRange = cs.Range(sRange.Address)
For i = 1 To sRange.Rows.Count
If sRange.Rows(i).EntireRow.Hidden = False Then
sRange.Rows(i).Copy dRange.Rows(i)
dRange.Rows(i).Value = sRange.Rows(i).Value '***
End If
Next i
dRange.Copy
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2024/04/19 08:36

EXCELでフィルターを使う場合、全ての列を使用した表(A列からXFD列まで全て使った使った表)というケースは考えにくいので、どこかに未使用列(つまり空き列)があると思います。


この空き列を作業列として使用して、「可視セルのみコピー」を実施して空き列にコピーし、さらに、この空き列をもう一度コピーして、「空白セルを無視して貼付け」を行なえば、ご質問の主旨に沿った貼付けができると思います。

例えばご質問者が例示された「あ,い,う,え,お」にフィルターをかけて「あ,う,お」を抽出し、これを同シートの別表や別シートの「か,き,く,け,こ」に貼付けしたとき、「あ,き,う,け,お」となるようにするイメージです。

添付画像をご覧ください。

画像①のようにデータがあったとします。上の表の年齢40歳以下を抽出するためフィルターをかけて画像②のようになったとします。
コピーしたいのは「あ,う,お」であり、その方法は以下のとおりです。

(1)「あ,う,お」の範囲を選択
(2)メインメニューのホーム→検索と選択→条件選択してジャンプ→「可視セル」を選択としてOKを押す(左記一連の操作のショートカットとして「ALT+;」でもOK)
(3)すると、画像③のようになるので、CTRLキーを押した状態で、空き列(画像ではD列)の「コピーしたい範囲の先頭行と同じ行」をクリックしたまま、マウスをスライドして、「コピーしたい範囲の最終行と同じ行」まで進める
(4)すると、画像④のようになるので、CTRLキーを離さずに「R」キーを押すと画像⑤のようになる
(5)年齢40歳以下というフィルターを解除すると画像⑥のようになり、空き列(画像ではD列)に、ご質問者のいう「(い、え)はコピーされず、空白となるようにコピーしたい」が実現される

これを指定位置に貼り付けしたい場合、例えば画像①の「か,き,く,け,こ」に「あ,う,お」を「コピー先でも同じ形となる」ように貼り付けいるには、

(ア)画像⑦(a)の範囲、D列の「あ~お」の範囲を選択し、右クリックしてコンテキストメニューから「コピー」をクリック
(イ)画像⑦(b)の範囲、B列の「か~こ」を選択
(ウ)右クリックしてコンテキストメニューから「形式を選択して貼り付け」をクリック
(エ)画像⑧のダイアログが表示されるので「空白セルを無視する」にチェックして、OKを押す

これで画像⑦の下の表のように「あ,う,お」が同じ形で「か,き,く,け,こ」に貼り付けられ、結果として「あ,き,う,け,お」になります。
「Excel フィルターを掛けた状態のまま」の回答画像5
    • good
    • 0

[No.3]の続報ッ!


たった今、思い付きました。正に逆転の発想でしたッ!
添付図だけでお分かりかと。(^_^)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄↓↓↓↓↓↓↓↓↓↓↓↓↓
「Excel フィルターを掛けた状態のまま」の回答画像4
    • good
    • 0

[No.2お礼]へのコメント、


》 出来ない者でしょうか。
残念ながら私には、ご希望に添える能力がありません。m(_._)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2024/04/19 08:37

私ィ~、仰っていることが理解できないのですが、


添付図の Fig-2 をコピーして、別の場所(セル A11)に貼り付けたら Fig-3 のように
なるのが普通だけど、実は Fig-4 のようになることを希望しておられると?
もし、異なるなら貴方なりの期待図をお示しください。
「Excel フィルターを掛けた状態のまま」の回答画像2
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご認識の通り、Fig-2をコピーしてFig-4になることを望んでいます。

出来ない者でしょうか。

お礼日時:2024/04/13 21:11

こんばんは



すでにお試しと思いますが、通常のコピペの操作では、表示されているセル(=行)のみがコピー、ペーストされます。


多少の手間はかかりますが、ご質問のような結果を得たければ、関数を用いて参照し、その結果をコピー「値をペースト」する(=固定値化する)ことで実現は可能です。

例えば、コピー元の範囲がA1セルから始まっているとして、コピー先のそれに対応するセルに
 =IF(AGGREGATE(3,5,A1)>0,A1,"")
の式を入力し、右方、下方に必要な範囲にフィルコピーします。
(この状態で、ご希望のような表示になると思いますが、関数のままだとフィルターを解除した際に、全部が表示されてしまいます)
関数を外すために、範囲全体を選択してコピー、そのまま「値をペースト」で固定値化します。
(当然ですが、ペースト先のセル(=行)は全て表示状態とします)


別法として、ご質問のような機能のマクロを作成しておく方法も考えられます。
マクロであれば、「値をペースト」のような処理は不要にできますので、多少は操作が簡単になるかも知れません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
教えて頂いた方法、試してみたいと思います。
表示されているところだけコピーされるというのは、
No1,3、5がコピーされますが、2,4はコピーされないので、
貼付け先では、1,3,5がそれぞれ、1行目、2行目、3行目にコピーされてしまうということですね。(実際そうなりました。)

マクロが作れない私は、一行ずつ、地道にコピーするしかないのかもしれません。

お礼日時:2024/04/13 06:18

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

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


このQ&Aを見た人がよく見るQ&A