Thema Datum  Von Nutzer Rating
Antwort
12.01.2016 18:05:44 VBARookie
NotSolved
12.01.2016 18:49:56 Gast85686
NotSolved
12.01.2016 23:55:49 Gast47339
NotSolved
Blau Matrix in Spaltenvektor
13.01.2016 19:37:30 Gast85770
NotSolved

Ansicht des Beitrags:
Von:
Gast85770
Datum:
13.01.2016 19:37:30
Views:
745
Rating: Antwort:
  Ja
Thema:
Matrix in Spaltenvektor

Hallo! Hatte da einige kleine Fehler noch drin. Hier mal die komprimierte Version, die auch richtig ist. Entweder mit einer festen Matrix nutzen (is tauskommentiert) oder mit der aktuellen Selection.

Sub spalten_unter_matrix()

With Selection 'ActiveSheet.Range("A1:C3")

For i = 1 To .Columns.Count
ActiveSheet.Range(Cells(.Row + i * (.Rows.Count), 1), Cells(.Row + (i + 1) * (.Rows.Count) - 1, 1)) = Application.WorksheetFunction.Index(.Value, 0, i)
Next i
End With

End Sub

 

Hier dann die Version mit etlichen Kommentaren. Bei einem andern Blatt einfach das ActiveSheet durch Workbooks(2) etc. ersetzen. Für Zelle B2 einfach den ersten Cells - Wert auf Cells(2,2) setzen und den zweiten dann auf Cells(2 + (i  ) * (.Rows.Count) - 1, 2).  Dabei ist die 2 am Ende die Spalte und die 2 am Anfag die Zeile.

Sub spalten_unter_matrix()

'hier die Variante mit flexibler Auswahl, des selektierte Berich wird ausgewertet, Falls es keine matrix ist
'wird nur der erste matrixbereich genommen, im worst Case 1 Zelle,
'bei A1:B2 alles, bei A1 und B2 - nicht als zusammenhängende Range - nur A1, wobei die sollte einen werte haben
'gibt sonst einen Fehler, den ich nicht abfange
' um die etlichen Range Eingaben zu sparen - fehleranfällig nutz ich einmal with und brauch das dann nur einmal ändern
With Selection 'ActiveSheet.Range("A1:C3")

'das wir es Sapltenweise haben wollen, gehen wir auch alle Spalten durch,
For i = 1 To .Columns.Count

'in der Funktion am Ende wird der Bereich als matrix interpretiert, mit dem 0 an zweiter Stelle gebe ich an, dass die Zeilen egal sind und mich
' nur Spalten interessieren. Und das i ist dann die jeweilige Spalte - siehe Anzahl der for Durchläufe
' die funktion gibt also nur eine Spalte der MAtric zurück. Diese wird an eine range der selben Größe übergeben - geht am schnellsten
' Du musst also eine Range haben, die genauso groß wie die Zeilenanzahl der matrix ist. Ist sie größer wird dort bei den Zellen zuviel ein NV eingefügt (Fehler in der Version davor)
' Ist sie kleiner kommt eine Fehlermeldung
' bei der folgenden Erklärung habe ich das selektion (alternativ auch eine feste range) wieder vor den Punkt gesetzt - wegen der with anweisung am Anfang entfällt das im Code
' Da ich die Werte in einer Spalte untereinander haben wollte, ist die Spaltenzahl immer gleich, hier 1 also Spalte A
' zum Ermitteln der Spalte gehen ich von der ersten Zelle der auswählten Matrix aus = selection.row und addiere die Anzahl der Zeilen der Matrix = selection.Rows.Count dazu
' da wir das ja bei jeder schleife brauchen, nehme ich die Zeilenanzahl mal i und habe immer den Anfangsbereich.
' das Ende lege ich dann genauso fest. hier muss ich aber die Zeilenanzahl der Matrix einmal mehr als am Anfang dazu addieren. deshalb das i +1 (bei i waren wir ja am anfang der Zeile und einaml mehr die Zeilenanzahl ist das Ende
' auf Grund der rechnung und da wir bei Excel ja nicht mit 0 sondern 1 starten, am Ende noch 1 abziehen und es passt. Ansonsten kommt am Ende ein NV wie gestern.
' Für das 1 abziehen als erklärung, bei einer 3x3 matrix. Der erste Wert steht in Zeile 1. Die Zeilenzahl von 3 dazu und unser Anfang zum Eintragen ist zeile 4, wenn jetzt nochmal 3 für den Inhalt (Zeilenanzahl) dazukommen sind wir bei 7 (der erste Wert steht ja schon in 4). Also noch eins weg.

ActiveSheet.Range(Cells(.Row + i * (.Rows.Count), 1), Cells(.Row + (i + 1) * (.Rows.Count) - 1, 1)) = Application.WorksheetFunction.Index(.Value, 0, i)
Next i
End With

End Sub

 

Hoffe das ist verständlich. Viele Grüße


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
12.01.2016 18:05:44 VBARookie
NotSolved
12.01.2016 18:49:56 Gast85686
NotSolved
12.01.2016 23:55:49 Gast47339
NotSolved
Blau Matrix in Spaltenvektor
13.01.2016 19:37:30 Gast85770
NotSolved