Excel 用VBA构建求和

Excel 用VBA构建求和,excel,vba,Excel,Vba,目标:在特定列中建立一个总和 这一行中有特殊值:“开始”和“结束” 我想把A列的值从“Start”加到“EEnd” 范例 A B 1 Start 2 3 4 5 EEnd 1 Start 5 2 EEnd 第一个总数应该是

目标:在特定列中建立一个总和

这一行中有特殊值:“开始”和“结束”

我想把A列的值从“Start”加到“EEnd”

范例

A         B         
1         Start         
2                  
3                  
4                  
5         EEnd         
1         Start
5         
2         EEnd        
第一个总数应该是15,第二个总数应该是8

直到最后一天

结果应在“EEnd”旁边的C列中

我的尝试:

Sub Try()
 Dim rngTreffer As Range
 Dim lngC As String
 Dim strAdresse As String
 Dim alteAdresse As String

 With Worksheets("Tabelle2")

  Set sStart = .Columns(2).Find("Start", LookIn:=xlValues, lookat:=xlWhole)
  Set sEnd = .Columns(2).Find("EEnd", LookIn:=xlValues, lookat:=xlWhole)

  If Not sStart Is Nothing Then

     sStartAdress = sStart.Address
     sEndAdress = sEnd.Address

     Do

    Range("A1") = Application.Sum(Range("sStartAdress:sEndAdress"))

  'here i get an Error:Run-time error '1004' : Method 'Range' of object'_Global' failed

        Set sStart = .Columns(2).FindNext(sStart)
        Set sEnd = .Columns(2).FindNext(sEnd)

     Loop While sStart.Address <> sStartAdress
  End If

 End With

End Sub
subtry()
变暗rngTreffer As范围
作为字符串的Dim lngC
像绳子一样的暗跨
作为字符串的Dim alteadress
带工作表(“表2”)
设置sStart=.Columns(2).Find(“开始”,LookIn:=xlValues,lookat:=xlWhole)
设置sEnd=.Columns(2).Find(“EEnd”,LookIn:=xlValues,lookat:=xlWhole)
如果不是,那么sStart什么都不是
sstartAddress=ssstart.Address
SendAddress=发送地址
做
Range(“A1”)=Application.Sum(Range(“sstartdress:senddress”))

'这里我得到一个错误:运行时错误'1004':对象''u Global'的方法'Range'失败 Set sStart=.Columns(2).FindNext(sStart) 设置发送=.Columns(2).FindNext(发送) 在sStart.Address sstartAddress时循环 如果结束 以 端接头
您的范围是
“sstartdress:senddress”
,这就是错误所在。但是您需要一个范围
“A2:A6”

所以你必须移出“.”的变量。您可以得到类似于
范围(sstartAddress&“:”&sendAddress)

subtry()
变暗rngTreffer As范围
作为字符串的Dim lngC
像绳子一样的暗跨
作为字符串的Dim alteadress
带工作表(“表3”)
设置sStart=.Columns(2).Find(“开始”,LookIn:=xlValues,lookat:=xlWhole)
设置sEnd=.Columns(2).Find(“EEnd”,LookIn:=xlValues,lookat:=xlWhole)
如果不是,那么sStart什么都不是
sstartAddress=ssstart.Address
SendAddress=发送地址
做
sStartRow=ssstart.Row
sEndRow=sEnd.Row
单元格(sStartRow,3)=Application.Sum(范围(“A”&sStartRow&“:”和“A”&sEndRow))
Set sStart=.Columns(2).FindNext(sStart)
设置发送=.Columns(2).FindNext(发送)
在sStart.Address sstartAddress时循环
如果结束
以
端接头
这是第一个解决方案

有一个问题。。它永远不会停止循环。。。我认为有一个错误: 在sStart.Address sstartAddress时循环

但它起作用了。我会想办法的

@IQV


战争与死亡。(好的,谢谢)谢谢

这些结果会出现在哪里?在“EEnd”旁边的C列中,那么您尝试使用的VBA代码在哪里?或者,您是否希望有人在您这边不费吹灰之力的情况下为您编写代码?运行时错误“1004”:对象“u Global”的方法“Range”在单元格(1,3)=Application.Sum(Range(“sStart.Address:sEnd.Address”))处失败。谢谢IQV!做得好!Address总是==sstartAddress,因此永远不会为true,循环是无限的。但是您可以使用
alteAdresse
来提醒第一个结果,并将其用作取消标准。
Sub Try()
   Dim rngTreffer As Range
   Dim lngC As String
   Dim strAdresse As String
   Dim alteAdresse As String

   With Worksheets("Tabelle3")

      Set sStart = .Columns(2).Find("Start", LookIn:=xlValues, lookat:=xlWhole)
      Set sEnd = .Columns(2).Find("EEnd", LookIn:=xlValues, lookat:=xlWhole)

      If Not sStart Is Nothing Then

            sStartAdress = sStart.Address
            sEndAdress = sEnd.Address

         Do

            sStartRow = sStart.Row
            sEndRow = sEnd.Row

            Cells(sStartRow, 3) = Application.Sum(Range("A" & sStartRow & ":" & "A" & sEndRow))

            Set sStart = .Columns(2).FindNext(sStart)
            Set sEnd = .Columns(2).FindNext(sEnd)

         Loop While sStart.Address <> sStartAdress
      End If

End With

End Sub