• ベストアンサー

フィルタでくくった状態でコピー 貼付 マクロ

K列までデータが入っていて Range("L2").Value = "=SUMIF(B:B,B2,H:H)" として、 K列には、=IF(B2=B1,0,1)という感じで関数が入ります。 該当「1」でフィルタでくくってる状態です。 L2をコピーしてK列の最下部(データがある最終行)までコピーしたいと思ってますが、 コピーするとくくってない「1」ではない部分にも関数が張り付いてしまいます。 その後、フィルタを解除して、L2を値貼付したいと思ってます。(もちろん、マクロで自動化して) このようなことは可能でしょうか?

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

>くくってる部分のみを値貼付 くくってる部分=抽出後の可視セル。 数式コピー後、可視セルのみLoopして値貼付すれば良いです。 Dim r As Range For Each r In Range("L2", Cells(Rows.Count, "K").End(xlUp).Offset(, 1)).SpecialCells(xlCellTypeVisible)   r.Value = r.Value Next みたく。 この場合フィルタ解除は要りませんが、可視セルが多いともたつきます。 まとめて処理したいなら 下記のようにして、解除後に数式セットとか。 Sub test2()   Dim r As Range   Dim rr As Range   With ActiveSheet     Set r = .Cells(.Rows.Count, "K").End(xlUp)     If r.Address <> "$K$1" Then       Set r = .Range("L2", r.Offset(, 1))       Set rr = r.SpecialCells(xlCellTypeVisible)       If .FilterMode Then         .ShowAllData       End If       rr.Formula = "=SUMIF(B:B,B2,H:H)"       r.Value = r.Value     End If   End With   Set r = Nothing   Set rr = Nothing End Sub

hara93
質問者

お礼

本当にハンパなくありがとうございました。 こんなことが出来るとは offset関数ってすごいんですね?¥

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

>コピーするとくくってない「1」ではない部分にも関数が張り付いてしまいます。 再度確認してみてください。 フィルタ状態でも Range("L2").Copy Range("L2", Cells(Rows.Count, "K").End(xlUp).Offset(, 1)) これで可視セルのみコピーになります。 ついでに値貼付まで書いてみると Sub test()   Dim r As Range   With ActiveSheet     Set r = .Range("L2", .Cells(.Rows.Count, "K").End(xlUp).Offset(, 1))     r.Item(1).Copy r     If .FilterMode Then       .ShowAllData     End If     r.Value = r.Value   End With   Set r = Nothing End Sub こんな感じです。

hara93
質問者

補足

