Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 27853 Skopiuj do schowka Przeróbka formuły użytkownika "NAKOLUMNY"
Autor Wiadomość
M0nique 
słuchacz


Pomógł: 1 raz
Posty: 12
  Wysłany: 2012-02-06, 13:41   Przeróbka formuły użytkownika "NAKOLUMNY"

Zwracam się z prośbą o zmodyfikowanie poniższeg kodu formuły "=nakolumny(zakres;ilekolumn)" użytkownika.

Zależało by mi, aby do powyższej formuły dodać 3 parametr mówiący,
które kolumny mają zostać przepisane (powtórzone), w wierszach poniżej.

"=nakolumny(zakres;kolumny_powtarzające;ilekolumn)"

Dokładnie o co mi się rozchodzi w załączniku.

Kod:


Kod:
Option Explicit



Function NaKolumny(zakres As Range, ilekolumn As Integer) As Variant

    Dim tblDane, iTbl As Long, jTbl As Integer
    Dim tblWyniki(), lp, w As Long, i As Integer

    tblDane = zakres
    On Error Resume Next
    For iTbl = LBound(tblDane, 1) To UBound(tblDane, 1)
        lp = tblDane(iTbl, 1)
        For jTbl = LBound(tblDane, 2) + 1 To UBound(tblDane, 2) Step ilekolumn - 1
            If tblDane(iTbl, jTbl) <> "" Then
                w = w + 1
                ReDim Preserve tblWyniki(1 To ilekolumn, 1 To w)
                For i = 1 To ilekolumn
                    Select Case i
                        Case 1: tblWyniki(1, w) = lp
                        Case Else:
                            tblWyniki(i, w) = tblDane(iTbl, jTbl + i - 2)
                    End Select
                Next
            End If
        Next
    Next

    NaKolumny = Transponuj2(tblWyniki)

End Function

Private Function Transponuj2(tabl As Variant) As Variant

    Dim X As Long, Y As Long
    Dim Max2 As Long, Max1 As Long
    Dim Min2 As Long, Min1 As Long
    Dim tempTabl As Variant

    Max2 = UBound(tabl, 2)
    Max1 = UBound(tabl, 1)
    Min2 = LBound(tabl, 2)
    Min1 = LBound(tabl, 1)
   
    ReDim tempTabl(Min2 To Max2, Min1 To Max1)
    For X = Min2 To Max2
        For Y = Min1 To Max1
            tempTabl(X, Y) = tabl(Y, X)
        Next Y
    Next X

    Transponuj2 = tempTabl

End Function


Z góry dziękuję za pomoc

Przyklad.zip
Pobierz Plik ściągnięto 11 raz(y) 10.58 KB

ID posta: 147625 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-07, 12:10   

Funkcja nakolumny powinna wyglądać tak:
Kod:
Function NaKolumny(zakres As Range, ilekolumn As Integer, naglowek As Integer) As Variant

    Dim tblDane, iTbl As Long, jTbl As Integer
    Dim tblWyniki(), w As Long, i As Integer

    tblDane = zakres
    On Error Resume Next
    For iTbl = LBound(tblDane, 1) To UBound(tblDane, 1)
       
        For jTbl = LBound(tblDane, 2) + 1 To UBound(tblDane, 2) Step ilekolumn - 1
            If tblDane(iTbl, jTbl) <> "" Then
                w = w + 1
                ReDim Preserve tblWyniki(1 To ilekolumn + naglowek, 1 To w)
                For i = 1 To ilekolumn + naglowek
                    Select Case i
                        Case Is <= naglowek: tblWyniki(i, w) = tblDane(iTbl, i)
                        Case Else:
                            tblWyniki(i, w) = tblDane(iTbl, jTbl + i - 2)
                    End Select
                Next
            End If
        Next
    Next

    NaKolumny = Transponuj2(tblWyniki)

End Function
ID posta: 147726 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

wuzeq
Excel Expert



Pomógł: 142 razy
Posty: 451
Wysłany: 2012-02-07, 12:11   

zobacz
=NaKolumny(D2:P4;1;2) dla pierwszego przykładu
=NaKolumny(D29:R31;3;2) dla drugiego przykladu

Kod:
Function NaKolumny(zakres As Range, ilePocz As Integer, ilekolumn As Integer) As Variant

    Dim tblDane, iTbl As Long, jTbl As Integer
    Dim tblWyniki(), lp, w As Long, i As Integer

    tblDane = zakres
    On Error Resume Next
    For iTbl = LBound(tblDane, 1) To UBound(tblDane, 1)
        For jTbl = LBound(tblDane, 2) + ilePocz To UBound(tblDane, 2) Step ilekolumn
            If tblDane(iTbl, jTbl) <> "" Then
                w = w + 1
                ReDim Preserve tblWyniki(1 To ilekolumn + ilePocz, 1 To w)
                For i = 1 To ilekolumn + ilePocz
                    Select Case i
                        Case 1 To ilePocz: tblWyniki(i, w) = tblDane(iTbl, i)
                        Case Else:
                            tblWyniki(i, w) = tblDane(iTbl, jTbl + i - ilePocz - 1)
                    End Select
                Next
            End If
        Next
    Next

    NaKolumny = Transponuj2(tblWyniki)

End Function


;P
Ostatnio zmieniony przez wuzeq 2012-02-07, 12:19, w całości zmieniany 1 raz  
ID posta: 147727 Skopiuj do schowka
 
 
negatyv
Excel Expert



Zaproszone osoby: 4
Pomógł: 195 razy
Posty: 910
Wysłany: 2012-02-07, 12:12   

Zmienna nagłówek określa ile kolumn ma traktować tak jak pierwszą w oryginalnej funkcji.

[ Dodano: 2012-02-07, 12:13 ]
pierwszy ;)

[ Dodano: 2012-02-07, 13:35 ]
Nagłówek funkcji możesz sobie jeszcze zmienić na
Kod:
Function NaKolumny(zakres As Range, ilekolumn As Integer, Optional naglowek As Integer = 1) As Variant

Wtedy funkcja będzie działać wstecz.
_________________
http://www.123office.pl - blog poświęcony programom pakietu MS Office.
ID posta: 147728 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

M0nique 
słuchacz


Pomógł: 1 raz
Posty: 12
Wysłany: 2012-02-08, 08:56   

Przepraszam, że dopiero teraz odpisuję.

Funkcja działa tak jak chciałem.

Dziękuję za pomoc!
ID posta: 147848 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum