ich habe gerade ein sehr spezielles Problem und bin mir gar nicht ganz
sicher, ob ich hier in der richtigen NG bin.
Ich möchte in einer Excel Tabelle (Excel 2003) in einem markierten Bereich
die "signifikanten Stellen" auf 3 anpassen per Script.
Also zb:
33322 hat 0 sig. Stellen und bleibt
3.22 hat 3 sig Stellen und bleibt
0.0022332 hat 5 sig. Stellen und wird gekürzt auf 3 sig Stellen zu 0.00223
2.322323 hat 7 sig. Stellen und wird gekürzt auf 2.32 Stellen
2.3 hat 2 sig Stellen und muss im Format aus zwei Nachkommastellen
erweitert werden, so dass 3 sig. Stellen erhalten werden
usw.
Ich habe hier genau das Problem gefunden, nur dass hier jemand statt auf 3
sig. Stellen 4 sig Stellen haben will....
http://www.office-loesung.de/ftopic100435_0_0_asc.php
Das Script hier sieht so aus:
-----------------------------------
Sub Beschneiden()
Dim i As Integer
Dim sngWert As Single
Dim lngLR As Long
lngLR = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count,
1).End(xlUp).Row, Rows.Count)
For i = 1 To lngLR
sngWert = Cells(i, 1).Value
Select Case sngWert
Case Is > 1000
Cells(i, 2).Value = Int(Cells(i, 1).Value)
Case Is < 1
Cells(i, 2).Value = Cells(i, 1).Value
Case Is < 1000
Cells(i, 2).Value = Left(Cells(i, 1), 5)
End Select
Next i
End Sub
-------------------------------------
Ich habe leider keine Ahnung von VBA. Das Script funktioniert in meiner
Tabelle so leider nicht. Es scheint nur in Spalte A zu funktionieren. Kann
mir jemand sagen, wie ich das Script anpassen muss, damit es einen
ausgewählten Bereich bearbeitet und wie ich es von 4 auf 3 sig. Stellen
anpassen muss? (letzteres ist wohl das geringere Problem)
Das wäre wirklich super
Vielen Dank schonmal
Gruß Thomas
Sub DreiZählendeStellen()
With Selection
For i = 1 To .Cells.Count
sngWert = .Cells(i).Value
Select Case sngWert
Case Is >= 100
.Cells(i).NumberFormat = "0"
Case Is >= 10
.Cells(i).NumberFormat = "0.0"
Case Is >= 1
.Cells(i).NumberFormat = "0.00"
Case Is >= 0.1
.Cells(i).NumberFormat = "0.000"
Case Is >= 0.01
.Cells(i).NumberFormat = "0.0000"
End Select
Next i
End With
End Sub
ggfls noch erweitern für >=0.001 oder welche rausnehmen (>=1, wenn
Zahlen zwischen 1 und 10 sowieso immer 3 zählende Stellen haben).
Editor beenden. Markiere in der Tabelle den betreffenden Bereich und
gehe dann auf Extras/Makro/Makros. Da findest du den Eintrag
DreiZählendeStellen. Es ist aber möglich, das Makro zB über einen
button oder einen Tastatur-shortcut zu starten.
Gruß
stefan
On 11 Apr., 13:07, "Thomas Bahls" <flow...@gmx.de> wrote:
> Hallo,
>
> ich habe gerade ein sehr spezielles Problem und bin mir gar nicht ganz
> sicher, ob ich hier in der richtigen NG bin.
>
> Ich möchte in einer Excel Tabelle (Excel 2003) in einem markierten Bereich
> die "signifikanten Stellen" auf 3 anpassen per Script.
>
> Also zb:
> 33322 hat 0 sig. Stellen und bleibt
> 3.22 hat 3 sig Stellen und bleibt
> 0.0022332 hat 5 sig. Stellen und wird gekürzt auf 3 sig Stellen zu 0.00223
> 2.322323 hat 7 sig. Stellen und wird gekürzt auf 2.32 Stellen
> 2.3 hat 2 sig Stellen und muss im Format aus zwei Nachkommastellen
> erweitert werden, so dass 3 sig. Stellen erhalten werden
> usw.
>
> Ich habe hier genau das Problem gefunden, nur dass hier jemand statt auf 3
> sig. Stellen 4 sig Stellen haben will....http://www.office-loesung.de/ftopic100435_0_0_asc.php
>Ich möchte in einer Excel Tabelle (Excel 2003) in einem markierten Bereich
>die "signifikanten Stellen" auf 3 anpassen per Script.
Da mich das jetzt interessierte und ich mir nicht vorstellen konnte, daß
man dafür VBA braucht, habe ich auch mal geforscht, dabei das gefunden:
http://www.excelformeln.de/formeln.html?welcher=179
und das draus gemacht (Zahl in A1, Anzahl sign. Stellen in B1):
=WENN(A1<10^B1;KÜRZEN(A1;B1-1-GANZZAHL(LOG(ABS(A1))));KÜRZEN(A1;0))
Christoph Sternberg */\
--
E-Mail an Adresse im FROM wird ungelesen gelöscht
---"Thomas Bahls" <flo...@gmx.de> schrieb ...
> ich habe gerade ein sehr spezielles Problem und bin mir gar nicht
> ganz sicher, ob ich hier in der richtigen NG bin.
>
> Ich möchte in einer Excel Tabelle (Excel 2003) in einem markierten
> Bereich die "signifikanten Stellen" auf 3 anpassen per Script.
>
> Also zb:
> 33322 hat 0 sig. Stellen und bleibt
> 3.22 hat 3 sig Stellen und bleibt
> 0.0022332 hat 5 sig. Stellen und wird gekürzt auf 3 sig Stellen zu
> 0.00223
> 2.322323 hat 7 sig. Stellen und wird gekürzt auf 2.32 Stellen
> 2.3 hat 2 sig Stellen und muss im Format aus zwei Nachkommastellen
> erweitert werden, so dass 3 sig. Stellen erhalten werden
> usw.
Habe in Anlehnung an
http://www.excelformeln.de/formeln.html?welcher=179 (von Klaus
Kühnlein)
folgende VBA-Adaption erarbeitet, die dein durchaus sehr "spezielles"
Problem abdecken sollte.
Ablauf:
(1) Sorge dafür, dass in der Spalte rechts neben den zu bearbeitenden
Zellen Platz für die Ergebnisse ist!
(2) Markiere die zu bearbeitenden Zellen!
(3) Makro aufrufen (Extras / Makro / Makros)
Danach stehen die gewünschten Ergebnisse mit dem jeweils angepassten
Zahlenformat rechts neben der Markierung.
'---snip---
Sub AufAnzSigStellen_Anpassen()
Dim rng As Range
Dim intAnzNachStellen As Integer
Const intAnzSigStellen = 3
For Each rng In Selection.Cells
If IsNumeric(rng.Value) Then 'Texte werden nicht behandelt
If rng.Value <> 0 Then ' 0 wird nicht behandelt
intAnzNachStellen = intAnzSigStellen -
Int(Log(Abs(rng.Value)) / Log(10)) - 1
Select Case intAnzNachStellen
Case Is <= 0
rng.Offset(0, 1).Value =
Application.WorksheetFunction.Round(rng.Value, 0)
rng.Offset(0, 1).NumberFormat = "#,##0"
Case Else
rng.Offset(0, 1).Value =
Application.WorksheetFunction.Round(rng.Value, intAnzNachStellen)
rng.Offset(0, 1).NumberFormat = "#,##0." &
String(intAnzNachStellen, "0")
End Select
End If
End If
Next
End Sub
'---snip---
--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen
Servus aus Wien,
-Robert Gelbmann-
---
I solemnly swear that I'm up to no good.
Hey, das sieht ja schon gar nicht so schlecht aus..... funzt aber noch nicht
so ganz....
Diese Werte stehen in A1-A11:
0.170
1.804
1.584
135.689
26.167
733.297
938.162
0.338
0.839
1.508
5.062
Dieser in B1-B11 (also immer die "3"):
3
In C1-C11 werden die folgenden Werte ausgegeben:
0.17 eine sig.Stelle zu wenig
1.8 eine sig.Stelle zu wenig
1.58 richtig
135 richtig
26.1 richtig
733 richtig
938 richtig
0.338 richtig
0.839 richtig
1.5 eine sig. stelle zu wenig
5.06 richtig
Sieht also so aus, als wenn er eine sig Stelle zu wenig angibt, wenn diese
Stelle 0 ist......
Vielleicht muss ich die Zelle dafür ja aber auch anders "benutzerdefiniert"
formatieren (?), wenn ja wie?
Danke aber erstmal. Gruß Thomas
Also ich werd das nun noch weiter testen, aber bisher sieht es so als, als
wäre das ein Treffer ins Schwarze!
Vielen Dank!
Gruß Thomas
>0.17 eine sig.Stelle zu wenig
>1.8 eine sig.Stelle zu wenig
>1.5 eine sig. stelle zu wenig
Ich bin kein Mathematiker, aber ist diese 0 ganz hinten hinterm Komma
wirklich signifikant?? Das geht bei Excel freilich nur über's
Zellenformat.
Es sollen ja eben drei sig Stellen angegeben werden. So sind es bei diesen
Beispielen nur noch 2 sig. Stellen. Im Grunde hab ich ja nun auch dank des
VBA-Scripts von Stefan O. mein Ziel erreicht. Naja wenn das mit einer Formel
zu erreichen ist, ohne die Zellformatierung stets aufs neue zu verändern
(bzw. nur einmal) dann wäre das natürlich noch besser....
Bin aber im Grunde schon glücklich, bzw. mein Cheffe ;-)
Gruß Thomas
Hi,
das scheint auch zu gehen, allerdings fand ich die Lösung von stefan etwas
schöner, da man hier keine neue Spalte schaffen musste.
Trotzdem ganz vielen dank.....
Ich frag mich grad, wo und wie man wohl zumindest die basics in
VBS-Programmierung am besten lernt. Will da kein Star werden, aber momentan
hab ich das Gefühl, ich könnte sowas immer öfter bei so kleinen Problemchen
gebrauchen. Muss man da wohl sehr viel Zeit für Opfern? Ich guck heut Abend
mal, obs nicht vielleicht ein paar online-Kurse gibt, um vielleicht
wenigstens ein paar Basics zu lernen.....
So jetzt ist hier aber erstmal feierabend.
gruß Thomas
---"Thomas Bahls" <flo...@gmx.de> schrieb ...
> [...]
> das scheint auch zu gehen, allerdings fand ich die Lösung von
> stefan etwas schöner, da man hier keine neue Spalte schaffen
> musste.
Wenn du gleich die Daten überschreiben möchtest, bedarf es nur einer
kleinen Korrektur:
'---snip---
Sub AufAnzSigStellen_Anpassen()
Dim rng As Range
Dim intAnzNachStellen As Integer
Const intAnzSigStellen = 3
For Each rng In Selection.Cells
If IsNumeric(rng.Value) Then 'Texte werden nicht behandelt
If rng.Value <> 0 Then ' 0 wird nicht behandelt
intAnzNachStellen = intAnzSigStellen -
Int(Log(Abs(rng.Value)) / Log(10)) - 1
Select Case intAnzNachStellen
Case Is <= 0
rng.Value =
Application.WorksheetFunction.Round(rng.Value, 0)
rng.NumberFormat = "#,##0"
Case Else
rng.Value =
Application.WorksheetFunction.Round(rng.Value, intAnzNachStellen)
rng.NumberFormat = "#,##0." &
String(intAnzNachStellen, "0")
End Select
End If
End If
Next
End Sub
'---snip---
> Trotzdem ganz vielen dank.....
Gerne doch!
> Ich frag mich grad, wo und wie man wohl zumindest die basics in
> VBS-Programmierung am besten lernt. Will da kein Star werden, aber
> momentan hab ich das Gefühl, ich könnte sowas immer öfter bei so
> kleinen Problemchen gebrauchen. Muss man da wohl sehr viel Zeit
> für Opfern? Ich guck heut Abend mal, obs nicht vielleicht ein paar
> online-Kurse gibt, um vielleicht wenigstens ein paar Basics zu
> lernen.....
VBA ist nunmal eine Programmier*sprache* und die lernt man nicht in
ein paar Stunden.
Du hast in Excel den Vorteil, dass man Vieles aufzeichnen kann,
womit viele Vokabeln schon mal beigelegt werden.
Trotzdem (ohne dich entmutigen zu wollen):
Zum Verständnis für Schleifen, If-Anweisungen, Select Case,
Variablen usw. - ganz ohne vorherige Programmiererfahrung - wird es
schon etwas länger dauern ...