簡體   English   中英

僅引用過濾表中的可見行 - Excel VBA

[英]Referencing only visible rows in a filtered table - Excel VBA

我正在做一個選擇電影的項目。 它包含一個電影表,其中包含電影名稱和其他數據的列,例如 IMDB 評級等。我編寫了一個宏,它根據用戶輸入(例如,最低 IMDB 評級)過濾表,現在我會喜歡 select 從過濾表中隨機出片。

我可以計算出可見電影的數量:

FilmCount = FilmsSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1

並由此生成一個隨機數:

Randomize
FilmNumber = Int(FilmCount * Rnd) + 1

但是,從過濾表中選擇隨機電影比較困難; 在未過濾的表中,我可以簡單地將隨機數用於 select 電影:

Film = FilmsSheet.Cells(FilmNumber + 1, 1)

但在過濾表中,由於缺少過濾行,行不會按數字上升,例如 1,3,4,7...

怎么用隨機數到select過濾表中對應的片子? 謝謝。

也許是這樣的?

假設 Film Title(標題列)為單元格 C1,並且數據已被過濾

Sub test()
Set rngFilmTitle = Range("C2", Range("C" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible)
X = Application.Transpose(rngFilmTitle)
Do
rndNum = Int(Rnd() * UBound(X))
Loop
End Sub

例如,如果總電影片名(在過濾數據中)是 4 部電影片名,
如果您在循環中一次又一次地 F8,則 rndNum 結果將給出 0 到 3 之間的隨機數(參見 VBA 編輯器中的 Locals Window)。

如果你已經確定了,那么你可以刪除循環,
然后有

rndNum = Int(Rnd() * UBound(X))
FilmTitle = X(rndNum) '---> this will give a random film title.

那就是如果我沒有弄錯你的意思,因為你的標題問題似乎你想從隱藏的行(未過濾的行)中隨機獲取,但在你的問題正文中,你似乎想要隨機獲取從可見行(過濾行)?

使用@BigBen 的評論建議,我遍歷了表中的所有行,如果它們可見,則將電影名稱添加到數組中,從中可以選擇隨機電影:

'=====Select random film from visible=====
Dim FilmCount As Integer: FilmCount = FilmsSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1
Dim Films() As Variant
ReDim Films(1 To FilmCount)

x = 1
Dim r As Integer: r = 2
Do Until FilmsSheet.Cells(r, 1) = 0
    If Not FilmsSheet.rows(r).EntireRow.Hidden Then
        Films(x) = FilmsSheet.Cells(r, 1)
        x = x + 1
    End If
    r = r + 1
Loop

Randomize
Dim FilmNumber As Integer: FilmNumber = Int(FilmCount * Rnd) + 1

MsgBox (Films(FilmNumber))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM