Vba 对于每个循环和偏移
我正在用VBA开发一个代码,在一个工作表中搜索一个范围以查找字符串的任务中遇到了问题;然后将该字符串记录在同一行中,但只留下一列,因此对于所有出现的情况,偏移量为-1;然后,它在另一个工作表中搜索每个记录的字符串,并对列右侧记录的字符串对应的整数求和Vba 对于每个循环和偏移,vba,excel,if-statement,foreach,Vba,Excel,If Statement,Foreach,我正在用VBA开发一个代码,在一个工作表中搜索一个范围以查找字符串的任务中遇到了问题;然后将该字符串记录在同一行中,但只留下一列,因此对于所有出现的情况,偏移量为-1;然后,它在另一个工作表中搜索每个记录的字符串,并对列右侧记录的字符串对应的整数求和 Option Explicit Option Base 1 Public Sub StoredProcTimes() Worksheets("Proc Time").Select Dim Table() As Variant, n
Option Explicit
Option Base 1
Public Sub StoredProcTimes()
Worksheets("Proc Time").Select
Dim Table() As Variant, nItem As Integer
Range("A2", Range("A2").End(xlDown).End(xlToRight)).Name = "ProcTime"
nItem = Range("ProcTime").Rows.Count
ReDim Table(nItem, 2)
End Sub
Public Sub DayLoad()
Range("G2", Range("G1").End(xlDown)).Name = "Dates"
Call StoredProcTimes
Dim reply As Date, cell As Range, sum As Integer
reply = InputBox("Specify Date", "Day Load", "9/1/2017")
For Each cell In Range("Dates")
If cell.Value = reply Then
cell.Offset(0, -1).Value
End If
Next
MsgBox "The load for " & reply & " is " & sum & " minutes"
End Sub
首先,您的line cell.Offset0,-1.Value没有任何作用。您没有将其设置为等于一个值。您应该在这里收到一个错误
我个人不喜欢使用偏移量,但使用它并不一定有什么大不了的。在我的示例中,我向您展示了一种我认为有利的替代方法
对于您要查找的特定单元格,不要在范围内循环,这需要处理器时间。使用Range.Find
请在问题中包含您的代码。寻求调试帮助的问题此代码为什么不起作用?必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:这听起来像是可以用SUMIFS或SUMPRODCT函数完成的,这必须是VBA吗?现在,请解释错误的性质以及在哪一行得到错误。感谢您提供有关cell.offset的建议,现在我有了所需的值,我对如何在另一个工作表中搜索它们感到困惑。谢谢您的反馈;复制完单元格剩余的值后,是否将其存储为变量,并在另一张表中搜索该值?@WillParker它已存储为变量sReply。如果您还需要搜索其他工作表,可以使用该选项。sReply不是对输入框的响应,即日期吗?sReply=InputBoxSpecify Date,Day Load,9/1/2017在最后一行中使用未声明的变量reply and sum。@这是对输入框的响应,也是您询问的值。如果值的变量已经存在,为什么还要创建另一个变量?仅仅因为您只使用了一次变量,并不妨碍您再次使用它谢谢你,费尔南多。
Public Sub DayLoad()
Dim ws As Worksheet, rngG As Range
' You may need to change the index, or use "SheetName"
Set ws = ThisWorkbook.Worksheets(1)
Set rngG = ws.UsedRange.Columns("G")
'Call keyword is unnecessary
Call StoredProcTimes
Dim sReply As String, myCell As Range
sReply = InputBox("Specify Date", "Day Load", "9/1/2017")
If Not IsDate(sReply) Then Exit Sub
' Search for your date
Set myCell = rngG.Find(sReply)
' If date was found, then copy the date to the left 1 col
If Not myCell Is Nothing Then
With myCell
ws.Cells(.Row, .Column - 1) = .Value
End With
End If
End Sub