Mit Hilfe des Links von hp-freund habe ichs mit folgender Funktion
geschafft:
1 | Function ToSciNum(BaseNum As Double, Unit As String) As String
|
2 |
|
3 | Dim OrigNum As Double
|
4 | Dim Pref As Integer
|
5 | Dim Temp As String
|
6 |
|
7 | Pref = 0
|
8 | OrigNum = BaseNum
|
9 |
|
10 | Select Case BaseNum
|
11 | Case Is >= 1
|
12 | While Abs(BaseNum) > 1000
|
13 | BaseNum = BaseNum / 1000
|
14 | Pref = Pref + 1
|
15 | Wend
|
16 | Case 0
|
17 | Pref = 99
|
18 | Case Else
|
19 | While Abs(BaseNum) < 1
|
20 | BaseNum = BaseNum * 1000
|
21 | Pref = Pref - 1
|
22 | Wend
|
23 | End Select
|
24 |
|
25 | Select Case Pref
|
26 | Case -6
|
27 | Temp = "a" & Unit
|
28 | Case -5
|
29 | Temp = "f" & Unit
|
30 | Case -4
|
31 | Temp = "p" & Unit
|
32 | Case -3
|
33 | Temp = "n" & Unit
|
34 | Case -2
|
35 | Temp = "µ" & Unit
|
36 | Case -1
|
37 | Temp = "m" & Unit
|
38 | Case 0
|
39 | Temp = Unit
|
40 | Case 1
|
41 | Temp = "k" & Unit
|
42 | Case 2
|
43 | Temp = "M" & Unit
|
44 | Case 3
|
45 | Temp = "G" & Unit
|
46 | Case 4
|
47 | Temp = "T" & Unit
|
48 | Case 5
|
49 | Temp = "P" & Unit
|
50 | Case 6
|
51 | Temp = "E" & Unit
|
52 | Case Else
|
53 | Temp = ""
|
54 | End Select
|
55 |
|
56 | ToSciNum = Format(BaseNum, "0.0") & " " & Temp
|
57 |
|
58 | End Function
|
Zwei unbedeutend kleine Probleme habe ich dabei noch:
1) Damit ich die Funktion aufrufen kann, muss ich den ganzen
Dateinamen/Modul-Wulst angeben:
=PNM_FFT_Timing.xlsm!ToSciNum.ToSciNum(...)
2) Da die Funktion einen String zurückgibt (Wert + Einheit) kann ich
natürlich damit nicht mehr weiterrechnen. Gäbs dafür auch noch eine
Lösung (Ohne die Einheit in einer anderen Zelle anzeigen zu lassen!)?
@Arc Net: Beider deiner Funktion muss ich a) die Größenordung fix
angeben, und b) wird die Einheit nicht angezeigt. Danke für den Tip, ist
aber nicht das was ich suche.