VBA:循环不包括最后2行

VBA:循环不包括最后2行,vba,excel,Vba,Excel,问题: 我有一个代码,它做了它应该做的一切,只是它没有“完成”它的工作。每当我运行这段代码时,似乎都不包括最后两行 代码: 子列表() 将sStDev标注为工作表:设置sStDev=工作表(“StDev”) 将sResult设置为工作表:设置sResult=工作表(“大”) 作为工作表的尺寸平方:设置平方=工作表(“五分位数”) 将sReturn设置为工作表:设置sReturn=工作表(“返回”) Dim j尽可能长 Const colDate的长度=1 Const rowStDevFirst的

问题: 我有一个代码,它做了它应该做的一切,只是它没有“完成”它的工作。每当我运行这段代码时,似乎都不包括最后两行

代码:

子列表()
将sStDev标注为工作表:设置sStDev=工作表(“StDev”)
将sResult设置为工作表:设置sResult=工作表(“大”)
作为工作表的尺寸平方:设置平方=工作表(“五分位数”)
将sReturn设置为工作表:设置sReturn=工作表(“返回”)
Dim j尽可能长
Const colDate的长度=1
Const rowStDevFirst的长度=2
常量rowResultFirst的长度=2
最后一排一样长
LastRow=sReturn.Cells(Rows.Count,“A”).End(xlUp).Row
将rowResult设置为长:rowResult=rowResultFirst
j=2
将i调整为长:对于i=rowStDevFirst到LastRow
将colResult设置为长:colResult=1
sResult.Cells(rowResult,colResult).Value=sStDev.Cells(i,colDate).Value
colResult=colResult+1
对于j=1到792

如果sStDev.Cells(i,j).Value>=sQuart.Range(“F2”).Offset(i,0)和sStDev.Cells(i,j).Value正如我看到的那样,您试图用返回表中的这些值填充大表,其中StDev中的对应值在每行五分位数的F和G值之间

没关系,但是你不应该用i来抵消五分位数中的值,因为即使是第二行,你也会得到五分位数!F4和G4,而不是F2和G2

因此,要修复它,您应该将
sQuart.Range(“F2”).Offset(i,0)
更改为
sQuart.Range(“F2”).Offset(i-2,0)


对于G列也是一样:
Offset(i,0)
应该是
Offset(i-2,0)
,因为我看到您试图用返回表中的这些值填充大表,其中StDev中的对应值在每行五分位数的F和G值之间

没关系,但是你不应该用i来抵消五分位数中的值,因为即使是第二行,你也会得到五分位数!F4和G4,而不是F2和G2

因此,要修复它,您应该将
sQuart.Range(“F2”).Offset(i,0)
更改为
sQuart.Range(“F2”).Offset(i-2,0)


列G也是一样:
Offset(i,0)
应该是
Offset(i-2,0)

在我的代码中,“i”表示通过行的循环(第一个循环),“j”表示通过列的循环(第二个循环)。因此,它将遍历一列中的所有行,然后移动到下一列,依此类推。这可能是由于Excel工作表的内容导致If语句跳过所致。没有excel表格,我们无法确定。在代码和调试中设置断点。列
A
的最后两行中是否有内容?您应该添加示例数据,预期结果和实际结果。您的代码很难阅读,我甚至不确定在到处重复使用
Sub
名称时查找的是哪个模块,但如果它在
listlagle
模块中,循环将正确运行,并运行到行
216
在我的代码中,“I”是指通过行的循环(第一个循环)“j”是指通过列的循环(第二个循环)。因此,它将遍历一列中的所有行,然后移动到下一列,依此类推。这可能是由于Excel工作表的内容导致If语句跳过所致。没有excel表格,我们无法确定。在代码和调试中设置断点。列
A
的最后两行中是否有内容?您应该添加示例数据,预期结果和实际结果。您的代码很难阅读,我甚至不确定在到处重复使用
Sub
名称时查找的是哪个模块,但如果它在
listlagle
模块中,循环将正确运行并运行到第216行

Sub List()

Dim sStDev As Worksheet: Set sStDev = Sheets("StDev")
Dim sResult As Worksheet: Set sResult = Sheets("Large")
Dim sQuart As Worksheet: Set sQuart = Sheets("Quintile")
Dim sReturn As Worksheet: Set sReturn = Sheets("Return")

Dim j As Long

Const colDate As Long = 1
Const rowStDevFirst As Long = 2
Const rowResultFirst As Long = 2
Dim LastRow As Long
LastRow = sReturn.Cells(Rows.Count, "A").End(xlUp).Row
Dim rowResult As Long: rowResult = rowResultFirst

j = 2

Dim i As Long: For i = rowStDevFirst To LastRow

Dim colResult As Long: colResult = 1
sResult.Cells(rowResult, colResult).Value = sStDev.Cells(i, colDate).Value
colResult = colResult + 1

For j = 1 To 792
If sStDev.Cells(i, j).Value >= sQuart.Range("F2").Offset(i, 0) And sStDev.Cells(i, j).Value <= sQuart.Range("G2").Offset(i, 0) Then
    sResult.Cells(rowResult, colResult).Value = sReturn.Cells(i, j).Value
colResult = colResult + 1

End If


Next j

rowResult = rowResult + 1

Next i

MsgBox "Listed"


End Sub