2017-01-16 5 views
-1

私は質問の最初の部分をどのように他のワークシート上の値でフィルタリングするかを理解しました。しかし、私は多くのシートで、ブックを持っているが、2枚のシートは私が主に心配シートです に答え=他のシート上のセル値によるExcel VBAフィルタリングと式の使用

Sub Filtering_Average() 
' 
' Filtering Macro 


'Turn off filtering that has already been applied 
Worksheets("Sold Homes").Cells.AutoFilter 


Worksheets("Sold Homes").Range("A1").Select 

Dim zipcode As Range, bedroom As Range, soldprice As Range 
    Set zipcode = Worksheets("Enter Info").Range("B2") 
    Set bedroom = Worksheets("Enter Info").Range("K2") 
'defining "soldprice" as range that starts in R2 and continues until a blank cell, on sheet "Sold Homes" 
    Set soldprice = Worksheets("Sold Homes").Range("R2",  Range("R1").End(xlDown)) 

'Filtering data in Sold Homes sheet based on zip code and Bedroom count 
    ActiveSheet.Range("$A$1:$T$15001").AutoFilter Field:=1, Criteria1:=zipcode 
    ActiveSheet.Range("$A$1:$T$15001").AutoFilter Field:=10, Criteria1:=bedroom 

'go to the sheet "Enter Info" 
Worksheets("Enter Info").Select 
'Select cell "AM16" 
Range("am16").Select 
'Calculate the average of the cells defined by "soldprice" 
ActiveCell.Formula = "=Average(soldprice)" 


' 
End Sub 

質問1「平均」式の部分で間違ってやっているかを把握することはできません(「情報入力」)とシート(「売却済みの家」)

「売り家」シートには、自分の地域で売られている家のデータが入っていると思われるかもしれません。私は1万5000軒の家庭のデータを持っています。

最初私は郵便番号で15,000行をフィルタリングする必要があります。郵便番号はセルB2の「情報入力」シートで保持されます。郵便番号は「Sold Homes」シートのField = 1にあります。

第2私は今フィルタリングされたデータを家庭の寝室の数で洗練する必要があります。家にあるベッドルームの数は、セルK2のEnter Infoシートで保持されます。寝室の数は、 "Sold Homes"シートのフィールド= 10にあります。

私は、郵便番号で単純なフィルタを行い、指定された数のベッドルームでフィルタをかけるためにVBAマクロを書く方法を知っていますが、私はセルB2とK2に"情報入力"シート。

質問2

データは、私が今表示されている住宅の平均販売価格を見つける必要がある「販売住宅」シート上で濾過された後。各家の販売価格のデータは、「売り家」シートの列「R」にあります。これの最大の問題は、2つのフィルタリング条件が適用された後に返される家の数が異なることです。

例:郵便番号11111、寝室数= 3、帰宅50戸。したがって、私はZipvode 22222これらの50人の家庭

しかし

の平均をしたいと思い、寝室の数= 4、36家を返します。

私の平均的な機能のためにドルの金額(空白ではない)を持つ列Rにあるセルだけを選択する方法が必要です。私が列全体を選択した場合、フィルターは選択されたパラメーターにないセルを隠すのと同じようなことをするため、15,000のホームリストの各家の平均を取得します。

ありがとうございます。申し訳ありませんが、初めてコードを投稿しました。

+1

だからあなたの質問は何ですか?あなたはあなたのプログラムに悩まされていますか?あなたのコードを投稿し、その質問にもっと具体的にしてください。 – vacip

+0

私の問題は、フィルタリングされる郵便番号の値を保持するセルとして、別のシートのセルを参照するマクロを書き込む方法がわかりません。同じ問題は、ベッドルームの数の値を保持するセルに適用されます。私は私の仕事のコンピュータに戻って私のコードを掲載します。申し訳ありません。 – Snook55

答えて

0

これは実行する必要があります。

Option Explicit 

Sub Filtering_Average() 
    ' 
    ' Filtering Macro 
    ' 
    Dim zipcode As Range, bedroom As Range, soldprice As Range 

    With Worksheets("Enter Info") 
     Set zipcode = .Range("B2") 
     Set bedroom = .Range("K2") 
     Set soldprice = .Range("AM16") 
    End With 

    With Worksheets("Sold Homes") 
     With .Range("A1:T" & .Cells(.Rows.count, "R").End(xlUp).Row) 
      .AutoFilter 'Turn off any previous filtering 
      .AutoFilter Field:=1, Criteria1:=zipcode 
      .AutoFilter Field:=10, Criteria1:=bedroom 
      If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then soldprice.Value = WorksheetFunction.Average(.Resize(.Rows.count - 1, 1).Offset(1, 17).SpecialCells(xlCellTypeVisible)) 
     End With 
     .AutoFilterMode = False 
    End With 
End Sub 
+0

お世話になりました。私はまだこれを試してみる機会がありませんでした。仕事用のコンピュータに戻ったらすぐに動作するかどうかをお知らせします。なぜあなたは各ステップのスターでWith/Endを使用しましたか?私はこれを使用する必要はなかったし、論理を理解していない。 – Snook55

+0

「With-End With」ブロックを使用すると、単純なドット(。)を使用してオブジェクト参照(両方の場合でワークシートオブジェクト)を想定し、そのメンバ(プロパティおよびメソッド)にアクセスできます。これは、メモリアクセスとタイピング負担を軽減するためのものです。 – user3598756

+0

もう一度ありがとうございます。それは完璧な意味合いがあります。 If文のロジックについても説明できますか? – Snook55

関連する問題