1
下面是我创建的VBA函数,用于在Excel中将脚的测量值从数字转换为文本。例如,该函数将采用数字1.5并将其转换为字符串:1'-6“为什么这个VBA函数不正确的四舍五入?
由于某些原因,它错误地舍入了11.5英寸的值。当单元格设置为' = 11.5/12'(以英尺表示的11.5英寸),结果为0.9583,重复3次。当我将此值传递给我的txtfeet()函数时,它返回字符串1'-0“。真正的答案应该是字符串11 1/2“。
该函数可以很好地适用于其他重复数字,例如9.5英寸(0.7916与6重复)。奇怪的是,它也可以正常工作,如果通过它1英尺和11.5英寸(换句话说,1.9583与3个重复)。
任何人都可以帮助解决这个问题?
这里是我的函数的代码。
Public Function txtfeet(FeetIn As Double, Optional Denominator As Integer = 8)
' This function will change a decimal number of feet (FeetIn) to the text string
' representation of feet, inches, and fractional inches.
'
' It will round the fractional inches to the nearest 1/x where x is the denominator
' and is given by the user as the second argument of this function. If a denominator
' is not given, it defaults to 8 as shown above.
'
' Modified from MrExcel.com
' set a variable to the integer portion of FeetIn
NbrFeet = Fix(FeetIn)
' set a variable to the number of inches in decimal form
InchIn = (FeetIn - NbrFeet) * 12
' set a variable to the integer portion of InchIn
NbrInches = Fix(InchIn)
' set a variable to the remaining fractional inches in decimal form
FracIn = (InchIn - NbrInches) * Denominator
' set a variable to be FracIn rounded to the nearest whole number
Numerator = Application.WorksheetFunction.Round(FracIn, 0)
' if the fractional inches are zero, define the portion of text
' that will represent the fractional inches to be blank
If Numerator = 0 Then
FracText = ""
' otherwise, if the number of inches plus the fractional inches rounds up to
' 12, add one to NbrFeet and set NbrInches to zero and FracText to blank
ElseIf (InchIn + (Numerator/Denominator)) = 12 Then
NbrFeet = NbrFeet + 1
NbrInches = 0
FracText = ""
' otherwise, if the numerator equals the denominator, add one to NbrInches
' and set FracText to blank
ElseIf Numerator = Denominator Then
NbrInches = NbrInches + 1
FracText = ""
' otherwise, define FracText in its simplest fractional form
Else
' use a loop to get the fractional inches to their simplest form
Do
' if the numerator is even, divide both numerator and divisor by 2
If Numerator = Application.WorksheetFunction.Even(Numerator) Then
Numerator = Numerator/2
Denominator = Denominator/2
Else
FracText = " " & Numerator & "/" & Denominator
Exit Do
End If
Loop
End If
' define the output of the function as a text string of feet, inches, and
' fractional inches or just inches and fractional inches if NbrFeet is zero
' or just fractional inches if both NbrFeet and NbrInches are zero
If NbrFeet = 0 And NbrInches = 0 And Numerator = 0 Then
txtfeet = "0"""
ElseIf NbrFeet = 0 And NbrInches = 0 Then
txtfeet = Application.WorksheetFunction.Trim(FracText) & """"
ElseIf NbrFeet = 0 Then
txtfeet = NbrInches & FracText & """"
Else
txtfeet = NbrFeet & "'-" & NbrInches & FracText & """"
End If
End Function
非常感谢!它现在完美运行! –