过滤列中的值与循环?

我是VBA的新手,所以请和我一起裸照。 我正在尝试编程一个简单的循环来运行用户select的值,并过滤出一些数字显示和我想要在不同的列中的数字。 我在这个列中有10个随机数字:3 7 10 12 5 2 7 13 9 23.我基本上要忽略第一个值,检索下两个值,跳过第四个值,检索下面两个值,上。 所以我的输出将是:7 10 5 2 13 9我所有的是一个循环遍历列。 我想我将不得不使用mod()函数,但我不能sem得到它的权利。 我到目前为止所有的这个空循环:

Sub findValues() Do While Cells(x, 3).Value <> "" 'go through values in column 3 until empty cell is encountered 'skip first value 'retrieve next two values and put them in different column '... Loop End Sub 

下面是一个使用循环和步骤3的解决scheme。

这不是最快或者最优化的方式,但是这是很多方法中的一种,而且这种方法相当简单。 该示例假定数据在列A中,新列表将输出到列B.

既然你想跳过第一个值,我在A2开始循环,然后每个循环做一个步骤3(但复制2个元素,所以它总是会跳过第三个元素)。

 Sub test() Application.ScreenUpdating = False Dim i As Long, j As Long Dim lastRow As Long lastRow = Cells(Rows.Count, 1).End(xlUp).Row j = 1 For i = 2 To lastRow Step 3 Cells(j, 2).Value = Cells(i, 1).Value Cells(j + 1, 2).Value = Cells(i + 1, 1).Value j = j + 2 Next Application.ScreenUpdating = True End Sub 

请注意,使用单元格(行,列)对于循环比Range()表示法更好(也更快)。

[更新:配方解决scheme]

在D1中input这个值,然后向下复制2/3的C列长度= IF(MOD(ROW(),2)= 1,OFFSET($ C $ 1,INT(ROW()/ 2)* 3 + 1,0 ),OFFSET($ C $ 1,INT(ROW()/ 2)* 3-1,0))

[首字母]

我使用了一个variables数组,因为它比循环更高效(虽然稍微复杂一些)

总之你要找的是一个Mod函数,其中(Row-1)Mod 3 = 0应该被排除

即排除位置1,4,7等

这段代码将C列的输出转储到D,它将满足C中存在的所有值(注意,我已经通过从底部向上查找来设置c范围,所以空白不会通过代码)

 Sub GetValues() Dim rng1 As Range Dim lngCnt As Long Dim lngCnt2 As Long Dim X Dim Y Set rng1 = Range([c1], Cells(Rows.Count, "C").End(xlUp)) X = rng1 ReDim Y(1 To 2 / 3 * rng1.Cells.Count, 1 To 1) For lngCnt = 1 To UBound(X, 1) If (lngCnt - 1) Mod 3 <> 0 Then lngCnt2 = lngCnt2 + 1 Y(lngCnt2, 1) = X(lngCnt, 1) End If Next [d1].Resize(UBound(Y, 1), 1) = Y End Sub] 

在这里输入图像描述