jj, než som to napísal, tak si na to prišiel:Sub MatchInColumn()
Dim myArr(1 To 10, 1 To 4), i As Integer
For i = 1 To 10
myArr(i, 1) = Chr(64 + i)
myArr(i, 2) = i
myArr(i, 3) = i + 10
myArr(i, 4) = Chr(74 + i)
Next i
'[A1].Resize(10, 4) = myArr 'TOTO TU JE LEN PRE KONTROLU
MsgBox "Hladam hodnotu 17 v 3.stlpci myArr"
MsgBox "Hodnota 17 sa nachadza na pozicii " & WorksheetFunction.Match(17, WorksheetFunction.Index(myArr, 0, 3), 0) & _
" v 3. stlpci myArr"
End Sub
Iným maticovým, podobne ako Dingo. V stĺpci C:=IFERROR(INDEX($A$16:$Z$16;SMALL(IF($A$16:$Z$16<>0;COLUMN($A$16:$Z$16));COLUMN()-COLUMN($B$16)));"") skopírovať doprava
@kp57
v pohode
@eLCHa
pretože viem, že nezvyknete plácať do vetru, tak som ešte premýšľal, čo vlastne watches myslíte - jedná sa o okno watches vo VBE, však? Tak, to, priznám sa, som doteraz úplne prehliadal a tým pádom vôbec netuším, ako ho používať... Skúsim sa na to pozrieť, keď teda píšete, že je k tomu vhodné, díky
edit: tak tie watches sú vskutku šikovné, určite to začnem používať, díky!!
@kp57:
ja som vo vzore schválne uviedol zjednodušený príklad problému, ktorý som riešil. V reále šlo o to, aby k triedeniu dát došlo až v prípade, kedy hodnoty v konkrétnom stĺpci (v uvedenom prípade v stĺpci B) nadobúdajú viac než jednu unikátnu hodnotu. To som v reále testoval cez vlastnosť Count vytvorenej collection. Celý problém v reále bol:
1. Otestuj počet unikátnych hodnôt v danom stĺpci (stĺpec B). To sa deje cez vytvorenie collection, do ktorej sú jednotlivé hodnoty načítané v abecednom poradí.
Len prípade, že počet položiek v collection je vyšší než jedna vykonaj nasledujúce kroky:
2. zotrieď dáta v tabuľke
3. v cykle otestuj, na ktorých riadkoch dochádza ku zmene v hodnotách v stĺpci B v tabuľke - porovnaním danej hodnoty s hodnotou príslušnej položky collection.
4. za príslušný riadok z bodu 3 vlož sumárny riadok, na ktorom budú úhrny hodnôt v jednotlivých stĺpcoch danej tabuľky, prislúchajúce tejto konkrétnej unikátnej hodnote (spravidla sa jedná o sumy, resp. teda sumify, ale môže nastať i iný, komplikovanejší prípad súhrnu). V argumente príslušných vzorcov som potom použil i-tu hodnotu collection.
5. za takýto súhrnný riadok pridaj ešte jeden prázdny riadok, ktorý príslušný blok dát oddelí od ďalšieho bloku.
Celé toto bolo treba vytvoriť do už existujúcej tabuľky, ktorá už bola nejakým spôsobom sformátovaná a uložená v časti predmetného listu, ktorý okrem toho obsahuje iné tabuľky atd., čiže horeuvedený postup mi prišiel jednoduchší, než tvorenie nejakej pomocnej kontingenčky.
Čiže, aby som to skrátil. Sort len v prípade výskytu viacerých než jednej unikátnej hodnoty. Samozrejme, počet unikátnych hodnôt som mohol určiť iným spôsobom, ale napr. hodnotu maticového vzorca v tvare =sum(1/countif(nejaky_moj_range;nejaky_moj_range)), ktorým sa počet unikátnych hodnôt dá zistiť, nie je možné dostať do premennej v kóde priamo, ani v kóde vyhodnotiť bez toho, aby bola predtým zapísaná do nejakej pomocnej bunky (ktorá by mohla byť následne vymazaná, iste). No a problém bol, že hodnoty collection neboli unikátne, tak ma zaujímalo prečo.
@eLCHa: s kukátkom príliš skúsenosť nemám, zvykol som si na immediate, nepriem sa o tom, že kukátko môže byť v niektorých prípadoch vhodná alternatíva. Ja mám pri ladení kódu okno immediate otvorené a okrem chytania hodnôt ho používam i ďalšími spôsobmi, ktoré som uviedol a kde kukátko, priznám sa, že neviem, ako by šlo použiť. Pozerám, že ste tu v pre Vás neobvyklej dobe
edit:
@kp
reagoval som na príspevok, ktorý si meditým zmazal
@marjankaj:
v tom prípade si odo mňa dostal cennú radu, páč Immediate je v procese ladenia kódu k nezaplateniu
Okrem hore uvedeného použitia si v ňom môžeš priamo nechávať zobrazovať napr. hodnotu premenných, pokiaľ do okna napíšeš príslušnú inštrukciu začínajúcu znakom ? s medzerou, či priamo písať jednotlivé inštrukcie, ktoré chceš testovať; ovšem v prípade, že ich je naraz viacero, musia byť vždy všetky zapísané naraz do jedného riadku, oddelené navzájom dvojbodkou.
Pre ilustráciu:
Inštrukcia ? [B2] zapísaná v Immediate vráti hodnotu bunky B2.
Inštrukcia [B8].FONT.BOLD=TRUE: [C18].FONT.BOLD=TRUE nastaví tučné písmo v bunkách B8 a C18.
@marjankaj
Tak to ma mrzí, že si sa s tým trápil takpovediac zbytočne
...vzorcami, viď príloha
zmenši si rozsahy podľa potreby, aby vzorce nepočítali s celými stĺpcami, inak je prepočet "trochu" pomalý
No, tak si pripadám ako blbec, páč som na niečo predsa len nakoniec prišiel:
Niekoľkokrát v minulosti som narazil na radu, že sa jeden nemá spoliehať na to, že pokiaľ potrebuje v kóde získavať hodnotu z bunky, tak miesto cell, je bezpečnejšie písaťcell.value, napriek tomu, že value je defaultná vlastnosť bunky a ako taká v kóde uvádzaná byť nemusí. Proste, pokiaľ sa do kódu zapíše cell, tak kód vráti hodnotu. Očividne to vždy neplatí, takže riešenie je nasledujúce: Správne má byť: On Error Resume Next
For Each cell In myRng
If MyCol.Count = 0 Then
MyCol.Add cell.Value, CStr(cell)
Else:
For i = 1 To MyCol.Count
If cell < MyCol(i) Then
MyCol.Add cell.Value, CStr(cell), i
Exit For
End If
MyCol.Add cell.Value, CStr(cell)
Next i
End If
Next cell
On Error GoTo 0 Pred včerom som strávil dosť času, než som to opravil spôsobom "škrabem sa nohou za uchom". Záver: Vždy, pokiaľ chcem, aby kód vracal .value, toto doňho písať a nespoliehať sa na to, že kód hodnotu vráti, keď .value neuvediem
@ Opičák: Do collection načítam len hodnoty zo stĺpca B. Majú to byť 3 položky: aa, bb, cc. Vôbec mi nie je jasné, prečo by sa mali nejak zohľadňovať dáta v stĺpcoch C a D. Inými slovami, príliš Tvojmu vysvetleniu nerozumiem.
@ Dingo: Zajímavé, navíc když jsem si nechal vypsat položky potřetí po kopii na konci makra, jsou zase 3 unikátní. Áno, viem, na čo upozorňuješ, ale: Copy na konci makra slúži k púhemu obnoveniu pôvodnej tabuľky 2, aby sa to dalo znovu celé spustiť, takže Tvoj postreh mi bohužiaľ neosvetľuje nič.
Ja som práve žil v domnení, že pomocou collection si vytvorím zoznam unikátnych hodnôt, s ktorými budem môcť v kóde ďalej pracovať, ale zrejme to tak nie je, resp. niečo mi uniká...
Zasielam vzor, z ktorého by si mal pochopiť, o čom hovorím.
edit: riadok srcRng.Select v kóde samozrejme byť nemusí, ale ten vzor kvôli tomu posielať znovu nebudem
Otázkou je, či sa dá nejak zmeniť verzia príslušnej KT po tom, čo bola táto vytvorená. Pmn to nejde, aspoň ja som neprišiel na to, ako by to šlo. Čiže na to, aby si mohol slicers používať, príslušná KT musí byť hneď na začiatku vytvorená vo verzii, ktorá použitie slicers umožňuje. Pokiaľ niekto príde na to, ako verziu KT zmeniť po tom, čo je táto vytvorená, rád sa priučím. Každopádne, pokiaľ KT zostavuješ, ako hovoríš, programovo, tak by nemal byť problém v kóde nastaviť vhodnú verziu KT v momente jej tvorby.
Ahoj, mám problém s chápaním collection, ktorá by mala obsahovať unikátne hodnoty. Jednotlivé hodnoty načítam zo stĺpca B z tabulky Druha v abecednom poradí. Potom data v tabulke Druha zotriedim abecedne podľa stĺpca B a nechám vypísať hodnoty z collection. Na moje prekvapenie dochádza k ich zmene napriek tomu, že (aspoň sa teda domnievam) jednotlivé položky collection nijak nemením. Dokáže mi niekto vysvetliť, prečo sa tak deje? Vzorový súbor prikladám.
Data z collection som síce pred triedením dat v tabulke Druha schopný zapísať do nejakého poľa a ďalej pracovať miesto collection s novým poľom, mňa by ale zaujímalo, ako je možné, že položky collection, ktoré boli na začiatku unikátne, po triedení dat v tabulke Druha sú zrazu duplicitné.
Mám za to, že záleží na PivotTable.Version. Skontroluj číslo: slicers by mali byť v dispozícii u verzie PT 4 (xlPivotTableVersion14) , u PT verzie 1 (xlPivotTableVersion10) asi nebudú.
Ďakujem
Ja som proste chcel obísť ten Select, čiste ma zaujímalo, či sa to nejako dá. Nie, že by to bolo nejakým spôsobom kritické.
To rozdelenie okna (anglicky je to split, česky neviem), ktoré zmieňujete, mi v tomto prípade nepomôže, páč ja okrem rozdelenia potrebujem ukotviť záhlavie tabuliek . Pokiaľ máte záujem ten súbor vidieť, tak môžem poslať mailom, čisto kvôli inšpirácii..
Aby som to teda celé vysvetlil. Tvorím pre kolegov "databázu" - toto slovo nemám v prípade spreadsheetov rád, ale budiž. Má to zatiaľ 3 listy. Potreboval som vyriešiť, aby keď užívateľ klikne na druhý list, tento sa zobrazil v 2 oknách, v hornom sa nachádza excel table s nejakým položkovým prehľadom, v dolnom excel table s iným prehľadom, táto spodná excel table slúži na zadávanie požiadaviek. Takže úloha:
Pri kliknutí na list2, tento zobraz v dvoch oknách, usporiadaných horizontálne, pri kliknutí na niektorý iný list tento zobraz v maximalizovanom okne.
Samozrejme, stáva sa, že užívateľ si omylom jedno z okien zavrie, tak potom nastaviť opätovné zobrazenie súboru v dvoch oknách, v novo otvorenom okne potom potlačiť zobrazenie mriežky vo všetkých listoch a nanovo zafixovať priečky nasledovne:
na liste 1 a liste 3: na riadku 3
na liste 2: v hornom okne na riadku 6, v spodnom okne na riadku 103 s tým, že je odrolované tak, že prvý viditeľný riadok je 100.
Okrem toho, pokiaľ užívateľ klikne na záložku listu 2 v ktoromkoľvek okne, aby sa list 2 zobrazil i v druhom z okien.
Mám to vyriešené, píšem len pre informáciu, pokiaľ Vás zaujíma,čo teda kutím
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.