Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Array aus Application ausgeben

Array aus Application ausgeben
15.04.2020 11:05:39
Thorsten
Hallo liebe VBA-Profis,
Anbei ein kleines Problem, das ich auch nach intensivem "Googlen" noch nicht lösen konnte.
Ich habe zwei Arrays, die nach gleichem Prinzip behandelt werden. Lediglich die Ausgabe unterscheidet sich: Einer wird vertikal ausgegeben, der andere horizontal. (Es wird eine Matrix aufgespannt)
Das klappt soweit auch ganz gut, lediglich haben die horizontalen Werte plötzlich statt Kommas als Dezimaltrennzeichen einen Punkt. Ich vermute, dass ich den Array auch mit einem Application.(hier müsste etwas stehen) ausgeben müsste. Ich weiß nur nicht genau, was.
Code folgt auf dem Fuß!
Liebe Grüße
Thorsten

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array aus Application ausgeben
15.04.2020 11:08:20
Thorsten
Der Array tArr wird mit Punkten ausgegeben, der Array sArr dagegen richtig (mit Komma)
Private Sub LAENGEholen_Click()
Dim lArr() As Variant, sArr() As String, dArr() As Variant, tArr() As String, iSpalte As Long,  _
iZeile As Long
'Länge holen
iZeile = Cells(Rows.Count, 12).End(xlUp).Row
iSpalte = Cells(5, Columns.Count).End(xlToLeft).Column
Range(Cells(5, "L"), Cells(iZeile, iSpalte)).ClearContents
Range(Cells(5, "L"), Cells(iZeile, iSpalte)).Interior.Color = RGB(255, 255, 255)
Range(Cells(5, "L"), Cells(iZeile, iSpalte)).Borders.Color = RGB(255, 255, 255)
lArr = Range("J5:J" & Range("A65536").End(xlUp).Row).Value
sArr = Split(ArraySort(lArr), ",")
Cells(6, "L").Resize(UBound(sArr), 1) = Application.Transpose(sArr)
'Durchmesser holen
dArr = Range("I5:I" & Range("A65536").End(xlUp).Row).Value
tArr = Split(ArraySort(dArr), ",")
Cells(5, "M").Resize(1, UBound(tArr)) = tArr
End Sub

Anzeige
AW: Array aus Application ausgeben
15.04.2020 15:17:58
Dieter
Hallo Thorsten,
lade doch mal eine Beispielmappe und den Code der Function ArraySort hoch.
Werte in der Arbeitsmappe beliebig verändert, aber repräsentativ.
Viele Grüße
Dieter
AW: Array aus Application ausgeben
15.04.2020 16:01:35
Thorsten
Hallo Dieter,
Danke für deine Antwort.
Anbei erstmal der Sortier- und Duplikatentfernungscode.
Für ein Beispielfile würde ich etwas länger brauchen.
Deshalb hier kurz ein Beispiel:
J I
2,5 4,5
2,1 5,3
4,5 3,7
2,2 5,1
2,7 6,2
2,1 3,7 (hier jeweils ein Duplikat, dass ebenfalls über Arraysort entfernt wird)
Gewünschtes Ergebnis(funktioniert auch soweit):
3,7 4,5 5,1 5,3 6,2 (HIER IN DER HORIZONTALEN SETZT ER PLÖTZLICH PUNKTE STATT KOMMAS)
2,1
2,2
2,5
2,7
4,5
Function ArraySort(vArr As Variant) As String
'Sortieren eines einstelligen Arrays über eine Collection
Dim i As Long, oCol As New Collection
For i = 1 To UBound(vArr)
CollectionAddItem oCol, vArr(i, 1)
Next i
For i = 1 To oCol.Count
ArraySort = ArraySort & oCol.Item(i) & ","
Next i
End Function
Function CollectionAddItem(oCol As Collection, ByVal sItem As String, Optional iPos As Integer,  _
Optional ByVal vKey As Variant) As Long
'Function fügt einen Eintrag sortiert in eine Collectionsammlung ein
Dim nStart As Long, nEnd As Long, iItem As Double
If Trim$(sItem) = "" Then Exit Function
sItem = Replace(sItem, ",", ".")
iItem = Val(sItem)
With oCol
If iPos  0 Then .Add sItem, vKey, 1: Exit Function
If .Count  iItem Then
.Add sItem, vKey, 1                                      'an 1. Position einfügen
'jetzt mit letzten Eintrag vergleichen
ElseIf Val(.Item(1)) = iItem Or .Item(.Count) = sItem Then
Exit Function
ElseIf Val(.Item(.Count))  iItem: nEnd = CollectionAddItem
Case Is 

Ich habe es auch soweit, dass es funktioniert. Das ist aber womöglich unschön gelöst:
Private Sub LAENGEholen_Click()
Dim lArr() As Variant, sArr() As String
Dim dArr() As Variant, tArr() As String, cArr() As String
Dim i As Long
'Länge holen
Range(Cells(5, "L"), Cells(1048576, "XFD")).ClearContents
Range(Cells(5, "L"), Cells(1048576, "XFD")).Interior.Color = RGB(255, 255, 255)
Range(Cells(5, "L"), Cells(1048576, "XFD")).Borders.Color = RGB(255, 255, 255)
lArr = Range("J5:J" & Range("A65536").End(xlUp).Row).Value
sArr = Split(ArraySort(lArr), ",")
Cells(6, "L").Resize(UBound(sArr), 1) = Application.Transpose(sArr)
'Durchmesser holen
dArr = Range("I5:I" & Range("A65536").End(xlUp).Row).Value
tArr = Split(ArraySort(dArr), ",")
For i = 0 To UBound(tArr)
tArr(i) = Replace(tArr(i), ".", ",")
Next i
Cells(5, "M").Resize(1, UBound(tArr)) = tArr
End Sub

Anzeige
AW: Array aus Application ausgeben
15.04.2020 17:33:02
Daniel
hi
wenn du eindimensionale Arrays vom Typ Text in Zellen schreibst, führt Excel nach dem einfügen keine automatische Typumwandlung durch, sondern übernimmt die Werte so wie sie kommen als Text, daher bleiben dann die Punkte, die aus dem Amerikanischen Format kommen, erhalte.
beim Transponieren geht dann wahrscheinlich diese Festlegung als Text verloren und die Typumwandlung nach dem Einfügen wird durchgeführt.
dh die lösung wäre, dass du tArr ebenfalls transponierst, aber 2x, damit es wieder quer liegt.
Cells(5, "M").Resize(1, UBound(tArr)) = Application.Transpose(Application.Transpose(tArr))
wobei ich das ganze eher unter ausnutzung der Excelfunktionen programmieren würde.
ist in der Regel genauso schnell und meistens einfacher als VBA-orientierte programmierung:
das wäre der komplette Code unter ausnutzung der Excelfunktionen sortieren und Duplikate entfernen.
Private Sub CommandButton1_Click()
Dim Zelle As Range
For Each Zelle In Range("i5:j5")
Range(Zelle, Zelle.End(xlDown)).Copy
Range("L6").PasteSpecial xlPasteValues
With Selection
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlNo
.RemoveDuplicates 1, xlNo
If Zelle.Column = 9 Then
.Copy
Range("M5").PasteSpecial xlPasteValues, Transpose:=True
.ClearContents
End If
End With
Next
End Sub
gruß Daniel
Anzeige
AW: Array aus Application ausgeben
17.04.2020 10:29:47
Thorsten
Hallo Daniel
Vielen Dank dir! Ich probier es mal aus.
Liebe Grüße
Thorsten

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige