在工作表中获取随机行,其中列是已知值

时间:2015-03-03 08:03:56

标签: excel vba

我有一个包含以下数据的Excel文件:

id line   | idsector |sector | isSectorPrior |etc...
1         | 1        | east  | no
2         | 1        | east  | no   
3         | 1        | east  | yes
4         | 1        | east  | yes
5         | 2        | west  | yes
6         | 2        | west  | yes    
7         | 2        | west  | no
8         | 2        | west  | yes  

我需要绘制一行isSectorPrior将是"是",然后,当我有行时,获取单元格1中的id line

所以在这里,它可以选择第3,4,5,6或8行。

我找到了很多或使用范围(an example)的样本,但他们可以返回例如第7行,即使它有一个" no"。这不应该发生。

如何指定,获取随机行,但仅限于iSectorPrio是的?

我目前的代码,不是因为我没有找到任何可以匹配我想要的东西:

'get a sheet to use and find a random row
Set tempSheet = ActiveWorkbook.Sheets(1).Select
'loop 50 times, to draw 50 different lines
    For i = 1 To 50
'todo : get randow row, where IsSelectPrio is yes
'then do whatever I want with it, like write copy it in another sheet or a csv
    Next i

这里(对我而言)的困难在于,没有特定的范围,我发现只使用该范围。考虑到第一行中的那些,它不是表格的一部分。

有办法做我想做的事吗?

2 个答案:

答案 0 :(得分:0)

至少有两种方法。

方法1:获取随机行号(例如,使用that other solution you link to中的代码),然后检查您是否有"是"在那一排。如果没有,那么得到一个新的随机数;重复,直到你得到肯定。 (警告:如果没有“是”,这将进入无限循环。)

方法2:首先列出具有“是”的行号;然后在其中随机挑选一个。

答案 1 :(得分:0)

如果你唯一的问题是找到合适的随机行范围,你可以这样做:

(如果您的工作表必须看起来与现在看起来相同,请复制它)

Dim ws As Worksheet
Dim sortRangeRows As Integer
Dim lastRow, lastColumn As Integer

'Get sortRange

lastRow = ThisWorkbook.Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
lastColumn = ThisWorkbook.Sheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Column

Set ws = ThisWorkbook.Sheets(1)
Set sortRangeRows = ws.Range(ws.Cells(1, 1), ws1.Cells(lastRow, lastColumn))

'Sort after isSectorPrior:
sortRangeRows.Sort Key1:=sortRangeRows(1, 4), Order1:=xlAscending, Header:=xlYes, Orientation:=xlSortColumns

'Find the last row with a "yes" in it (not entirely sure about this piece of code)

lastRowYes = ws1.Cells.Find("yes", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

现在,您的行范围为yes。 HTH