【发布时间】:2015-09-05 17:18:39
【问题描述】:
我有一个有效的代码,但我想向它添加更多功能。它目前正在做它应该做的事情,并加快了一些进程,但现在我认为它可以加快速度。我正在使用我在此处标记为已回答的解决方案:Using VBA to get a threshold value
但是
我有这个代码:
Sub OutputEnergyToAllSheets()
Dim w
For Each w In ThisWorkbook.Worksheets
If Not InStr(w.Name, "Total") > 0 And Not InStr(w.Name, "eV") Then
OutputEnergyToSheet w.Name
End If
Next w
End Sub
Sub OutputEnergyToSheet(TheSheet As String)
'y = Columns to check: 2-25
'x = Rows to check: 2-152
'z = check the next 4 cells
Dim x, y, z, check
'Clear the range where we store the #N/A or Energy Outputs
With Sheets(TheSheet)
.Range("B153:Y153") = vbNullString
For y = 2 To 25
For x = 2 To 152
If .Cells(x, y) > .Range("Z2") Then 'If value is greater than Z2
check = True 'Let's check the next 4
For z = 1 To 30 'If any of them fail
If .Cells(x + z, y) < .Range("Z2") Then
check = False 'The check fails
Exit For
End If
Next z
If check = True Then 'If the check doesn't fail
.Cells(153, y) = Int(.Cells(x, 1)) 'Set cell 153 to the energy level
Exit For
End If
End If
Next x 'If no energy level was set - #N/A
If .Cells(153, y) = vbNullString Then .Cells(153, y) = ""
Next y
End With
End Sub
但是那一行写着:
for z = 1 to 30
我必须以 1 为增量从 0 更改为 100。它将这些值输出到所有工作表上应有的位置,然后我转到 sub 并增加值并重复。这些值在每个工作表中输出,除了第 153 行中的一些值。有没有办法让 0 在第 153 行中,1 在 154 中,2 在 155 中,等等直到 100?我知道这是否不可能,但这将花费我大量的时间,因为我必须为许多工作簿经历这个过程。如果可以做到这一点,它将为我节省几个单调的忙碌工作时间。无论如何,感谢您的阅读。
【问题讨论】:
-
您所追求的逻辑并不完全清楚。您是否尝试将
0,1,2,...输出到行153,154,155,...?如果是这样,您可以使用row number - 153进行翻译。如果这不是目标,请在您的问题中添加其他详细信息(可能还有图片)。如果不是图片,那么改进输入/输出关系会有所帮助。 -
@Byron 这就是目标。我想像我一样遍历所有工作表,从 0 开始,将结果放在每个工作表的第 153 行。然后我想用 z=1 到 1 循环并将这些结果粘贴到每个工作表的第 154 行。该代码有效,我只需要使用另一个循环对其进行编辑,我认为从第 153 行开始并喜欢第 252 行或其他内容
-
@Bryon 你知道这是否可以做到吗?我只问是因为如果没有,我应该继续开始单调的忙碌工作。
-
几乎可以做任何事情,但仍不清楚您到底想做什么。您需要提供图片或一些示例输出,或者更清晰地描述您期望发生的事情。
-
@Byron 我想我不明白如何描述它。目前,代码循环遍历所有工作表并在第 153 行输出结果。我每次都在更改 z 循环并运行。我会这样做 100 次以在 z 循环中从 0 变为 99。每次将结果发布在每个工作表的第 153 行中。我不想手动进行每个增量。我希望循环首先查看从 1 到 0 的 z,然后将它们发布到第 153 行,然后在 z 从 1 到 1 循环,然后将它们发布到第 154 行。对不起,我只想将每个结果发布在连续,而不是每次都覆盖同一行。