Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Excel VBA - łatwe makro - pomoc

19.06.2014 14:59
1
czesiu89
70
Pretorianin

Excel VBA - łatwe makro - pomoc

Cześć.
Chciałbym stworzyć/napisać makro, ale za bardzo nie wiem jak.
Problem wygląda następująco:
W komórkach od A1 do J1 mam wartości. Niżej mam tak samo A2 do J2. Załóżmy, że mam 10 takich linijek tekstu. Chodzi o to, aby na końcu wszystkie te linijki były obok siebie w wierszu A. Pierwszą linijkę zostawiamy, czyli od A1 do J1 a w komórkach K1-T1 były te wartości z A2 do J2 itd.:)

Mógłby mi ktoś pomóc w tej sprawie? Rozumiem, że pętla będzie tutaj najlepszym rozwiązaniem, tylko nie wiem jak ją założyć na jakiś zakres.

Pozdrawiam :)

19.06.2014 15:33
Toshi_
2
odpowiedz
Toshi_
175
Got sarcasm?

Na przykład tak:

spoiler start


Private Sub CommandButton_Click()

Dim i As Integer, j As Integer, k As Integer

k = 1
For i = 2 To 10
For j = 1 To 10
Cells(10 * k + j, 1) = Cells(j, i).Value
Cells(j, i).Value = Null
Next j
k = k + 1
Next i

End Sub

i - numer kolumny (zaczynam od drugiej, bo pierwsza ma zostać)
j - numer wiersza
k - kolejna dziesiątka wierszy w pierwszej kolumnie do wstawiania danych

spoiler stop


Iteruję sobie najpierw po numerze kolumny a w środku po numerze wiersza i kopiuję wartość z konkretnej komórki do odpowiedniego wiersza w pierwszej kolumnie a potem czyszczę.
Jeśli chodzi o zakresy, to można je załatwić w postaci Range(Cells(1, 1), Cells(4, 1)) i chyba nawet byłoby to łatwiejsze, ale nigdy w VBA nie kodziłem, więc nie jestem do tego przyzwyczajony :P

EDIT: Ok, w taki sposób jest nawet prościej :P Po prostu Value jednego zakresu można przypisać do Value innego.

spoiler start

Dim i As Integer, j As Integer
j = 11
For i = 2 To 10
Range(Cells(j, 1), Cells(j + 9, 1)).Value = Range(Cells(1, i), Cells(10, i)).Value
Range(Cells(1, i), Cells(10, i)).Value = Null
j = j + 10
Next i

End Sub

spoiler stop

19.06.2014 15:54
3
odpowiedz
czesiu89
70
Pretorianin

Dzięki wielkie! :)
A możesz mi jeszcze napisać co mam zmienić, jeżeli będzie inny zakres np od A1 do T1? Czyli 20 kolumn. I kiedy będzie np 50 takich wierszy?

Edit. Nie było pytania, już wiem co zmienić :) Raz jeszcze, dzięki wielkie!

19.06.2014 16:14
Toshi_
4
odpowiedz
Toshi_
175
Got sarcasm?

Właśnie pomyślałem, że możesz mieć też inne rozmiary ;]

Dim i As Integer, j As Integer, rows As Integer, cols As Integer
rows = ActiveSheet.UsedRange.rows.Count
cols = ActiveSheet.UsedRange.Columns.Count

j = rows + 1
For i = 2 To cols
Range(Cells(j, 1), Cells(j + rows - 1, 1)).Value = Range(Cells(1, i), Cells(rows, i)).Value
Range(Cells(1, i), Cells(rows, i)).Value = Null
j = j + rows
Next i

19.06.2014 16:22
5
odpowiedz
czesiu89
70
Pretorianin

Wyskakuje błąd przy j = Rows + 1 :/

19.06.2014 16:28
Toshi_
6
odpowiedz
Toshi_
175
Got sarcasm?

IMPOSSIBIRU!
Jaki konkretnie błąd?

19.06.2014 16:36
7
odpowiedz
czesiu89
70
Pretorianin

Run-time error '7':

Out of memory

I kiedy klikam w Debug to na żółto podświetla mi j = Rows + 1

Tak jakby był problem z zagnieżdżaniem formuł w makro.

19.06.2014 16:39
Toshi_
8
odpowiedz
Toshi_
175
Got sarcasm?

0_o

W jaki sposób odpalasz to makro - buttonem czy jakoś inaczej?
I przy okazji: jakie wymiary ma ta twoja tabela z danymi? Każdy wiersz/kolumna mają taki sam rozmiar?

19.06.2014 16:48
9
odpowiedz
czesiu89
70
Pretorianin

Jak odpalam buttonem i przez Makra w Deweloperze to jest taki sam błąd. Zawsze jest to od A1 do T1 (zawsze 20 kolumn) i idzie w dół. Nie wiadomo tylko, na którym wierszu się skończy. Może być oczywiście takie makro, w którym z ręki mógłbym wpisywać liczbę wierszy :)

19.06.2014 17:03
Toshi_
10
odpowiedz
Toshi_
175
Got sarcasm?

"U mnie działa" :D
Spróbuj: http://180upload.com/75tfesir1b9o

19.06.2014 17:15
11
odpowiedz
czesiu89
70
Pretorianin

Ehh nie skopiowałem wszystkiego do makra :D
Dzięki wielkie, naprawdę dużo mi pomogłeś :)

Forum: Excel VBA - łatwe makro - pomoc