PDA

Vollständige Version anzeigen : Sortieren und Runden


frontloop
27.06.2014, 08:19
Hi,

2 kurze VBA-Fragen:
1. zum sortieren:
ich habe ein Makro aufgezeichnet, wo ich werte sortiere.
Das ganze funktioniert, aber es geht nur dann, wenn ich auch im aktuellen Tabellenblatt bin (Tabellenblatt 2).
Ich will aber, da das sortieren Teil eines größeren Programms ist), das die Routine aus jedem Tabellenblatt funktioniert (Sprich: ich habe das Tabellenblatt 1 aktiv und trotzdem sortiert er im Tabellenblatt 2).
Sub Preissortieren() 'Bezeichnung für Funktion "Sortieren"

Sheets("Tabelle2").Range("A2:G10").Select 'Spalte A-K auswählen
ActiveWorkbook.Worksheets("Tabelle2").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle2").Sort.SortFields.Add Key:=Range("G2:G10" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'nach was soll sortiert werden
With ActiveWorkbook.Worksheets("Tabelle2").Sort
.SetRange Range("A1:G10") 'in welchem Bereich soll sortiert werden --> 14.0000 Zeilen
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With

End Sub

Und 2. Frage:
Ich habe in einer Zelle einen wert mit 3 Nachkommastellen (also 123,456) stehen.
den lese ich aus
wert = Sheets("Tabelle1").Cells(1, 2).ValueWert ist dabei als single definiert
und schreibe ihn in eine andere Zelle:
Sheets("Tabelle1").Cells(1, 4) = wert

Problem dabei ist, dass er mir dann nicht 123,456 rein schreibt, sondern noch mehrere Stellen anhängt. Also z.B. 123,456789123456

Liegt vermutlich am "Single". Wie kann ich ihm das abgewöhnen?

EarlFred
27.06.2014, 08:37
Hallo Name?,

probier's beim Problem 2 mal mit dem Variablentyp Double.

Zum Problem 1 fehlt mir die Testumgebung - aber da meldet sich sicher einer, der Excel > 2003 hat. Und ich bin grad zu faul, die Syntax "trocken" anzulesen.

Grüße
EarlFred

Mc Santa
27.06.2014, 08:43
Hier stand bis eben ein Code-Versuch, leider mit zu vielen Fehlern.

Bitte lade eine Datei hoch, an der man testen kann.

VG

EarlFred
27.06.2014, 08:45
...erledigt...

RPP63neu
27.06.2014, 08:56
Hallo!
Zu 1.: Entferne die erste Zeile (die mit .Select).
Zu 2.: Ich nehme an, dass in B1 eine Formel steht, die auf 3 Nachkommastellen formatiert ist. Dann solltest bei der Übergabe an die Variable runden:
Dim sgWert As Single, ws As Worksheet
Set ws = Worksheets("Tabelle1")
With ws
sgWert = Round(.Cells(1, 2).Value, 3)
.Cells(1, 4) = sgWert
End With
Gruß, Ralf

frontloop
27.06.2014, 08:57
@EarlFred: Danke. Mit double gehts.

@RPP63neu: Ja, mit dem entfernen der Select-Zeile gehts.

Jetzt geht alles, nur schauts Kacke aus. Weil er irgendwie das was er im Tabellenblatt2 alles macht (das komplette Programm) einblendet.
Siehe Bild.

Hasso
27.06.2014, 09:40
Hallo frontloop,

Mein immer wieder gerne gegebener Tipp: Das Hochladen einer Beispieldatei, gerne auch mit anonymisierten Daten, in der das Problem und das gewünschte Ergebnis dargestellt werden, erhöht die Aussicht auf eine hilfreiche Antwort ungemein!
Ich habe keine Lust, nach deiner Fragestellung selbst eine Datei zu erstellen, wenn diese bei dir schon existiert.