Vba 如何使用带范围的字符串格式的单元格地址?
我想获取包含Vba 如何使用带范围的字符串格式的单元格地址?,vba,excel,Vba,Excel,我想获取包含Nikunj的单元格和包含Deepak的单元格之间的非空单元格计数 子计数() 将txt1设置为字符串 将txt2设置为字符串 txt1=“Nikunj” txt2=“Deepak” 带工作表(1).范围(“b1:b20”) 设置a=.Find(txt1,LookIn:=xlValues) 集合b=.Find(txt2,LookIn:=xlValues) 以 arra=拆分(a.地址,“$”) arrb=拆分(b.地址,“$”) newa=Join(arra,“”) newb=连接
Nikunj
的单元格和包含Deepak
的单元格之间的非空单元格计数子计数()
将txt1设置为字符串
将txt2设置为字符串
txt1=“Nikunj”
txt2=“Deepak”
带工作表(1).范围(“b1:b20”)
设置a=.Find(txt1,LookIn:=xlValues)
集合b=.Find(txt2,LookIn:=xlValues)
以
arra=拆分(a.地址,“$”)
arrb=拆分(b.地址,“$”)
newa=Join(arra,“”)
newb=连接(arrb,“”)
MsgBox工作表function.CountA(范围(“newa:newb”))
端接头
我有一个xlA1格式的单元格地址,作为newa和newb中的字符串,我无法将其与工作表function.CountA一起使用
如何将单元格地址从字符串转换为可接受为范围的格式?您可以将range(a,b)
传递到CountA
,而无需解析单元格地址:
Option Explicit
Sub Count()
Dim txt1 As String
Dim txt2 As String
Dim a As Range
Dim b As Range
txt1 = "Nikunj"
txt2 = "Deepak"
With Worksheets(1).Range("b1:b20")
Set a = .Find(txt1, LookIn:=xlValues)
Set b = .Find(txt2, LookIn:=xlValues)
End With
MsgBox WorksheetFunction.CountA(Range(a, b))
End Sub
您可以直接使用该地址:
Sub Count()
Dim txt1 As String
Dim txt2 As String
Dim a As Range, b As Range
txt1 = "Nikunj"
txt2 = "Deepak"
With Worksheets(1).Range("b1:b20")
Set a = .Find(txt1, LookIn:=xlValues)
Set b = .Find(txt2, LookIn:=xlValues)
End With
MsgBox WorksheetFunction.CountA(Range(a.Address & ":" & b.Address))
End Sub
您眼前的问题是“newa:newb”
是一个字符串,实际上包含字符“newa:newb”,而不是变量newa
和newb
中存储的内容。要串联字符串变量,请使用和运算符:
newa & ":" & newb
然而,正如罗宾·麦肯齐(Robin Mackenzie)所指出的那样,这是没有必要的
MsgBox WorksheetFunction.CountA(Range(a, b))
我们也应该这样做
顺便说一句,replace
函数是从字符串中删除字符的更简单的方法
newa = Replace(a.Address, "$", "")
编辑:建议您使用选项Explicit
未请求,但使用不带VBA的选项:
=COUNTA(INDIRECT("B"&MATCH("Nikunj",B:B,0)&":B"&MATCH("Deepak",B:B,0)))
这比我的答案要好。谢谢@Robin Mackenzie。这对我来说非常有效。谢谢您的回答@Gary的学生,但在实际问题中,我无法硬编码地址。在我的代码中,地址是从FIND()派生出来的,但是Robin的方法是最好的!谢谢@arcadeprecinct。您建议的两种解决方案都非常有用。谢谢@pnuts。这可能对我的其他应用有所帮助。