Discussion:
Transpozycja VBA
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
s***@gmail.com
2006-11-04 12:44:37 UTC
Permalink
Witam,

Głowie się i głowie... w jaki sposób w VBA Excel transponować
całe tabele przykład:
w jednej zakładce mam dane źródłowe pozyskane z zewnątrz cos ala
wynik accesowej kwerendy krzyżowej:

........zlecenie1 zlecenie2 zlecenie3
data1 12 45 52
data2 14 1 0
data3 0 20 4
data4 90 8 7

jak transponować dane do nowo utworzonej zakładki tabelkę w taki
sposób by brane było tylko 14 najświeższych rekordów. (14
ostatnich dat jako nagłówki kolumn)

Pozdrawiam
ORK
Tajan
2006-11-04 19:04:10 UTC
Permalink
Witam!
Post by s***@gmail.com
Witam,
Głowie się i głowie... w jaki sposób w VBA Excel transponować
w jednej zakładce mam dane źródłowe pozyskane z zewnątrz cos ala
........zlecenie1 zlecenie2 zlecenie3
data1 12 45 52
data2 14 1 0
data3 0 20 4
data4 90 8 7
jak transponować dane do nowo utworzonej zakładki tabelkę w taki
sposób by brane było tylko 14 najświeższych rekordów. (14
ostatnich dat jako nagłówki kolumn)
Jeżeli masz dane nieuporządkowane, to przed przeniesieniem danych posortuj
je wg. daty, w kolejności malejącej. Nastepnie możesz zastosować metodę
kopiuj/ wklej specjalnie z transpozycją, wybierając pierwszych 14 wierszy.

With Range("A1:D100")
.Sort key1:=.Cells(1, 1), order1:=xlDescending, header:=xlYes
With .Cells(1, 1).Resize(15, 4)
.Copy
Worksheets.Add.Range("A1").PasteSpecial Transpose:=True
End With
End With
Application.CutCopyMode = False

lub też użyć w kodzie VBA funkcji arkuszowej TRANSPONUJ, transponując za jej
pomocą wartości komórek, a następnie przypisujując te wartosci bezpośrednio
do komórek drugiego arkusza.

With Range("A1:D100")
.Sort key1:=.Cells(1, 1), order1:=xlDescending, header:=xlYes
With .Cells(1, 1).Resize(15, 4)
Worksheets.Add.Range("A1").Resize(4, 15).Value = _
Application.Transpose(.Value)
End With
End With

Tajan
s***@gmail.com
2006-11-05 10:01:17 UTC
Permalink
Post by Tajan
Jeżeli masz dane nieuporządkowane, to przed przeniesieniem danych posortuj
je wg. daty, w kolejności malejącej. Nastepnie możesz zastosować metodę
kopiuj/ wklej specjalnie z transpozycją, wybierając pierwszych 14 wierszy.
With Range("A1:D100")
.Sort key1:=.Cells(1, 1), order1:=xlDescending, header:=xlYes
With .Cells(1, 1).Resize(15, 4)
.Copy
Worksheets.Add.Range("A1").PasteSpecial Transpose:=True
End With
End With
Application.CutCopyMode = False
Dzięki, bardzo mi pomogłeś!
Ale jak uporządkuję dane malejąco i później je transponuje to
będę miał w nagłówku:
data3, data2, data1... czyli też malejąco.
co zrobić by w nagłówkach zachować rosnące daty?

Pozdrawiam
ORK
Tajan
2006-11-05 11:55:25 UTC
Permalink
Witam!
Post by s***@gmail.com
Dzięki, bardzo mi pomogłeś!
Ale jak uporządkuję dane malejąco i później je transponuje to
data3, data2, data1... czyli też malejąco.
co zrobić by w nagłówkach zachować rosnące daty?
Można np. jeszcze raz posortować przetransponowane wartości, tym razem od
lewej do prawej, z pominięciem 1 kolumny (nagłówki):

With Range("A1:D100")
.Sort Key1:=.Cells(1, 1), Order1:=xlDescending, Header:=xlYes
With .Cells(1, 1).Resize(15, 4)
.Copy
With Worksheets.Add.Range("A1")
.PasteSpecial Transpose:=True
.CurrentRegion.Offset(0, 1).Sort Key1:=.Rows(1),
Order1:=xlAscending, _
Header:=xlNo, Orientation:=xlLeftToRight
End With
End With
End With
Application.CutCopyMode = False

Tajan

Loading...