プロが教えるわが家の防犯対策術!

WorksheetFunctionの関数で「型が一致しません。」でエラーになります。
オートフィルタで抽出したデータから最も多いデータ名を取得したいです。

    Worksheets("シート名").Activate
    Range("A1").AutoFilter Field:=11, Criteria1:=条件1
    Range("A1").AutoFilter Field:=25, Criteria1:=条件2
    
    Dim Rw As Long
    Dim va As Variant
    If ActiveSheet.FilterMode Then
      Rw = Cells(Rows.Count, 1).End(xlUp).Row
      If Rw > 1 Then
        va = Application.WorksheetFunction.Index(Worksheets("シート名").Range("E2:E" & Rw).SpecialCells(xlCellTypeVisible), Application.WorksheetFunction.Mode(Application.WorksheetFunction.Match(Worksheets("シート名").Range("E2:E" & Rw).SpecialCells(xlCellTypeVisible), Worksheets("シート名").Range("E2:E" & Rw).SpecialCells(xlCellTypeVisible), 0)))
        
        
        Worksheets("シート名2").Cells(j, 3).Value = va
      End If
    End If

A 回答 (3件)

そうだね

    • good
    • 0
この回答へのお礼

続きです。↓


’フィルタ
Range("A1").AutoFilter Field:=1, Criteria1:=条件

If ActiveSheet.FilterMode Then
Rw = Cells(Rows.Count, 1).End(xlUp).Row
If Rw > 1 Then 'フィルタ抽出、該当なしの時はRwは1
  If Range(Range("A2"), Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeVisible).Count = 1 Then 'フィルタの件数が1件の時
 va = Worksheets("シート名").Range("B2:B" & Rw).SpecialCells(xlCellTypeVisible).Value
  Else
   va = Application.Index(Worksheets("シート名").Range("B2:B" & Rw).SpecialCells(xlCellTypeVisible), Application.Mode(Application.Match(Worksheets("シート名").Range("B2:B" & Rw).SpecialCells(xlCellTypeVisible), Worksheets("シート名").Range("B2:B" & Rw).SpecialCells(xlCellTypeVisible), 0)))
  End If
Else
  va = ""
End If
End If

Worksheets("結果").Cells(1, 1).Value = va

お礼日時:2018/07/19 22:46

No.1です。


自己解決、おめでとうございます。よろしければ、後学のためにコードを公開して頂けないでしょうか。
    • good
    • 0
この回答へのお礼

ママチャリ様、runix2007様 
返信大変遅れて申し訳ありませんでした。
初心者のプログラムなので、バグや不具合ございましたら、ご指摘頂ければ幸いです。
文字数の都合上、分割して表示させて頂きます。

【目的】シート名のA列でフィルタ抽出後、B列で最も多い名称を取得し、結果シートに出力

Dim Rw As Long
Dim va As Variant '文字列ならString型でも大丈夫です。

Worksheets("シート名").Activate

'フィルター解除
ActiveSheet.AutoFilterMode = False

お礼日時:2018/07/19 22:46

それぞれの関数をバラして、個々に実験してみて下さい。

フィルタの結果でセル範囲が分割された場合、エラーになってしまうと思います。
この結果から、WorksheetFunctionでの実装は現実的ではないような気がします。
個人的には、関数を使わずに自力でロジックを組むしかないかと・・・。
どうしても関数を使いたいのであれば、可視セルのみを作業列にコピーして、その作業列をターゲットに関数で集計するとかですかね。最終的にシート名2に結果を表示するようなので、コピー先をシート名2にして、そのシート上で関数で求めても良いかもしれません。
    • good
    • 1
この回答へのお礼

コメントありがとうございます。
WorksheetFunctionを消して、Application.Index・・・・に修正したらなぜか動きました。
あとは、フィルタの件数が1件のみの時は、その名称をそのまま取得するように追加しました。

お世話様でしたm(_ _)m

お礼日時:2018/07/15 20:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A