将值转换为LBS-Excel VBA
我尝试使用以下代码将不同单位的数字转换为LBS: 我不知道下面这个简单的代码有什么问题,但它没有给出任何输出: 数据为表格格式,前两行已冻结 截图附在下面将值转换为LBS-Excel VBA,vba,excel,Vba,Excel,我尝试使用以下代码将不同单位的数字转换为LBS: 我不知道下面这个简单的代码有什么问题,但它没有给出任何输出: 数据为表格格式,前两行已冻结 截图附在下面 Option Explicit Sub ConvertToLBS() Application.ScreenUpdating = False Dim wk As Worksheet Dim str As String Dim i As Long Dim strq, strs As Double
Option Explicit
Sub ConvertToLBS()
Application.ScreenUpdating = False
Dim wk As Worksheet
Dim str As String
Dim i As Long
Dim strq, strs As Double
Dim FinalRow As Long
Set wk = Sheets(1)
FinalRow = wk.Range("B900000").End(xlUp).Row
For i = 2 To FinalRow
str = wk.Range("R" & i).Text
str = Trim(str)
strq = wk.Range("Q" & i).Value
If str = "POUNDS" Then
strs = strq * 1
wk.Range("S" & i).Value = strs
Else: End If
If str = "YARDS" Then
strs = strq * 1688.55
wk.Range("S" & i).Value = strs
Else: End If
If str = "KILOGRAMS" Then
strs = strq * 2.20462
wk.Range("S" & i).Value = strs
Else: End If
If str = "TONS" Then
strs = strq * 2000
wk.Range("S" & i).Value = strs
Else: End If
If str = "GALLONS" Then
strs = strq * 8.34
wk.Range("S" & i).Value = strs
Else: End If
Next i
Application.ScreenUpdating = True
End Sub
我相信你的如果。。。其他的都被弄脏了;可能是那些冒号试图速记代码。我建议换成一个新的。它们实际上是为这样的条件检查而设计的
Sub ConvertToLBS()
Application.ScreenUpdating = False
Dim wk As Worksheet
Dim str As String
Dim i As Long, FinalRow As Long
Dim strq As Double, strs As Double
Set wk = Sheets(1)
With wk
FinalRow = .Range("B" & .Rows.Count).End(xlUp).Row
For i = 2 To FinalRow
str = Trim(UCase(.Range("R" & i).Text))
strq = .Range("Q" & i).Value
strs = 0
Select Case str
Case "POUNDS"
strs = strq * 1
Case "YARDS"
strs = strq * 1688.55
Case "KILOGRAMS"
strs = strq * 2.20462
Case "TONS"
strs = strq * 2000
Case "GALLONS"
strs = strq * 8.34
Case Else
'do nothing; not covered
Debug.Print str
End Select
.Range("S" & i) = strs
Next i
End With
Application.ScreenUpdating = True
End Sub
我相信你的如果。。。其他的都被弄脏了;可能是那些冒号试图速记代码。我建议换成一个新的。它们实际上是为这样的条件检查而设计的
Sub ConvertToLBS()
Application.ScreenUpdating = False
Dim wk As Worksheet
Dim str As String
Dim i As Long, FinalRow As Long
Dim strq As Double, strs As Double
Set wk = Sheets(1)
With wk
FinalRow = .Range("B" & .Rows.Count).End(xlUp).Row
For i = 2 To FinalRow
str = Trim(UCase(.Range("R" & i).Text))
strq = .Range("Q" & i).Value
strs = 0
Select Case str
Case "POUNDS"
strs = strq * 1
Case "YARDS"
strs = strq * 1688.55
Case "KILOGRAMS"
strs = strq * 2.20462
Case "TONS"
strs = strq * 2000
Case "GALLONS"
strs = strq * 8.34
Case Else
'do nothing; not covered
Debug.Print str
End Select
.Range("S" & i) = strs
Next i
End With
Application.ScreenUpdating = True
End Sub
正如评论中所建议的那样:
Option Compare Text
Option Explicit
Sub ConvertToLBS()
Application.ScreenUpdating = False
Dim wk As Worksheet
Dim str As String
Dim i As Long
Dim strq, strs As Double
Dim FinalRow As Long
'Set wk = Sheets(1)
Set wk = Sheets("BR Mailing List_12-4-15 (3)")
FinalRow = wk.Range("R" & wk.Rows.Count).End(xlUp).Row
For i = 2 To FinalRow
str = Trim(wk.Range("R" & i).Value)
strq = CDbl(wk.Range("Q" & i).Value)
Select Case str
Case Is = "POUNDS"
strs = strq * 1
Case Is = "YARDS"
strs = strq * 1688.55
Case Is = "KILOGRAMS"
strs = strq * 2.20462
Case Is = "TONS"
strs = strq * 2000
Case Is = "GALLONS"
strs = strq * 8.34
End Select
wk.Range("S" & i).Value = CDbl(strs)
Next i
Application.ScreenUpdating = True
End Sub
正如评论中所建议的那样:
Option Compare Text
Option Explicit
Sub ConvertToLBS()
Application.ScreenUpdating = False
Dim wk As Worksheet
Dim str As String
Dim i As Long
Dim strq, strs As Double
Dim FinalRow As Long
'Set wk = Sheets(1)
Set wk = Sheets("BR Mailing List_12-4-15 (3)")
FinalRow = wk.Range("R" & wk.Rows.Count).End(xlUp).Row
For i = 2 To FinalRow
str = Trim(wk.Range("R" & i).Value)
strq = CDbl(wk.Range("Q" & i).Value)
Select Case str
Case Is = "POUNDS"
strs = strq * 1
Case Is = "YARDS"
strs = strq * 1688.55
Case Is = "KILOGRAMS"
strs = strq * 2.20462
Case Is = "TONS"
strs = strq * 2000
Case Is = "GALLONS"
strs = strq * 8.34
End Select
wk.Range("S" & i).Value = CDbl(strs)
Next i
Application.ScreenUpdating = True
End Sub
您应该使用
Select Case
而不是大量的If
,以便更好地编码和可读性。您是否使用断点来查看代码是如何工作的?您可以在模块顶部添加选项Compare Text
,以避免由于字符串大写(大小写)而导致测试失败!您已将第一个工作表分配给变量wk
:Set wk=Sheets(1)
。在所附的屏幕上,我可以看到数据在第二张工作表中。因此,将此行更改为Set wk=Sheets(2)
。或者最好按名称分配:Set wk=Sheets(“BR mailling List_12-4-15(3)”)
@mielk不,这是第一张工作表,只是我在BR\u邮寄后创建了控件
工作表。。。Sheet@RohanK:Mkay,您可能会混淆两种不同类型的图纸引用<代码>工作表(1)和工作表1
是截然不同的事情,工作表(1)
将是底部功能区左侧的第一张工作表,工作表1
将是您创建的第一张工作表,请参见:我在回答中包括了工作表的名称,我将它留给您来更正,以便在它正常工作后将其应用到正确的工作表中。您应该使用选择大小写
,而不是大量的If
,以便更好地编码和可读性。您是否使用断点来查看代码是如何工作的?您可以在模块顶部添加选项Compare Text
,以避免由于字符串大写(大小写)而导致测试失败!您已将第一个工作表分配给变量wk
:Set wk=Sheets(1)
。在所附的屏幕上,我可以看到数据在第二张工作表中。因此,将此行更改为Set wk=Sheets(2)
。或者最好按名称分配:Set wk=Sheets(“BR mailling List_12-4-15(3)”)
@mielk不,这是第一张工作表,只是我在BR\u邮寄后创建了控件
工作表。。。Sheet@RohanK:Mkay,您可能会混淆两种不同类型的图纸引用<代码>工作表(1)和工作表1
是截然不同的事情,工作表(1)
将是底部功能区左侧的第一张工作表,工作表1
将是您创建的第一张工作表,请参见:我在回答中包括了工作表的名称,我把它留给你去纠正,一旦它正常工作,就把它应用到正确的工作表上。我试过你的代码,我不认为有什么问题,但它不工作。我没有得到任何输出。我附上了数据的屏幕截图。Q列中的数字是看起来像数字的文本。这就是为什么它们都被标记为潜在错误的原因。选择列Q并设置为常规单元格编号格式,然后运行数据、文本到列、固定宽度、Finish.Ohh。。是的,是文本。谢谢,我会尽快做的我试过你的代码我不认为有什么问题,但它不起作用我没有得到任何输出我已经附上了数据的屏幕截图。Q列中的数字是看起来像数字的文本。这就是为什么它们都被标记为潜在错误的原因。选择列Q并设置为常规单元格编号格式,然后运行数据、文本到列、固定宽度、Finish.Ohh。。是的,是文本。谢谢,我会尽快做的,但它不起作用。请看问题中附带的屏幕截图。@RohanK:好的,我看到了屏幕截图,但我不明白这怎么不起作用(因为我在阅读Q列时已经包括了CDbl
)?你能再详细一点吗?有错误吗?S列中是否有输出?这是错误的吗?谢谢,我的工作表有两个主要问题,第一个是Q列中的数据格式不正确,其中一些是文本,第二个是正如你所说的Sheet1
和Sheets(1)
之间的区别,好的,但是正如我所说的,当我使用CDbl()
;)转换数据时,格式化为文本的数据与我的建议没有问题不,它必须是一个数字才能转换成双精度码。我认为你不能将文本转换成双精度码,因为如果它是34678
而不是34678
,它会给我一个类型不匹配错误
对不起,它不起作用,请看问题中附带的屏幕截图。@RohanK:好的,我看到了屏幕截图,但我不明白这怎么不起作用(因为我在阅读Q列时已经包括了CDbl)?你能再详细一点吗?有错误吗?S列中是否有输出?这是错误的吗?谢谢,我的工作表有两个主要问题,第一个是Q列中的数据格式不正确,其中一些是文本,第二个是正如你所说的Sheet1
和Sheets(1)
之间的区别,好的,但是正如我所说的,当我使用CDbl()
;)转换数据时,格式化为文本的数据与我的建议没有问题不,它必须是一个数字才能转换为双精度。我不认为您可以将文本转换为双精度,因为如果它是34678
而不是34678
,则会出现类型不匹配错误