因此,我已经在这小段代码上工作了几天,遇到了我无法弄清的障碍。基本上,我有一个嵌套的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
答案 0 :(得分:0)
第一次和第二次工作的原因是因为这条线
If ws.Cells(i, 1).Value <> "" Then
i = i + 1
End If
但是,如果您会注意到,它每次迭代只运行一次。这意味着在空白表上,它将在第一次运行的第一次迭代中评估为false并继续,在第二次运行的第一次迭代中,它将评估为true并向下移动到第4行,但是在第一次迭代中在第三次运行中,它还将评估为真,并向下移动到第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)
并通过递增设置范围将该值放置在最右边的列中。