Aktualizácia z marca 2017: Dan Ashby má k dispozícii vylepšenú funkciu stôp a palcov v exceli.
Mám tabuľku programu Excel so stĺpcom dĺžok vo formáte 12 '6 7/8 ". Ako môžem pomocou programu Excel tento príkaz previesť na desatinné stopy? Nechcem stĺpec rozdeliť na dve časti. Potom, ako môžem previesť späť na stopy a palce v programe Excel ?.
Nižšie uvedená vlastná funkcia feet () vezme textové pole vo formáte, ktorý popisujete, a prevedie ho na desatinné stopy.
Vlastná funkcia LenText prevedie desatinný počet stôp na textové pole so stopami, palcami a zlomkovými palcami na najbližšiu 1/32 ".
Ak chcete zadať vlastnú funkciu,
- Spustite editor VB pomocou alt-F11.
- Vložiť> Modul.
- Vložiť> Postup.
- Ako názov postupu napíšte nohy a označte, že ide o funkciu.
- Potom skopírujte nasledujúci kód:
Public Function feet(LenString As String) Dim FootSign As Integer Dim InchSign As Integer Dim SpaceSign As Integer Dim FracSign As Integer Dim InchString As String Dim Word2 As String ' Copyright 1999, 2005.com LenString = Application.WorksheetFunction.Trim(LenString) 'The find function returns an error when the target is not found 'Resume Next will prevent VBA from halting execution. On Error Resume Next FootSign = Application.WorksheetFunction.Find("'", LenString) If IsEmpty(FootSign) Or FootSign = 0 Then ' There are no feet in this expression feet = 0 FootSign = 0 Else feet = Val(Left(LenString, FootSign - 1)) End If ' Handle the case where the foot sign is the last character If Len(LenString) = FootSign Then Exit Function ' Isolate the inch portion of the string InchString = Application.WorksheetFunction.Trim(Mid(LenString, FootSign + 1)) ' Strip off the inch sign, if there is one InchSign = Application.WorksheetFunction.Find("""", InchString) If Not IsEmpty(InchSign) Or InchSign = 0 Then InchString = Application.WorksheetFunction.Trim(Left(InchString, InchSign - 1)) End If ' Do we have two words left, or one? SpaceSign = Application.WorksheetFunction.Find(" ", InchString) If IsEmpty(SpaceSign) Or SpaceSign = 0 Then ' There is only one word here. Is it inches or a fraction? FracSign = Application.WorksheetFunction.Find("/", InchString) If IsEmpty(FracSign) Or FracSign = 0 Then 'This word is inches feet = feet + Val(InchString) / 12 Else ' This word is fractional inches feet = feet + (Val(Left(InchString, FracSign - 1)) / Val(Mid(InchString, FracSign + 1))) / 12 End If Else ' There are two words here. First word is inches feet = feet + Val(Left(InchString, SpaceSign - 1)) / 12 ' Second word is fractional inches Word2 = Mid(InchString, SpaceSign + 1) FracSign = Application.WorksheetFunction.Find("/", Word2) If IsEmpty(FracSign) Or FracSign = 0 Then ' Return an error feet = "VALUE!" Else If FracSign = 0 Then feet = "VALUE!" Else feet = feet + (Val(Left(Word2, FracSign - 1)) / Val(Mid(Word2, FracSign + 1))) / 12 End If End If End If End Function
Opakujte pre funkciu s názvom LenText. Použite tento kód:
Public Function LenText(FeetIn As Double) ' This function will change a decimal number of feet 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. ' Copyright 1999.com Denominator = 32 ' must be 2, 4, 8, 16, 32, 64, 128, etc. NbrFeet = Fix(FeetIn) InchIn = (FeetIn - NbrFeet) * 12 NbrInches = Fix(InchIn) FracIn = (InchIn - NbrInches) * Denominator Numerator = Application.WorksheetFunction.Round(FracIn, 0) If Numerator = 0 Then FracText = "" ElseIf InchIn>= (11 + (31.4999999 / 32)) Then NbrFeet = NbrFeet + 1 NbrInches = 0 FracText = "" ElseIf Numerator = Denominator Then NbrInches = NbrInches + 1 FracText = "" Else 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 LenText = NbrFeet & "' " & NbrInches & FracText & """" End Function
Stĺpec A zobrazuje pôvodný text. Stĺpec B správne prevádza na stopy všetky hodnoty, ktoré obsahujú stopy, palce alebo zlomkové palce.
Upozorňujeme, že ak neuvádzate znak nohy, bude sa predpokladať, že sú to palce. (riadok 12). Ak zlomková časť palcov nie je platná, hodnota! sa vracia (riadok 13).
Aktualizácia: Ďakujem Daleovi Richmondovi z Kansas City, ktorý v októbri 2007 poskytol aktualizáciu, ktorá má zabrániť odpovedi 1 stopa 12 palcov, keď je funkcii odovzdané číslo väčšie ako 1 999.