VBA 大于函数不工作
VBA Greater Than Function Not Working
我在尝试比较可以是字母数字、仅数字或仅字母的值时遇到问题。
代码最初可以很好地比较同一 100s 组(IE 1-99 与字母组件)中的任何内容。但是,当我将 100+ 添加到其中时,它出现故障。
代码的当前部分为:
For j = 1 To thislength
If lennew < j Then
enteredval = Left("100A", lennew)
ElseIf lennew >= j Then
enteredval = Left("100A", j)
End If
If lenold < j Then
cellval = Left("67", lenold)
ElseIf lenold >= j Then
cellval = Left("67", j)
End If
'issue occurs here
If enteredval >= cellval Then
newrow = newrow+1
End If
Next j
问题出现在最后一个 if
语句中。
当循环通过 100 大于 67 但仍然跳过时。我试图将它们都声明为字符串(在这部分代码之上)以查看是否有帮助,但没有。
我想要完成的是对一堆行进行排序并找到它应该去的地方。即 100A 应该在 100 和 100B 之间。
对不起 lennew=len("100A")
和 lennold=len("67")
。并且 thislength=4
或两个长度中较大的一个。
问题是您正试图通过攻击特定值来解决比较问题,这将是一个需要维护的问题。我会通过创建一个提供两个值的函数来使问题更通用根据您的规则是 "after" 第二个。
然后您可以重组您的代码以消除特定的硬编码前缀测试,然后直接调用比较函数,例如(这是完全未经测试的,off-the-cuff,我的 VBA 是 VERRRRRY陈旧 :) 但想法是存在的:(它还假设存在一个名为 StripPrefix 的简单字符串函数,它只接受一个字符串并去掉任何前导数字,我怀疑你自己可以很容易地旋转起来)
Function CompareCell(Cell1 as String, Cell2 as String) as Integer
Dim result as integer
Dim suffix1 as string
Dim suffix2 as string
if val(cell1)< val(cell2) Then
result = -1
else if val(cell1)>val(cell2) then
result = 1
else if val(cell1)=val(cell2) then
if len(cell1)=len(cell2) then
result =0
else
' write code to strip leading numeric prefixes
' You must supply StripPrefix, but it's pretty simple
' I just omitted it here for clarity
suffix1=StripPrefix(cell1) ' eg returns "ABC" for "1000ABC"
suffix2=StripPrefix(cell2)
if suffix1 < suffix2 then
result = -1
else if suffix1 > suffix2 then
result = 1
else
result = 0
end if
end if
return result
end function
像这样的函数允许您使用 任何 两个单元格引用并直接比较它们以做出您需要的任何决定:
if CompareCell(enteredval,newval)>=0 then
newrow=newrow+1
end if
我在尝试比较可以是字母数字、仅数字或仅字母的值时遇到问题。
代码最初可以很好地比较同一 100s 组(IE 1-99 与字母组件)中的任何内容。但是,当我将 100+ 添加到其中时,它出现故障。
代码的当前部分为:
For j = 1 To thislength
If lennew < j Then
enteredval = Left("100A", lennew)
ElseIf lennew >= j Then
enteredval = Left("100A", j)
End If
If lenold < j Then
cellval = Left("67", lenold)
ElseIf lenold >= j Then
cellval = Left("67", j)
End If
'issue occurs here
If enteredval >= cellval Then
newrow = newrow+1
End If
Next j
问题出现在最后一个 if
语句中。
当循环通过 100 大于 67 但仍然跳过时。我试图将它们都声明为字符串(在这部分代码之上)以查看是否有帮助,但没有。
我想要完成的是对一堆行进行排序并找到它应该去的地方。即 100A 应该在 100 和 100B 之间。
对不起 lennew=len("100A")
和 lennold=len("67")
。并且 thislength=4
或两个长度中较大的一个。
问题是您正试图通过攻击特定值来解决比较问题,这将是一个需要维护的问题。我会通过创建一个提供两个值的函数来使问题更通用根据您的规则是 "after" 第二个。
然后您可以重组您的代码以消除特定的硬编码前缀测试,然后直接调用比较函数,例如(这是完全未经测试的,off-the-cuff,我的 VBA 是 VERRRRRY陈旧 :) 但想法是存在的:(它还假设存在一个名为 StripPrefix 的简单字符串函数,它只接受一个字符串并去掉任何前导数字,我怀疑你自己可以很容易地旋转起来)
Function CompareCell(Cell1 as String, Cell2 as String) as Integer
Dim result as integer
Dim suffix1 as string
Dim suffix2 as string
if val(cell1)< val(cell2) Then
result = -1
else if val(cell1)>val(cell2) then
result = 1
else if val(cell1)=val(cell2) then
if len(cell1)=len(cell2) then
result =0
else
' write code to strip leading numeric prefixes
' You must supply StripPrefix, but it's pretty simple
' I just omitted it here for clarity
suffix1=StripPrefix(cell1) ' eg returns "ABC" for "1000ABC"
suffix2=StripPrefix(cell2)
if suffix1 < suffix2 then
result = -1
else if suffix1 > suffix2 then
result = 1
else
result = 0
end if
end if
return result
end function
像这样的函数允许您使用 任何 两个单元格引用并直接比较它们以做出您需要的任何决定:
if CompareCell(enteredval,newval)>=0 then
newrow=newrow+1
end if