Dzięki!
co do tych 256 kolumn, to, więcej mi nie potrzeba;
jednak co do makra, mam kilka uwag:
1)zamiast tgt_sheet = "Sheet2" powinno być tgt_sheet = "Arkusz2" bo w ogóle na
początku nie chciało zadziałać
2)f4 = "D2" mój komentarz co do tej linijki: mówiąc Field:=4 nie miałem na
myśli konkretnie żadnej kolumny, a już na pewno nie kolumny "D", to jest
czwartej kolumny w Twoim przypadku; autofilter mam założony np. na kolumny
J,K,L,M i to właśnie w kolumnie M znajduje się wartość "99", którą chcę
skopiować; Field:=4 ma więc tutaj raczej uniwersalny charakter, i za każdym
razem może to być zupełnie inna kolumna; jest to zawsze czwarta kolumna
obszaru poddanego filtrowaniu, a nie numer odpowiadający nagłówkowi kolumny
[gdzie np. liczba 4 odpowiada kolumnie "D"];
3)zać co do następujących linijek kodu:
tgt_row = 1 'wiersz docelowy
tgt_col_start = 2 'pierwsza kolumna docelowa
Skip = 2 'przeskok między kolumnami docelowymi
wolałbym jednak, aby było to rozwiązane trochę mniej matematycznie, co ma
miejsce w tej chwili; koniecznie zależy mi, aby w kodzie zapis tego wyglądał
następująco:
Range("B1,D1,F1,H1,J1,L1,N1,P1,R1,T1,V1,X1,Z1," & _
"AB1,AD1,AF1,AH1,AJ1,AL1,AN1,AP1,AR1,AT1,AV1,AX1,AZ1," & _
"BB1,BD1,BF1,BH1,BJ1,BL1,BN1,BP1,BR1,BT1,BV1,BX1,BZ1," & _
"CB1,CD1,CF1,CH1,CJ1,CL1,CN1,CP1,CR1,CT1,CV1,CX1,CZ1," & _
"DB1,DD1,DF1,DH1,DJ1,DL1,DN1,DP1,DR1,DT1,DV1,DX1,DZ1," & _
"EB1,ED1,EF1,EH1,EJ1,EL1,EN1,EP1,ER1,ET1,EV1,EX1,EZ1," & _
"FB1,FD1,FF1,FH1,FJ1,FL1,FN1,FP1,FR1,FT1,FV1,FX1,FZ1," & _
"GB1,GD1,GF1,GH1,GJ1,GL1,GN1,GP1,GR1,GT1,GV1,GX1,GZ1," & _
"HB1,HD1,HF1,HH1,HJ1,HL1,HN1,HP1,HR1,HT1,HV1,HX1,HZ1," & _
"IB1,ID1,IF1,IH1,IJ1,IL1,IN1,IP1,IR1,IT1,IV1")
dlaczego jest to dla mnie tak ważne? otóż cały trik tego filtrowania jest
następujący: pierwsza partia danych, poddana zostaje filtracji, a następnie
przetransportowana do "Arkusz2" ląduje w zakresie każdej z komórek szeregu;
następnie wyłączam autofiltr, przenoszę się na inne kolumny, by już za chwilę
znów przefiltrować i wkleić następne dane; cała operacja jest powtarzana z
jednym jednak wyjątkiem: z powyższego zakresu za każdym następnym razem
[uruchomieniem makra] usuwam ręcznie [niestety, ale nie wiem czy, i jak da się
to zautomatyzować] pierwszą komórkę ["B1"] powyższego zakresu, co następuje:
Range("D1,F1,H1...,IV1"); pytacie co mi to dało? otóż pierwsza partia danych
pozostała nienaruszona i została tym samym stablicowana już na stałe w
Arkusz2; i analogicznie postępuję za każdym następnym uruchomieniem kodu w
konsekwencji czego w ostatecznym rozrachunku dochodzę do momentu w końcówce
filtrowania, gdzie postać szeregu jest następująca: Range("IV1") to jest
została tylko jedna komórka; tym samym każdej z komórek docelowych w Arkusz2
została przyporządkowana charakterystyczna tylko dla siebie partia danych;
4)mówiąc 4 pole nie miałem na myśli tylko jednej z komórek tego zakresu [np.
"M2"], lecz całą kolumnę [Field:=4]; i jak zauważyłem jak to jest u Ciebie,
dane z tej kolumny zostały przetransponowane z orientacji wertykalnej na
horyzontalną, gdzie długość filtrowanego zakresu została rozbita na
poszczególne komórki mojego zakresu, to znaczy w przypadku gdy np. w danej
kolumnie wartość "99" występowała 3 razy:
--M
2-99
3-99
4-99
to już po wklejeniu do Arkusz2 każda z tych komórek została przypisana osobno
do pierwszej z poszczególnych komórek zakresu [co nie powinno nastąpić]
---B--D--F
1-99-99-99
odzwierciedleniem Twojego kodu jest poniższe makro [działa tak samo], które
dla mnie nie jest w tej chwili jednakże przydatne, choć nie ukrywam posiada
znacznie większe zalety zapisu, gdyż w kodzie znajduje się zbiór komórek dla
zmiennej to jest:
Ark2AdresArr = Split("B1,D1,F1,H1,J1,L1,N1,P1,R1,T1,V1,X1,Z1," & _
"AB1,AD1,AF1,AH1,AJ1,AL1,AN1,AP1,AR1,AT1,AV1,AX1,AZ1," & _
"BB1,BD1,BF1,BH1,BJ1,BL1,BN1,BP1,BR1,BT1,BV1,BX1,BZ1," & _
"CB1,CD1,CF1,CH1,CJ1,CL1,CN1,CP1,CR1,CT1,CV1,CX1,CZ1," & _
"DB1,DD1,DF1,DH1,DJ1,DL1,DN1,DP1,DR1,DT1,DV1,DX1,DZ1," & _
"EB1,ED1,EF1,EH1,EJ1,EL1,EN1,EP1,ER1,ET1,EV1,EX1,EZ1," & _
"FB1,FD1,FF1,FH1,FJ1,FL1,FN1,FP1,FR1,FT1,FV1,FX1,FZ1," & _
"GB1,GD1,GF1,GH1,GJ1,GL1,GN1,GP1,GR1,GT1,GV1,GX1,GZ1," & _
"HB1,HD1,HF1,HH1,HJ1,HL1,HN1,HP1,HR1,HT1,HV1,HX1,HZ1," & _
"IB1,ID1,IF1,IH1,IJ1,IL1,IN1,IP1,IR1,IT1,IV1", ",")
na czym, jak już wcześniej wspomniałem, niezwykle mi zależało;
a oto makro:
Sub copyFltrData()
Dim RangFltColumn As Range, i, Ark2AdresArr
Dim InpCel As Range
'tablica adresów docelowych
Ark2AdresArr = Split("B1,D1,F1,H1,J1,L1,N1,P1,R1,T1,V1,X1,Z1," & _
"AB1,AD1,AF1,AH1,AJ1,AL1,AN1,AP1,AR1,AT1,AV1,AX1,AZ1," & _
"BB1,BD1,BF1,BH1,BJ1,BL1,BN1,BP1,BR1,BT1,BV1,BX1,BZ1," & _
"CB1,CD1,CF1,CH1,CJ1,CL1,CN1,CP1,CR1,CT1,CV1,CX1,CZ1," & _
"DB1,DD1,DF1,DH1,DJ1,DL1,DN1,DP1,DR1,DT1,DV1,DX1,DZ1," & _
"EB1,ED1,EF1,EH1,EJ1,EL1,EN1,EP1,ER1,ET1,EV1,EX1,EZ1," & _
"FB1,FD1,FF1,FH1,FJ1,FL1,FN1,FP1,FR1,FT1,FV1,FX1,FZ1," & _
"GB1,GD1,GF1,GH1,GJ1,GL1,GN1,GP1,GR1,GT1,GV1,GX1,GZ1," & _
"HB1,HD1,HF1,HH1,HJ1,HL1,HN1,HP1,HR1,HT1,HV1,HX1,HZ1," & _
"IB1,ID1,IF1,IH1,IJ1,IL1,IN1,IP1,IR1,IT1,IV1", ",")
'widoczne komórki kolumny 4 filtrowanego obszaru
Set RangFltColumn =
ActiveSheet.AutoFilter.Range.Columns(4).SpecialCells(xlCellTypeVisible)
i = 0
For Each InpCel In RangFltColumn.Cells
i = i + 1
If i < 2 Then
'pominięcie wiersza nagłowka
ElseIf i - 2 > UBound(Ark2AdresArr) Then
'i przekracza ilość elementów tablicy adresów
Exit For
Else
InpCel.Copy Worksheets("Arkusz2").Range(Ark2AdresArr(i - 2))
End If
Next
End Sub
tak więc chyba nie bardzo sie zrozumieliśmy, za co przepraszam, zapewne dałem
zbyt mało informacji;
ostatecznie kod o jaki mi chodziło wygląda mniej więcej tak:
Sub copyFltrData()
ActiveSheet.AutoFilter.Range.Columns(4).Copy Arkusz2.Range("B1," & _
"D1,F1,H1,J1,L1,N1,P1,R1,T1,V1,X1,Z1," & _
"AB1,AD1,AF1,AH1,AJ1,AL1,AN1,AP1,AR1,AT1,AV1,AX1,AZ1," & _
"BB1,BD1,BF1,BH1,BJ1,BL1,BN1,BP1,BR1,BT1,BV1,BX1,BZ1," & _
"CB1,CD1,CF1,CH1,CJ1,CL1,CN1,CP1,CR1,CT1,CV1,CX1,CZ1," & _
"DB1,DD1,DF1,DH1,DJ1,DL1,DN1,DP1,DR1,DT1,DV1,DX1,DZ1," & _
"EB1,ED1")
End Sub
makro ma tylko jedną wadę; to jest w momencie próby zwiększania szeregu
chociażby o jedną komórkę docelową to jest gdy dodam jeszcze komórkę "EF1" np. do
Range(B1," & _
"D1,F1,...,ED1")
co następuje:
Range(B1," & _
"D1,F1,...,ED1,EF1")
automatycznie pojawia mi się następujący komunikat:
Run-time error '1004'
Application-defined or object-defined error
Na wszelki wypadek podaję Wam jeszcze stronkę na forum, na którym uzyskałem
powyższe makro, gdzie dość obszernie opisałem swój problem
http://www.vbamania.estrefa.pl/?go=forum&go2=zobacz&id_watek=1533
z pozdrowieniami