我有一个包含以下数据的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
这里(对我而言)的困难在于,没有特定的范围,我发现只使用该范围。考虑到第一行中的那些,它不是表格的一部分。
有办法做我想做的事吗?
答案 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