Marta W.

Marta W. Client Delivery
Analyst, Acxiom
Polska

Temat: 1K/348W na 6K/58W

Krzysiek B.:
Cześć

Odpuść sobie VBA, można to zrobić dużo prościej.

1. skopiuj te 349 komórki do kolumny A tak by pozycja pierwsza znajdowała się w wierszu 1 a ostatnia w wierszu 349.

2.
w b1 wpisz 1
w c1 wpisz 59
w d1 wpisz 117
w e1 wpisz 175
w f1 wpisz 233
w g1 wpisz 291
i przeciągnij w dół do wiersza 58.

3. do h1 wklej formułę =INDEKS($A$1:$A$349;B1;1)
4. przeciągnij ją na obszar h1:m58

i gotowe.

krzysiek

prawie dobrze :)
dokłanie chodziło jednak o to, zeby komorki od A1 do A6 znalazły sie w pierwszym wierszu sześciokolumnowej tabeli. Od A7 do A12 w drugim itd. Twoje rozwiazanie wrzuca wiersze A1:A58 do pierwszej z szesciu kolumn, A59:A117 do drugiej itd.

Twoje rozwiazanie zadziała wg zalozen Roberta jeśli w komorki wpiszesz

B1 = 1
C1 = 2
D1 = 3
E1 = 4
F1 = 5
G1 = 6
B2 = 7
C2 = 8
itd.

i dalej tak jak napisałeś.

Pozdro
Marta.

ps. bede sie jednak upierac, ze VBA to bardziej eleganckie rozwiazanie i w sumie prostrze :}
M.

konto usunięte

Temat: 1K/348W na 6K/58W

Marta W.:
ps. bede sie jednak upierac, ze VBA to bardziej eleganckie rozwiazanie i w sumie prostsze :}
Jako ojciec zamieszania powiem tak: VBA to takie coś a'la France, czyli ładne opakowanie i przyjemna zawartość :-)))

konto usunięte

Temat: 1K/348W na 6K/58W

Niepraktyczna Elegancja
Marta, nie wiem jak Ty, ale ja wole doradzać komuś w pracy niż robić coś za kogoś - bo na to czasu nie mam. Cały problem można rozwiązać trzema linijkami „czarów” w kodzie VBA - ale nie o to chodzi by coś komuś dać, tylko o to by czegoś go nauczyć. Dlaczego nie makro i VBA ? Patrzmy szerzej i nie zapominajmy o tym, że nadal jest to arkusz kalkulacyjny – zmiana jakiejkolwiek wartości w głównej kolumnie wymaga niekomfortowego uruchomiania eleganckiego makra, a rozwiązanie nieeleganckie za działa od razu.
Jakub C.

Jakub C. Kruk S.A.

Temat: 1K/348W na 6K/58W

Pogodzę chyba zarówno fanów VBA jak i zwykłych formuł Excelowskich

1) Problem można załatwić jedną formułą nie dopisując żadnych
danych w dodatkowych wierszach i kolumnach:

Założenia:
Kolumna z 348 danymi zaczyna się w komórce B2
Kolumny wynikowe zaczynają się w komórce D2
(Dlatego tak dziwnie, bo formuła została napisana tak, że można kolumnę z danymi rozpocząć w dowolnym miejscu arkusza (np.
2 wiersze nagłówków, kolumna numeracji itp)
By zmienić położenie danych wejściowych lub wyjściowych wystarczy podmienić adresy B2 i D2 na inne.

=JEŻELI((WIERSZ(B2)-WIERSZ(B$2)+1)<59;ADR.POŚR("$B"&(WIERSZ(B2)-WIERSZ(B$2))*6+WIERSZ(B$2)+(NR.KOLUMNY(D2)-NR.KOLUMNY($D2)));"")


formułę przeciągamy w bok i w dół.

2) A teraz VBA:


Option Explicit

Sub Makro1()
Dim ArkuszWynikowy As String
Dim ArkuszZrodlowy As String
Dim i As Integer
Dim j As Integer

Jeszcze_raz1:
'Wpisujamy nazwę arkusza z danymi wynikowymi
'jeśli zawsze to jest to samo to można wpisać od razu np. "Zrodlo"
ArkuszZrodlowy = InputBox("podaj nazwę arkusza zródlowego")


'Sprawdzenie czy dany arkusz istnieje, jeśli nie to jeszcze raz
On Error Resume Next
Application.DisplayAlerts = False
If IsError(Worksheets(ArkuszZrodlowy)) Then
MsgBox ("Podany arkusz nie istnieje")
GoTo Jeszcze_raz1
End If
Application.DisplayAlerts = True

Jeszcze_raz2:
'Wpisujamy nazwę arkusza z danymi wynikowymi
'jeśli zawsze to jest to samo to można wpisać od razu np. "Export"
ArkuszWynikowy = InputBox("podaj nazwę arkusza wynikowego")


'Sprawdzenie czy dany arkusz istnieje, jeśli tak to jeszcze raz
On Error Resume Next
Application.DisplayAlerts = False
If IsError(Worksheets(ArkuszWynikowy)) Then
Sheets.Add
ActiveSheet.Name = ArkuszWynikowy
Else
MsgBox ("Podany arkusz już istnieje")
GoTo Jeszcze_raz2
End If
Application.DisplayAlerts = True


For i = 1 To 6
For j = 1 To 58
Sheets(ArkuszWynikowy).Cells(j, i).Value = Sheets(ArkuszZrodlowy).Cells(j + 5 * (j - 1) + i - 1, 1).Value
Next j
Next i

End Sub


Istotna część makra została pogrubiona - reszta to wodotryski. Szybko i fajowo!
No i można sortować - w formułach się niestety nie da.Jakub C. edytował(a) ten post dnia 14.07.07 o godzinie 01:51

Następna dyskusja:

24W LED = 58W FT




Wyślij zaproszenie do