1

以下のような行列があるとします。

     EMPID    Type Of employment
   #1 10            "T"
   #2 11            "P"
   #3 20            "P"
   #4 40            "T"
   #5 50            "T"
   #6 15            "P"
   #7 19            "T"

フィルタリング後

    EMPID    Type Of employment
  #2 11            "P"
  #3 20            "P"
  #6 15            "P"

vbscriptでそれを行う方法を教えてもらえますか?VBAの構文は知っていますが、VBSciptではフォーマット方法がわかりませんか?

そして、フィルタリングした後、列#1でCountAを使用する場合、行番号を次のように取得する必要があります37

アップデート

  objSheet2.Range("B1").AutoFilter 2, "Parent",,,False

自動フィルタリングを削除するには、コードを使用しまし objSheet2.Rows("1:1").Select.AutoFilter たが、エラーが発生しますUnable to get the select property of the Range Class

修正済み objSheet2.Range("B1").AutoFilter 2, "Parent",,,True objSheet2.AutoFilterMode = False

クエリ:行がフィルタリングされたら、それらをループするときに、フィルタリングされたデータ行の実際の行番号をどのように認識しますか?

答え

    For rowIndex=2 To objExcel1.Application.WorksheetFunction.CountA(ob1.Columns(1))
    If objSheet2.Rows(rowIndex).Hidden Then
        ' do nothing - row is filtered out
    Else
        MsgBox(rowIndex)
    End If
    Next 

このようにして、フィルターされた行の実際の行番号を取得しました。あなたたちが投稿するより良いアイデアがあればアドバイスしてください:-)

スクリーンショット

ここに画像の説明を入力してください

ありがとう

4

1 に答える 1

2

私はこれがあなたがあなたがもう少し速くしたいと思うようになると思います。

objSheet2.Range("B1").AutoFilter 2, "Parent",,,True 

Dim rngFilter as Range
Set rngFilter = objXL.Application.Intersect(objSheet2.UsedRange,objSheet2.UsedRange.Offset(1),objSheet2.Columns(1)).SpecialCells(xlCellTypeVisible)

msgbox "Filtered range has " & rngFilter.Rows.Count & " rows."
'do with the range as you wish.

Dim cel as objXL.Range 'or just leave this off
For each cel in rngFilter
   msgbox cel.row
Next

objSheet2.AutoFilterMode = False

このようにして、フィルタリングされた後に表示されるセルのみを選択します。次に、その範囲を配列にロードするか、適切と思われるようにループすることができます。

于 2012-12-19T16:35:06.443 に答える