Na tú fotku máme použiť AI ?
To je na figu, lebo som si vlastne nevšimol, že "xxxOstrava-sever,stará," nezačína veľkým písmenom.
Kriste, čo je toto za systém, takto dementný export...
Nič iné ma nenapadá.
EDIT:
Ak by ste v tom zozname "Potřebuji odstranit" mali presné celé texty na odstránenie, tak by to možno šlo. Zabezpečilo by sa aby bola dočasne na začiatku aj konci "," a nahrádzal by sa vždy text ","&text&",".
Neviem, no, treba si nájsť a určiť nejaké pravidlá...
No lenže Vy keď chcete odstrániť "Praha-východ", tak sa musí odstrániť ",Praha-východ,-kopie" alebo "Praha-východ,-kopie,", ale aj "Praha-východ," alebo ",Praha-východ". To je problém, že nie je zaručené, že text za čiarkou nepatrí ešte k predchádzajúcemu mestu.
Takže ma napadá, že jediným identifikátorom rozdeliteľnosti textu na skutočné celé znenia miest, je ",X" - teda čiarka nasledovaná veľkým písmenom. Je to tak?
Ak áno, môžem Vám na to urobiť makro.
=INDEX($5:$5;LARGE(IF(T6:AA6=MIN(T6:AA6);COLUMN(T6:AA6);FALSE);1))
=INDEX($5:$5;LARGE(KDYŽ(T6:AA6=MIN(T6:AA6);SLOUPEC(T6:AA6);NEPRAVDA);1))
1. vzorec je SK
2. vzorec je CZ
Takže to najmenšie číslo v riadku, sa bude v riadku vyskytovať iba raz? Ak viackrát, má sa vypísať sektor, kde sa najmenšia hodnota vyskytla ako prvá zľava->doprava?
=INDEX(T$5:AA$5;MATCH(MIN(T6:AA6);T6:AA6;0))
=INDEX(T$5:AA$5;POZVYHLEDAT(MIN(T6:AA6);T6:AA6;0))
Hmm, no ja myslím že nie. Tiež by sa mi to už pár krát šiklo...
V makre je na testovacie účely tento riadok
If Not DEL Is Nothing Then WS.Activate: DEL.Select, ktorý iba označí bunky. Pre istotu. Skontrolujte si, či to sedí.
Ak je to to, čo ste chcel, tak tento riadok zmažte (alebo deaktivujte pridaním apostrofu na začiatok) a aktivujte ten mazací riadok za ním (vymazaním apostrofu na začiatku)
If Not DEL Is Nothing Then DEL.ClearContents
Dáta sú od 1. riadku? Nie je tam hlavička? Jedná sa o obyč. tabuľky alebo sú to objekty Tabuľky (ListObject)? Mená máte v nejakom zozname, voči ktorému ma prebehnúť kontrola, alebo iba všeobecná kontrola porovnávaním text->text? Rozdiel je ohromný, pri zozname sa skontroluje najskôr existencia v zozname až potom prehľadáva listy. Naopak pri text-text sa prehľadávajú hneď dáta v listoch. Názvy mesiacov sú vždy v CZ? Sú dáta filtrované?
Tak teda príklad:
Sub Generuj_Sektory()
Dim Sektory() As String, MozneSektory() As String, Vysledek() As String
Dim Den As Integer, Delnik As Integer, Pozice As Integer, Sektor As String, bOK As Boolean
Const POCET_DNI As Long = 5
Const POCET_DELNIKU As Integer = 3
Randomize
With ThisWorkbook.Worksheets("Hárok1")
Sektory = Split(Join(Application.Transpose(.Range("A4:A11").Value), ","), ",")
If UBound(Sektory) + 1 < POCET_DELNIKU Then MsgBox "Málo sektorů.", vbCritical: Exit Sub
ReDim Vysledek(1 To POCET_DNI, 1 To POCET_DELNIKU)
For Den = 1 To POCET_DNI
MozneSektory = Sektory
For Delnik = 1 To POCET_DELNIKU
bOK = False
While Not bOK
Pozice = Int(Rnd() * (UBound(MozneSektory) + 1))
Sektor = MozneSektory(Pozice)
bOK = Den = 1
If Not bOK Then
bOK = Sektor <> Vysledek(Den - 1, Delnik)
If Not bOK Then If UBound(MozneSektory) = 0 Then Den = Den - 1: Exit For
End If
Wend
MozneSektory(Pozice) = "•"
MozneSektory = Filter(MozneSektory, "•", False)
Vysledek(Den, Delnik) = Sektor
Next Delnik
Next Den
.Range("E4").Resize(POCET_DNI, POCET_DELNIKU).Value = Vysledek
End With
End Sub
Rýchlejšie by to bolo asi cez kolekcie alebo nahrádzanie v stringu, ale myslím, že pre Vaše potreby je toto cez Filter aj tak ako delo na komára
Priamo v PQ asi cez NestedJoin.
Na hárku1 uvádzate oblasť C10:R20, čo je 176 hodnôt (11*16), na hárku2 uvádzate H10:H20, čo je 11 hodnôt. Ak by ste sa iba zmýlil, a na hárku1 je to vodorovne, tak by ste napísal C10:R10. Nie 20. Ale to aj tak nesedí, lebo je to 16 hodnôt. Na hárku2 je 11.
Dajte si prosím záležať, a napíšte správne oblasti.
Tým H10:H20 myslíte snáď H10:W20, nie? Ako by sme porovnali nerovnaké oblasti? Vyskakovacie okno na Vás vyblafne asi iba makrom. Nestačil by iba nápis v nejakej bunke, alebo vysvietené nezhodné hodnoty napr. na červeno ?
Obrázok??? To vážne? S manuálne nevytvorenou tabuľkou, znázorňujúcou príklad, ako by mal výsledok vyzerať?
Ide totiž ešte aj o nejaké podmienky, všakže? Aby napr. jeden človek nevyfasoval celý týždeň rovnaký sektor, alebo aby všetci nemali rovnaký sektor 2 po sebe, a mnohé ďalšie nad ktorými sa mi nechce zamýšľať. Že niektoré môžu ľahko vzniknúť je isté.
Takže priložte prílohu vo forme súboru xlsx, v ktorom tú tabuľku manuálne vyplníte, ako by mala vyzerať. Týmto Vás snáď prinútim pritom aj pouvažovať nad možnými neželanými stavmi/kombináciami
Ktoré nám samozrejme promptne zdelíte.
EDIT:
Jednoduché makro
Sub Generuj()
Dim Sek() As String, tS() As String, V() As String, i As Integer, y As Long, Nahoda As Long
Const POCET_RADKU As Long = 5
Const POCET_DELNIKU As Integer = 3
Randomize
With ThisWorkbook.Worksheets("Hárok1")
Sek = Split(Join(Application.Transpose(.Range("A4:A11").Value), ","), ",")
ReDim V(1 To POCET_RADKU, 1 To POCET_DELNIKU)
For y = 1 To POCET_RADKU
tS = Sek
For i = 1 To POCET_DELNIKU
Nahoda = Int(Rnd() * (UBound(tS) + 1))
V(y, i) = tS(Nahoda)
tS = Filter(tS, tS(Nahoda), False)
Next i
Next y
.Range("E4").Resize(POCET_RADKU, POCET_DELNIKU).Value = V
End With
End Sub
Vo Vašom príklade bude stačiť
"=SUMIFS($E$15:E" & cell.Row & ";$B$15:B" & cell.Row & ";$I$2)"
ale je to to najpomalšie riešenie, chodí po 1 bunke. Lepšie riešenie by bolo cez pole a vloženie vzorca naraz do oblasti. Viete si také urobiť, či mám Vám to spichnúť?
EDIT:
Podľa vzorca, je tá hľadaná hodnota v I2, nie?
Pridávam spomínané makro.
Sub pokus()
Dim B(), i As Long, y As Long, Prvni As Long, Radku As Long, rng As Range, Hledane
Const PRVNI_RADEK_DAT As Long = 15
With ThisWorkbook.Sheets("TEST")
Radku = .Cells(Rows.Count, "B").End(xlUp).Row - PRVNI_RADEK_DAT + 1
If Radku < 1 Then MsgBox "Žádné data v sloupci B", vbCritical: Exit Sub
If Radku = 1 Then ReDim B(1 To 1, 1 To 1): B(1, 1) = .Cells(PRVNI_RADEK_DAT, "B").Value Else B = .Cells(PRVNI_RADEK_DAT, "B").Resize(Radku).Value
Hledane = .Range("I2").Value
If IsEmpty(Hledane) Then MsgBox "Buňka s hledanou hodnotou I2 je prázdná", vbCritical: Exit Sub
For i = 1 To Radku
If B(i, 1) = Hledane Then
y = i + PRVNI_RADEK_DAT - 1
If rng Is Nothing Then Set rng = .Cells(y, "F"): Prvni = y Else Set rng = Union(rng, .Cells(y, "F"))
End If
Next i
End With
If Not rng Is Nothing Then rng.FormulaLocal = "=SUMIFS($E$15:E" & Prvni & ";$B$15:B" & Prvni & ";$I$2)"
End Sub
No poznámky:
Stačilo by použiť vzorec SUMIF, netreba SUMIFS.
Stačilo by mať v F na dostatočnú výšku tento vzorec, a nepotrebujete žiadne makro.
=IF($B15=$I$2;SUMIF($B$15:$B15;$I$2;$E$15:$E15);"")
=KDYŽ($B15=$I$2;SUMIF($B$15:$B15;$I$2;$E$15:$E15);"")
Vytvorte manuálne takú vzorovú tbl, ako by to malo vyzerať. Makrom to nebude problém.
PS: Pre priloženie prílohy sa musíte registrovať - Free
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.