Excel (VBA)

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

 
(Windows 10 Home : Excel 2016)
オートフィルタが動作しない
投稿日時: 20/03/02 22:47:56
投稿者: ZEROZERO

オートフィルタが動作しない
 
◆したいこと
 Sheet1のA列に入力されている値で、
 Sheet2のA列をオートフィルタをかけて、抽出結果のB列に、
 フィルタした値(=Sheet1のA列)の値を入力したい。
 
◆Sheet1のA列が数字の為が動作しない??文字列に変換が必要?
 
 
++++++++++++++++++++++++++++++++++++++++++++++++++++++
SheetA
番号(←見出し行)
1111
2222
3333
 
SheetB
番号,含まれている番号(←見出し行)
XXXXX1111 YYYY,
zzz2222 yyyy,
aa3333ccc,
YYYYYYY,
H1111H,
1111AAAA,
11YYYY,
XZ2222UI,
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Sub test1()
   
    Dim R As Range
    Dim KENSAKUTI As String
    Dim i As Integer, j As Integer
    Dim LASTROW As Long
 
  LASTROW = Worksheets("A").Range("A" & Rows.Count).End(xlUp).Row
        
    For i = 2 To LASTROW
     
        KENSAKUTI = Worksheets("A").Cells(2, i).Value
        Worksheets("B").Range("A1").AutoFilter 1, "*" & KENSAKUTI & "*"
     
        With Range("A1").CurrentRegion.Offset(1, 0)
            For Each R In .Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows
            R.Range("B1") = KENSAKUTI
            Next R
         
        End With
     
        Range("A1").AutoFilter
     
    Next i
     
End Sub

回答
投稿日時: 20/03/03 05:31:42
投稿者: simple

●一点目は、コーディングの際の留意点ですが、
ワークシートを指定していないときには、その時(たまたま)アクティブなシートを
指定したことになり、必ずしも想定していないものになってしまうリスクがあります。
できるだけ、シートを特定してください。
なお、With 句を使って、記述が複雑にならないような書き方を工夫するとよいでしょう。
 
●二点目はデバッグに関することです。
(コードが一発で思った通りにならずに、想定外のことが発生することは
  よくあることです。コードの間違いを探して修正する作業をデバッグと言います。)
あなたのコードの間違いを指摘することは簡単ですが、
それだと、なんだそうか、とそれだけでたぶん終わってしまうと思います。
 
むしろ、デバッグのやり方を、この機会に勉強されることをお薦めします。
詳細は、書籍やネット上の記事で学習してください。
図解を見ながらのほうが理解しやすいですし、
回答者もあらたに文章を作るのは大変です。
内容的には、

・ステップ実行(一行毎にコードを実行させて結果を確認すること)
・変数の内容の確認方法。  
    ・変数名のところにカーソルを合わせて表示される情報で確認
    ・ローカルウインドウでの確認
    ・イミディエイトウインドウの利用
・ブレイクポイントの設定
等は少なくとも抑えていただきたいと思います。
 
まずは、F8キーを利用して一行一行実行してみて、
変数が自分の意図通りに作成されているかを確認して下さい。
たぶん、それほど難しいことでは無いように思います。
比較的単純な間違いですね。
ご自分で手を動かして、実際にトライしてみることが大切かと思います。
 
そうしたうえで不明点が残れば、どうぞ続けて質問して下さい。いくらでも付き合います。

投稿日時: 20/03/03 07:08:58
投稿者: ZEROZERO

どうもありがとうございました。
デバックツールで確認し、修正して動作しました。
 
+++++++++++++++++++++++++++++++++++++++
Sub test1()
   
    Dim R As Range
    Dim KENSAKUTI As String
    Dim i As Integer, j As Integer
    Dim myRow As Long
    Dim n As String
     
    myRow = Worksheets("B").Range("A" & Rows.Count).End(xlUp).Row
        
    For i = 3 To myRow
               
         
         
        KENSAKUTI = Worksheets("A").Cells(i, 2).Value
        If KENSAKUTI <> "" Then
         
        n = "*" & KENSAKUTI & "*"
         
        Worksheets("B").Range("A1").AutoFilter 1, n
                       
        With Worksheets("B").Range("A1").CurrentRegion.Offset(1, 0)
            For Each R In .Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Rows
            R.Range("H1") = KENSAKUTI
            Next R
         
        End With
     
        Worksheets("B").Range("A1").AutoFilter
         
        End If
         
         
    Next i
     
End Sub