自定义功能与特定文字
问题描述:
值求和行我要总结大小可变的一行值:从5列到最后填充的单元行6自定义功能与特定文字
有问题的行必须包含“My text
”在栏B
。
这是我使用的代码:这是返回#VALUE!
我
Function cenas()
Application.Volatile
Dim celula
Dim ultAno As Integer
Dim intervalo As Range
Dim separador As Worksheet
Set separador = Sheets("Sheet1")
ultAno = separador.Cells(6, 5).End(xlToRight).Column
For i = 1 To 50
celula = separador.Cells(i, 2).Value
If celula = "My text" Then
Set intervalo = Sheets(separador).Range(Sheets(separador).Cells(i, 5), Sheets(separador).Cells(i, ultAno))
cenas = Application.Sum(intervalo)
End If
Next i
End Function
尝试了与变量声明相关的不同方法,但找不到解决方案。
答
的一个问题是此行
Set intervalo = Sheets(separador).Range(Sheets(separador).Cells(i, 5), Sheets(separador).Cells(i, ultAno))
没有必要使用Sheets()
。 separador
设置为表单。
Function cenas()
Application.Volatile
Dim celula
Dim ultAno As Integer
Dim intervalo As Range
Dim separador As Worksheet
Set separador = Sheets("Sheet1")
ultAno = separador.Cells(6, 5).End(xlToRight).Column
For i = 1 To 50
celula = separador.Cells(i, 2).value
If celula = "My text" Then
Set intervalo = separador.Range(separador.Cells(i, 4), separador.Cells(i, ultAno))
cenas = Application.sum(intervalo)
End If
Next i
End Function
如果你要使用的功能,为什么不让它多一点多才多艺:
Function cenas(lkpStr As String)
Application.Volatile
Dim celula
Dim ultAno As Integer
Dim intervalo As Range
Dim separador As Worksheet
Set separador = Sheets("Sheet3")
ultAno = separador.Cells(6, 5).End(xlToRight).Column
For i = 7 To separador.Cell(7,2).End(xlDown).Row
If separador.Cells(i, 2).value = lkpStr Then
Set intervalo = separador.Range(separador.Cells(i, 5), separador.Cells(i, ultAno))
cenas = Application.sum(intervalo)
End If
Next i
End Function
Sub getsum()
Dim t
t = cenas("My Text")
Debug.Print t
End Sub
这将允许您指定要搜索的文本。并返回组中最后一个的总和。您可以在工作表或vba代码中将其称为UDF。
注意:如果B列中有多个“我的文本”,它将只返回其中包含“我的文本”的最后一行。
+0
是的,这当然是有道理的。 –
+0
我正在想这个。向函数传递参数会帮助我在其他情况下重用它。 –
答
看看这样的事情。
Private Sub CommandButton34_Click()
Dim ws1 As Excel.Worksheet
Dim lRow As Long
Dim lLastCol As Long
Set ws1 = ActiveWorkbook.Sheets("Sheet1")
lRow = 1
ws1.Activate
'Loop through the rows
Do While lRow <= ws1.UsedRange.Rows.count
If ws1.Range("B" & lRow).Value = "My text" Then
'Get the last col used in that row
lLastCol = ws1.Cells(lRow, ws1.Columns.count).End(xlToLeft).Column
'Write the sum to the column after the last used column
ws1.Cells(lRow, lLastCol + 1).Value = "=sum(D" & lRow & ":" & Col_Letter(lLastCol) & lRow & ")"
End If
lRow = lRow + 1
Loop
End Sub
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
为什么你不包括D8的总和? – MatthewD
总和应该写在哪里? – MatthewD
结果应该写入任何单元格(超出该表格) –