excel - VBA 多个 For 循环 - 仅在前两次正常工作
问题描述
因此,我已经在这段小代码上工作了几天,并且遇到了一个我无法弄清楚的障碍。基本上,我有一个嵌套的 for 循环,它应该从一张表中获取值并将它们放入数据表中,以便可以保存这些值并随着时间的推移平均化。我希望单元格 M5 - M35 中的数据像这样放入数据表中:从左到右 A3 - AC200,但我也希望一旦 M5 - M35 范围用完值以及用户时停止循环下一步按下按钮来存储数据我希望循环从下一行开始。
因此,此电子表格适用于我的工作,适用于屠宰场产量测试,我希望它拥有的数据库存储在隐藏的工作表上,随着时间的推移将平均化,这样我或其他人就可以回来使用它并每隔几次更新一次月,以使平均值更准确,并更好地了解某些肉块的盈利能力。
一旦循环填写了所有有效的数据,我就尝试将循环值设置回它们的起始值,我认为我已经解决了这个问题,直到我多次运行测试并发现第一次和第二次按预期工作从第三个开始但是它不会在下一行开始循环它只是继续通过范围
Sub subData1()
Dim rng As Range
Dim rcell As Range
Dim ws As Worksheet
Dim Tws As Worksheet
Set Tws = Worksheets("Test")
Set ws = Worksheets("data")
For i = 3 To 200 'range is from cell A3 - A200
'if start cell already has value go down a row
If ws.Cells(i, 1).Value <> "" Then
i = i + 1
End If
'set the range for data sheet
Set rng = ws.Range(ws.Cells(i, 1), ws.Cells(i, 30).End(xlToRight))
For f = 5 To 35
For Each rcell In rng 'loop through each cell in data sheet range
If rcell.Value = "" Then 'if cell is blank input data
If Tws.Cells(f, 13).Value <> "" Then
'Check the selected Cell has a value
rcell.Value = Tws.Cells(f, 13).Value
f = f + 1
End If
Else
If f > 5 Then
MsgBox "Data Storage Updated", , "Data Storage"
f = 5
Exit Sub
'Else
'MsgBox "Value Must Be Greater Than Zero", , f
'f = 5
'Exit Sub
End If
End If
Next
Next
Next
End Sub
解决方案
它第一次和第二次工作的原因是因为这条线
If ws.Cells(i, 1).Value <> "" Then
i = i + 1
End If
但是,如果您注意到,它每次迭代只运行一次。这意味着在一张空白纸上,它将在第一次运行的第一次迭代中评估为 false 并继续,在第二次运行的第一次迭代中,它将评估为 true 并向下移动一行到第 4 行,但在第一次迭代中在第三次运行时,它还将评估 true 并向下移动到第 4 行,然后将数据从ws.Range(ws.Cells(i, 1), ws.Cells(i, 30).End(xlToRight))
您需要将您的更改If-End If
为一个函数,该函数将检索数据表 A 列中最后使用的行。此外,您可能不需要外部For-Next
循环,因为它会循环通过您的输出表,并且会M5:M35
为每一行输出相同的值。
如果我正确理解您的需求,我相信您可以利用它来完成您正在寻找的东西
Dim rng As Range
Dim ws As Worksheet
Dim Tws As Worksheet
Dim endRow As Long
Set Tws = Worksheets("Test")
Set ws = Worksheets("data")
endRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
Set rng = ws.Cells(endRow, 1)
For f = 5 To 35
If Tws.Cells(f, 13).Value <> "" Then
rng.Value = Tws.Cells(f, 13).Value
Set rng = rng.Offset(0, 1)
End If
Next
这样,每次连续单击按钮都会在新行中插入数据,循环Tws.Cells(f,13)
并通过增量设置范围将该值放置在最右边的列中。
推荐阅读
- python - 使用 PIL 包在图像上编写日语文本
- go - Kafka 偏移量有时会在消费者重启后重置
- visual-studio-code - Tensorboard 在浏览器和 vscode 中什么都不显示
- pandas - 这对行和列意味着什么?
- python - 在 Python 中的 Visual Stdio Code 中导入 ocrmypdf
- deep-learning - MASK-RCNN的自定义训练类怎么写?
- javascript - 新成员加入 wix 时自动分配角色
- android - Firebase 云消息传递返回无效注册
- javascript - 从 React Hooks 中的购物项目中删除项目
- android - 使用音频速度 Ffmpeg 更改音频音高