ハンパないっす ありがとうございます!!! ただ、1点だけ、再計算を2度してしまうのは、しょうがないのでしょうか? コピーを貼り付けたときと、フィルタを解除したときと両方でってのは… コピーみたいに、くくってる部分のみを値貼付ってのはやっぱり無理何でしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCEL VBA オートフィルタの値コピー2

    たびたびすいませんよろしくお願いします。 EXCEL VBA オートフィルタの値コピーの追加質問です http://okwave.jp/qa4803815.html?ans_count_asc=20 オートフィルタ後、1日当たり行は10~15行あります、そのうちH列からM列まで、ある1行にデータがありますそのデータをH列から順番にSheet1のM20とM28までコピーしたいのです、ただ日によってその列は空欄の時やM列だけの時もありますもあります。さらにN列からP列まで同じようにデータがある時(H列からM列と行が違うときがあり)、上にある行からSheet1のM20とM28に上詰めでコピーしたいのです。 もっと簡単にいいますとH列からP列まである値を上の行からさらにH列から順番に上詰めでSheet1のM20とM28にコピーしたいのです。 なにとぞよろしくお願いします。 Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • コピーと貼付

    既存のデータはA~Y列まで入力されています。 新規のデータはA~W列までとなっています。 既存のX行には日付をいれてあり、新規データのX列に次月の1日(ついたち)を入力したい。 とりあえずは、1行下に日付を入力したマクロを組んだのですが、その後50行前後もコピーし貼付したいのですが、範囲の選択がうまく出来ません。 途中のセルから最終行のセルの範囲選択のマクロを教えてもらえないでしょうか。 ※Y列はダブルクリックコピーで問題ないので大丈夫です。 例   A列・・・・・・    X列      Y列(検索の関数が入っています) 1  ABC・・・・・・   2011/6/1    1    ※既存のデータ 2  DDD・・・・・・   2011/7/1         ※新規データの1列目 3  FFF・・・・・・   (      )                4  GGG・・・・・・   (      ) 5   ・ 6   ・ 7   ・ 8   ・ 50 ZZZ・・・・・・   (       ) 新規の2列目以降に、新規で作成した日付をコピーし貼付したい。 上記までのマクロを参考に送ります。 教えて下さい。 Sub test() Dim MaxRange '最終行番号 MaxRange = Range("X3").End(xlDown).Row '最終行の設定 Range("X3").Select Selection.End(xlDown).Offset(1, 0).Select 'X列の最終行+1行目を選択 ActiveCell.FormulaR1C1 = "=EDATE(R[-1]C,1)" '同セルに関数入力 Range("X" & MaxRange - 1).Copy '書式の変更(変更前の最終行よりコピー・貼付) Range("X3").Select Selection.End(xlDown).Offset(0, 0).Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("X3").Select '追加したセルの関数を値に変更 Selection.End(xlDown).Offset(0, 0).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

  • Excelマクロ オートフィルタ可視領域の特定部分をコピー

    何方か、回答をお願いします。 下記もマクロは 、B列:C列(B1:C1はタイトル)をオートフィルタに掛けて フィルタに掛かった一番上のデータをコピーして貼り付けているマクロですが。 やりたいことは、B1:C1のタイトルとフィルタに掛かった可視領域の一番上の データ(オートフィルタに引っかからないでデータが無い場合も有り)をコピー して貼り付けたいのですがどの様なコードを書けば良いのでしょうか。? Sub フィルタ() Range("B1:C1").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:=">=1e-6" Range("B1").CurrentRegion.Select On Error Resume Next Selection.SpecialCells(xlCellTypeVisible).Areas(2).Rows(1).Select Selection.Copy Range("K15").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.AutoFilter End Sub

  • Excelマクロ)フィルタをかけたコピーでエラー

    Excelのマクロで、フィルタをかけた列のデータ値を別シートへコピー(貼付け)する マクロを作りました。 フィルタをかけて、データ値があれば問題ないのですが、 データ値がない場合、エラーがでます。(=マクロがストップします) どうしたら回避できるでしょうか?

  • EXCEL VBA オートフィルタの値コピー

    ほぼ初心者ですのでよろしくお願いします。 Sheet2にデータがありそのデータをオートフィルタで日付から抽出してSheet3にコピーして、その後Sheet1の表に該当項目をコピーする際についてですが、オートフィルタ後、1日当たり行は10~15行あります、そのうちG列にはデータが通常2つのセルに値があるだけでほかの行は空欄です。(日によってどの行になるかはわかりません)この2つのセルの値をそれぞれSheet1のM10とM11コピーしたいのです、 ちなみにセル番地は下記の方法で取得できましたが、値の取得ができません。 Range("D1").Value = Worksheets("sheet1").Range("A1").End(xlDown).Row Range("D2").Value = Worksheets("sheet1").Range("A65536").End(xlUp).Row Sub データコピー() Range("AB17") = Format(Sheet3.Range("A3").Value, "yy") Range("AE17") = Format(Sheet3.Range("A3").Value, "mm") Range("AH17") = Format(Sheet3.Range("A3").Value, "dd") Range("AK17") = Format(Sheet3.Range("A3").Value, "aaa") Range("D22") = Sheet4.Range("D3").Value Range("D25") = Sheet4.Range("E3").Value Range("H22") = Sheet4.Range("F3").Value Range("D22") = Sheet4.Range("G3").Value Range("L22") = Sheet4.Range("K3").Value Range("Q22") = Sheet4.Range("L3").Value Range("U22") = Sheet4.Range("M3").Value .   .   . End Sub

  • オートフィルタをかけるマクロ

    A12からA50に表示されている内容でB列にオートフィルタをかけ、印刷をする というマクロですが、 Selection.Autofilter field:=2, Criteria1:=Range("A12") Activesheet.Printout を39回コピーし、"A12"の部分を"A13"............"A50"に変えていきました。 本当はもっとスッキリできると思うのですが、そこがまだよくわかりませんので どなたか教えていただけないでしょうか。 A列は必ず50までデータがあるとは限りません。 エクセル2003使用の初心者です。 よろしくお願いします。

  • オートフィルタのマクロについて

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。

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

    質問番号:2467654で似たようなことを希望した方がいて、 【フィルタしたセルをコピーし、別シートのフィルタしたセルに貼り付けたいのですが、 別シートに貼り付けた時見えなくなっているセルにもコピーデータが張り付いてしまいます。】 という質問に対してベストアンサーが 【Ctrlキーを使用すれば、できますよ。 (例) Aシートのコピーしたい部分を選択し、Ctrl+右クリックショートカットからコピーをクリックします。 Bシートの貼り付けたい部分にカーソルを持っていき、Ctrl+貼付…】 となっていて「できました」!といわれているのですができません。 これ本当にできますか? 違う部分も取り込んでしまうのですが… フィルタをかけているのが他の列だとできないのでしょうか。 (例) A B C ←列 あ 1 イ い 2 ロ う 3 ハ え 4 ニ お 5 ホ の場合に、フィルタで あ うの行を選んで 1 3 を D列にペーストし、 あ1イ1 や う3ハ3 をつくりたい場合に あ1イ1は良いですが、い2ロ3 ができてしまうのです。 ちなみに以下のような回答もありましたが、これも「フィルタしたセルに貼り付け」はできませんでした。。 バージョンはエクセル2003です。 可視セルを選択してから、「コピー」→「貼り付け」を行うと、可視セルだけが貼り付けされます。 以下は、その手順です。 1) コピーするセル範囲を選択します。 2) 「編集」→「ジャンプ」→「セル選択」をクリックします。 3) 表示される画面で、「可視セル」にチェックを入れ「OK」を押します。可視セルだけが選択されます。 4) その後、コピーから貼り付けで、可視セルだけが貼り付けされます。 http://office.microsoft.com/ja-jp/assistance/HP052014731041.aspx セルの選択コマンドから操作する方法もあります。 http://www.h3.dion.ne.jp/~fukusima/waza/ura124.html 参考URL:http://office.microsoft.com/ja-jp/assistance/HP052014731041.aspx,http://www.h3.dion.ne.jp/~fukusima/waza/ura124.html

  • VBA コピーを有効行までループをする方法

    VBAをはじめたばかりの初心者です。 業務でマクロ処理をするよう言われましたが、苦戦しております。 なんとか今週中にしあげなければならない状況で、ご存知の方がいらっしゃれば助けていただければと思います。 1行目・・・項目が記載されています。 2行目以降・・・A列~G列・I~K列に住所などの情報があり、H列とL列にはとある計算式をいれています。 件数は約500件(500行)程度で、毎回変更します。 H2とL2に計算式を入れて、 セルH2の値をH3にコピー、セルL2の値をL3にコピーするマクロが自動記録で次のようにできました。 Range("H2").Select Selection.Copy Range("H3").Select ActiveSheet.Paste Range("L2").Select Application.CutCopyMode = False Selection.Copy Range("L3").Select ActiveSheet.Paste これを、H4・L4、H5・L5・・・・と繰り返してコピーをしていき、データがなくなったらループを修了するという記述をしたいのですが、わかりません。 いろいろネットで探してみたのですが、データ数を指定するやり方(?)ではなく、「Do~Loop」を使った方法でやりたいと思っております。 どなたか教えていただけませんでしょうか。 宜しくお願いいたします。

  • 貼付形式が混在の場合は、どうすれば?

    処理の関係上、下記形式でPasteしたいのですが 列A~G「書式+数式と数式の書式」 列F~Z「書式+値のみ」 一度全て貼付後、後半だけを再度バリューだけ貼付など いろいろ試しているのですが、 混在の場合の貼付がなかなか思い通りにいきません 他にやり方あれば、ご指導願います '一応全て貼付 .Range("A1").PasteSpecial Paste:=xlPasteValues '貼付列後半は、数式削除で貼付 .Range("F1:Z50").Value = Range("F1:Z50").Value '再度全てコピー .Range("A1:Z50").Copy _ wb2.Worksheets("営業").Range("A65536").End(xlUp).Offset(1, 0)