• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フィルタしたセルのコピーをフィルタしたセルに貼付)

フィルタしたセルのコピーをフィルタしたセルに貼付

このQ&Aのポイント
  • フィルタしたセルを別のシートにコピーする際に、見えなくなっているセルにもコピーデータが張り付いてしまう問題について質問があります。
  • ベストアンサーでは、Ctrlキーを使用してコピーする方法が紹介されていますが、実際にはできないことがあります。
  • フィルタをかけている列以外の部分も取り込んでしまう場合、フィルタをかけている列以外のデータは選択できない可能性があります。

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

フィルタしたセルのコピー貼り付けに関しては、リンクで紹介されているものを含めて不正確な情報が多いように思います。 基本的に、フィルタしたデータは、非表示にしたデータと異なり、選択範囲の行のみクリップボードにコピーされます(すなわち、Ctrlキーを押しながら、縦にとびとびにセルを選択した状態と同じわけです)。 一般に、とびとびの行を選択してコピーしたセルを貼り付けると、行が詰められて貼り付けられます。 したがって、フィルタモードの場合はジャンプダイアログから可視セルを選択しないでも(まったくこの操作の必要はありません)、無条件に可視セルが貼り付けられます。 一方、フィルタモードではなく、行を非表示にしたシートでは、セル範囲を選択すると、可視セル以外のセルも選択されるので、可視セルだけを貼り付けたい場合は、ジャンプから可視セルを選択する必要があるわけです。 これらのクリップボードのデータをフィルタしたシートに貼り付けるときは、とびとびではなく一塊のデータとして貼り付けられるので、モードにかかわらず、必ず非表示セルにも貼り付けられます(すなわち、とびとびのセルに貼り付ける方法はありません)。 一方、フィルタモードでオートフィル操作を行うと通常とは異なり、連続データは入力できず(コピーのみ)、さらに表示セルだけを対象とします。 これを利用すれば、フィルタした行だけに同じ値を入力することができます。 例えば、フィルタした状態であるセルにデータを入力し、下方向にオートフィルすれば、その値が表示セルだけに「コピー」されます(非表示行にはデータが入力されません)。 例示のデータのように、フィルタしたB列のデータをD列に入力したい場合は、C列を非表示にしてから(列が飛んでいるとオートフィルができないため)、B列のフィルタされたセルを選択して、右方向にオートフィルしてください。 これでC列を再表示して、フィルタモードを解除すればフィルタされたデータだけにデータをコピーすることができます(オートフィル操作ができない別シートには適用できません)。

nekomyumyu
質問者

お礼

丁寧なご説明をありがとうございました。 正直、なかなかすぐには理解できず、また他作業に追われ、 お返事が遅くなってしまいました。申し訳ありません。 作業上、ひとつひとつペーストするのとどちらが大変か…と 迷いましたが、結局、何か違うと怖いので 今回はひとつひとつペーストする形式をとりました。 しかし、方法がないわけではないとわかったので大変ありがたく思います。 今度機会があれば、やってみたいと思います。 ありがとうございました。

その他の回答 (3)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! たびたびごめんなさい。 前回のコードで抜けている行がありました。 もう一度コードを載せておきます。 Sub test() 'この行から Dim i As Long Dim str As String str = InputBox("検索したいデータを入力してください。") For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row '※注 If Cells(i, 1) = str Then Cells(i, 4) = Cells(i, 2) End If Next i Columns("A:D").AutoFit End Sub 'この行まで 何度も失礼しました。m(_ _)m

nekomyumyu
質問者

お礼

二度もたくさんご記入いただいたのにすみません、 最初に「マクロは全く分かりません」と書くべきでした。 結局あきらめました、申し訳ありませんでした。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAでの一例です。 データは2行目からあるとしています。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので、 ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long Dim str As String str = InputBox("検索したいデータを入力してください。") '※注 If Cells(i, 1) = str Then Cells(i, 4) = Cells(i, 2) End If Next i Columns("A:D").AutoFit End Sub 'この行まで 尚、質問では複数データで検索したいようなのですが、上記のマクロは検索したいデータの数だけマクロを繰り返す必要があります。 もしデータが1行目からある場合はコード内の ※注 の行を >For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row に変更してみてください。 以上、参考になれば良いのですが、 ご希望の方法でなければよみながしてくださいね。m(_ _)m

nekomyumyu
質問者

お礼

たくさんご記入いただいたのにすみません、 最初に「マクロは全く分かりません」と書くべきでした。 結局あきらめました、申し訳ありませんでした。 ありがとうございました。

  • mzon
  • ベストアンサー率48% (26/54)
回答No.1

やりたいことと、過去の質問内容とがあっていないように思えます。 過去の質問内容は、フィルタをかけた部分のみ別のシートへコピーする方法です。 なので、今回の質問では1と3だけがコピーされて問題ありません。 コピー先はそのフィールドがフィルタがかかっているかかかっていないかに関係なく 選択した行数分のみ連続ではりつけるからです。 『あ』と『う』の2行を選択したのだから『あ』と『い』の2行に貼り付けられて正常です。 やりたいことを実現するにはコピーではなく、式を挿入して、条件に一致したら文字を表示するようにすればよいと思います。 以上です。 参考になれば幸いです。

nekomyumyu
質問者

お礼

>やりたいことと、過去の質問内容とがあっていないように思えます。 いえ、やりたいことと、過去の質問内容とはあっていると思います。 どちらも「フィルタがかかっている状態」とのことですから。 「できました」がおかしいと思います。 その他はおっしゃるとおりです。 そこは私もわかります。 しかしその 「やりたいことを実現するにはコピーではなく、式を挿入して、条件に一致したら文字を表示する」 ための式がわかりません。 結局あきらめました。ありがとうございます。

関連するQ&A