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 :)
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
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!
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
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.
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?
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 :)
Ehh nie skopiowałem wszystkiego do makra :D
Dzięki wielkie, naprawdę dużo mi pomogłeś :)