Excel VBA 方法失败 运行 和 returns 没有错误
Excel VBA method fails to run and returns no error
我打算用我的代码搜索 excel 电子表格,其中包含数据和 return p 值低于 0.05 的整行。但是,我没有收到任何语法错误,而且代码看起来是正确的。我正在处理一个大数据集,大约 780000 行条目,所以我不知道这是否是导致错误的原因。代码应该通读,如果满足上述条件,return 整行,否则应该忽略该行。在这里,代码 return 没有任何内容,也没有提供任何错误。
Sub GrabRelaventData()
Dim i As Long, j As Long
Dim s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("RNASeq EH developmental 10 hits")
Set s2 = Sheets("pVal checks")
For i = 1 To 787731
If s1.Cells(i, 10) > 0.05 And s1.Cells(i, 16) > 0.05 And s1.Cells(i, 22) > 0.05 And s1.Cells(i, 26) > 0.05 Then
Exit For
Else
For j = 1 To 39
s2.Cells(i, j).Value = s1.Cells(i, j).Value
Next j
End If
Next i
End Sub
根据你的所作所为,我认为你颠覆了逻辑。将您的 IF...THEN 设置为您在值 less 小于 .05 时要执行的操作。如果该值更大,您将进入 NEXT 并循环。
当你使用 EXIT FOR 时,它不会进入下一个循环,它认为你已经完成了。某些语言 (VB.net) 有一个 Continue For 语句,它会引导您完成循环。假设你的其余代码是正确的,试试这个:
Sub GrabRelaventData()
Dim i As Long, j As Long
Dim s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("RNASeq EH developmental 10 hits")
Set s2 = Sheets("pVal checks")
For i = 1 To 787731
'Flip your signs - you want to do something when the p-value is LESS THAN,
'not avoid doing something when it is greater than.
If s1.Cells(i, 10) < 0.05 And s1.Cells(i, 16) < 0.05 And s1.Cells(i, 22) < 0.05 And s1.Cells(i, 26) < 0.05 Then
'"Exit For" will take you to the next i - you want use the j loop if the condition is true.
' Else - No need for the else this way.
For j = 1 To 39
s2.Cells(i, j).Value = s1.Cells(i, j).Value
Next j
End If
Next i
End Sub
这假设您希望所有 p 值都小于 .05。如果您想在任何 p 值 < .05 时采取行动,您可以使用 OR 而不是 AND。
祝你好运!
我打算用我的代码搜索 excel 电子表格,其中包含数据和 return p 值低于 0.05 的整行。但是,我没有收到任何语法错误,而且代码看起来是正确的。我正在处理一个大数据集,大约 780000 行条目,所以我不知道这是否是导致错误的原因。代码应该通读,如果满足上述条件,return 整行,否则应该忽略该行。在这里,代码 return 没有任何内容,也没有提供任何错误。
Sub GrabRelaventData()
Dim i As Long, j As Long
Dim s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("RNASeq EH developmental 10 hits")
Set s2 = Sheets("pVal checks")
For i = 1 To 787731
If s1.Cells(i, 10) > 0.05 And s1.Cells(i, 16) > 0.05 And s1.Cells(i, 22) > 0.05 And s1.Cells(i, 26) > 0.05 Then
Exit For
Else
For j = 1 To 39
s2.Cells(i, j).Value = s1.Cells(i, j).Value
Next j
End If
Next i
End Sub
根据你的所作所为,我认为你颠覆了逻辑。将您的 IF...THEN 设置为您在值 less 小于 .05 时要执行的操作。如果该值更大,您将进入 NEXT 并循环。
当你使用 EXIT FOR 时,它不会进入下一个循环,它认为你已经完成了。某些语言 (VB.net) 有一个 Continue For 语句,它会引导您完成循环。假设你的其余代码是正确的,试试这个:
Sub GrabRelaventData()
Dim i As Long, j As Long
Dim s1 As Worksheet, s2 As Worksheet
Set s1 = Sheets("RNASeq EH developmental 10 hits")
Set s2 = Sheets("pVal checks")
For i = 1 To 787731
'Flip your signs - you want to do something when the p-value is LESS THAN,
'not avoid doing something when it is greater than.
If s1.Cells(i, 10) < 0.05 And s1.Cells(i, 16) < 0.05 And s1.Cells(i, 22) < 0.05 And s1.Cells(i, 26) < 0.05 Then
'"Exit For" will take you to the next i - you want use the j loop if the condition is true.
' Else - No need for the else this way.
For j = 1 To 39
s2.Cells(i, j).Value = s1.Cells(i, j).Value
Next j
End If
Next i
End Sub
这假设您希望所有 p 值都小于 .05。如果您想在任何 p 值 < .05 时采取行动,您可以使用 OR 而不是 AND。 祝你好运!