在VBA中玩“左”功能并注意到结果存储为字符串。例如:
Left(ws2.range("C2").value,3)
其中ws2是某些工作表,而c2是ws2中的某个单元格,包含1234.
左边的函数将返回“123”,但它将被格式化为字符串。当我尝试使用此字符串访问目录键时,这反过来会导致错误(这是不可能的)。我找到了一个解决方法:
dim tag as integer
tag = Left(ws2.range("C2").value,3)
这会导致值为123的标记存储为整数,然后我可以用它来访问目录。
但是我想知道是否可以修改“left”函数以将值作为整数返回?或任何其他格式(长,变体,范围,等等)
请注意,我已经找到了解决方案,但我认为它可能对其他人和/或有趣的讨论有所帮助。
答案 0 :(得分:0)
为此,最简单的方法是使用Cint()
功能。无需修改功能,您可以随时创建自己的功能。
答案 1 :(得分:0)
执行此操作的正确方法是使用Cint()
函数将表达式转换为整数。
有关详细信息,请参阅https://msdn.microsoft.com/en-us/library/fctcwhw9(v=vs.84).aspx
答案 2 :(得分:0)
以下是一些转换函数:
CInt() 'convert to integer
CLng() 'convert to long (long is preferred over integer since integer only has 2 bytes in VBA)
CDbl() 'convert to double
CDec() 'convert to decimal (variable has to be declared as variant)
答案 3 :(得分:0)
回答:)
cint(left(ws2.range("C2").value,3))
会“更好”,因为您仍然依靠VBA为您进行转换,如果您实际上需要使用长的可能,还要先检查输出。首先检查输入字符串是数字也是一个很好的检查。
答案 4 :(得分:0)
使用cint
function IntLeft(byval value as string, byval length as integer) as Integer
IntLeft=0 'default if non numeric
if isnumeric(value) then
IntLeft=cint(left(value,length))
end if
end function
使用int
function IntLeft(byval value as string, byval length as integer) as Integer
IntLeft=int(left(value,length)) 'int returns the first numbers as an int, 0 if no numbers
end function