Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2013)
オートフィルターに該当する行を他のシートでも削除する
投稿日時: 19/12/28 14:25:14
投稿者: ふしぎちゃん

お世話になります。
 
データを入力する元データシートと
それを参照して表にしている参照シートがあって
AG列に式を入れます。
 
元データでフィルターをかけて
0となる行をを削除するとともに
参照シートでもそれと同じ行を削除しようとしてるのですが
どうしてもできません。
現在作成しているのは下記の通りです。
 
初心者で初歩的な間違いなのかもしれませんが
どうか教えてください。
 
Sub test()
 
   Dim myRng As Range, myR As Long
   Dim lr As Long
   Dim R As Range
        
    Range("AG2").Select
    ActiveCell.FormulaR1C1 = "=RC[-19]+RC[-8]"
    Range("AG2").Select
    Range("AG2").Copy
    Range("AG3:AG" & lr).PasteSpecial Paste:=xlPasteFormulas
     
    Range("AG1").Select
    Selection.AutoFilter
    Selection.AutoFilter
    ActiveSheet.Range("AF1:AG" & lr).AutoFilter Field:=2, Criteria1:="0"
  
     Set myRng = ActiveSheet.AutoFilter.Range
     myR = myRng.Rows.Count
     On Error Resume Next
      
     Sheets("参照").Select
     Sheets("参照").Rows(myR).Delete shift:=xlShiftUp
     Sheets("元データ").Select
     Rows("2:" & myR).SpecialCells(xlCellTypeVisible).Delete
 
    On Error GoTo 0
         
    Sheets("元データ").Select
    Selection.AutoFilter
    Columns("AG:AG").Select
    Selection.Delete shift:=xlToLeft
      
End Sub

回答
投稿日時: 19/12/28 15:18:01
投稿者: simple

設定は異なりますので、そのままは使えませんが、考え方を参考にして下さい。
2つのまったく同一の行を削除するんですね?(念のための確認です。)
 

Sub test()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim myRange As Range
    Dim body As Range
    Dim deleteRange As Range
    Dim adr As String
    
    Set ws1 = Worksheets("sheet1")
    Set ws2 = Worksheets("sheet2")
    
    ws1.Range("$A$1:$A$17").AutoFilter Field:=1, Criteria1:="b"
    
    '削除範囲とそのアドレスを作成
    Set myRange = ws1.AutoFilter.Range
    Set body = Intersect(myRange, myRange.Offset(1))
    Set deleteRange = body.Columns(1).SpecialCells(xlCellTypeVisible).EntireRow
    adr = deleteRange.Address
    
    '削除
    deleteRange.Delete Shift:=xlUp
    ws1.ShowAllData
    
    '別シートの対応する範囲も同時に削除
    ws2.Range(adr).Delete Shift:=xlUp

End Sub
一応動作確認はしています。

回答
投稿日時: 19/12/28 15:31:49
投稿者: WinArrow
投稿者のウェブサイトに移動

参照シートも、元シートと同じ、オートフィルタをかければ
良いのではないでしょうか?

回答
投稿日時: 19/12/29 10:05:12
投稿者: WinArrow
投稿者のウェブサイトに移動

参照シートの作り方にも関係するのですが、
 
元シートから、コピペで(数式あり)したもの
その後参照シートを更新している
 
なんてことがあれば、
元シートと同じ行を削除するのは門田ではないでしょうか?
 
その様に意味合いで
元シートと同農の操作をすればよい
という提案をしました。
 
若し、元シートとまったく変わっていないならば、
最初に作成したときと同じ操作で、三洋シートをさくせいすればよいでしょう。

投稿日時: 19/12/30 09:07:23
投稿者: ふしぎちゃん

simpleさん WinArrowさん
ありがとうございます。
simpleさんのコードで試してみます。
 
WinArrowさんのいわれるように
元データシートと参照シートは
元データシートのデータを必要な場所だけ
参照シートで表示するようにしています。
元データシートを削除すると
エラー表示となってしまうために
その行を消してしまおうと考えています。
 
ありがとうございます。
初心者なので、コードの検証に時間がかかりますので
また、できたら追記いたします。

回答
投稿日時: 20/01/02 14:11:23
投稿者: mattuwan44

あけましておめでとうございます。
 
>門田
>同農
>三洋
 
WinArrowさんの相変わらずの誤字、
楽しく読ませていただきました^^
 
本題
>それを参照して表にしている参照シートがあって
つまり、参照式で参照しているのでしょうか?
元のセルが削除されて、
#REF!
と表示されているなら、ジャンプ機能で検索して削除できませんか?
 
それか、マクロでやるんだから、
一回シートをクリアして、
改めて表示したいものを表示したらいかがでしょうか?

回答
投稿日時: 20/01/02 15:00:29
投稿者: WinArrow
投稿者のウェブサイトに移動

あけましておめでとうございます。
 
>WinArrowさんの相変わらずの誤字、
>楽しく読ませていただきました^
 
面目ありません。
本年も、誤字のあるかな?・・・笑っていないで、厳しく指摘してください。
「送信」前に「プレビュー」するようにします。
 
話変わりますが、大晦日の朝、西の空に大きな「虹」を見ました。
今年は、よいことが期待できそう
 
 
 

投稿日時: 20/01/07 11:12:30
投稿者: ふしぎちゃん

ありがとうございました。
 
simpleさんの構文を参考にして
作成することができました。