< návrat zpět

MS Excel


Téma: Makro - skrývání buněk na základě hodnot buněk rss

Zaslal/a 25.4.2016 9:14

Dobrý den,
prosím o pomoc s tvorbou makra, které by skrývalo řádky a sloupce ve 4. listu na základě hodnot buněk "D1" a "B2" (Buňka D1 obsahuje vzorec, který nabývá hodnot 1 nebo 2. Buňka B2 je buďto PRAVDA nebo NEPRAVDA.) ve 2. listu následujícím způsobem:
Pokud je hodnota D1 = 1, skryje se ve 4. listu řádek 1 a řádek 2 zůstává a všechny sloupce zůstávají. Pokud je D1 = 2 skryje se ve 4. listu řádek 2 a řádek 1 zůstává a zároveň pokud je B2 = PRAVDA, skryje se ve 4. listu ještě sloupec B.
Potřebuji, aby se to chovalo "dynamicky", tedy pokud je hodnota D1 nejprve 1 - řádky jsou skryty a poté se hodnota změní na 2 - řádky (sloupce) se odkryjí a opačně.

Děkuji za pomoc.

...zatím se mi podařilo sepsat toto, ale to první makro nějak nevolá to druhé automaticky, musím ho spouštět ručně...

Private Sub Worksheet_Calculate1()
If Range("D1") <> "" Then
Application.EnableEvents = False
Call Skrývání_sloupců_a_řádků
Application.EnableEvents = True
End If
End Sub

Private Sub Skrývání_sloupců_a_řádků()

If Range("D1").Value = 1 Then
Sheets(4).Rows("1").Hidden = True
Sheets(4).Rows("2").Hidden = False
End If
If Range("D1").Value = 2 Then
Sheets(4).Rows("1").Hidden = False
Sheets(4).Rows("2").Hidden = True
If Range("B2").Text = "PRAVDA" Then
Sheets(4).Range("B:B").Columns.Hidden = False
Else
Sheets(4).Range("B:B").Columns.Hidden = True
End If

End If

End Sub

Zaslat odpověď >

#031246
elninoslov
Asi by som to urobil cez Change, nie cez Calculate:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim H1, H2
If Not Intersect(Target, Union(Range("D1"), Range("B2"))) Is Nothing Then
H1 = Range("D1")
If H1 <> "" Then
Application.EnableEvents = False
H2 = Range("B2")
Call Skrývání_sloupců_a_řádků(H1, H2)
Application.EnableEvents = True
End If
End If
End Sub

Private Sub Skrývání_sloupců_a_řádků(H1, H2)
With Sheets(4)
If H1 = 1 Then
.Rows(1).Hidden = True
.Rows(2).Hidden = False
.Columns(2).Hidden = False
Else
If H1 = 2 Then
.Rows(1).Hidden = False
.Rows(2).Hidden = True
.Columns(2).Hidden = (H2 = True)
End If
End If
End With
End Sub
citovat
#031247
elninoslov
Môžete použiť aj Calculate, ale musíte niekde v liste načítať hodnotu zo zmenených buniek, a toto načítanie skryť (napr v stĺpci určenom iba na to, najlepší by bol stĺpec A a všetko ostatné posunúť).
Máte tam obe metódy, ale Change je teraz odstavená, je premenovaná, číslo 1 v názve. Teda teraz je to len cez to Calculate.
Niečo si vyberte...
Příloha: zip31247_skryvanie-s-podmienkou.zip (16kB, staženo 32x)
citovat
#031248
avatar
Tak ta verze s Calculate funguje jak potřebuji, díky moc!

Ještě Vás prosím o radu, jak makro upravit když budu chtít přidat více "řídících buněk". Tedy abych byl konkrétní: ve skutečnosti buňka D1 nabývá hodnot 1 - 8, pro každou hodnotu se skryjí určité kombinace řádků. Když je D1 = 2 skryjí se navíc ještě určité kombinace sloupců podle toho které z buněk B2 - B9 jsou PRAVDA / NEPRAVDA.
Vím, popisuji to složitě, ale jednodušeji to asi nejde.
Díky.citovat
#031251
elninoslov
My tie podmienky ale nepoznáme, tak si ich tam doplnte. Myslím, že kód je pochopiteľný. V premennej H1 je hodnota z bunky D1, a v premennej H2 je pole hodnôt z buniek B2:B9 zostavené podľa indexov:

H2(1,1) = hodnota bunky B2
H2(2,1) = hodnota bunky B3
H2(3,1) = hodnota bunky B4
H2(4,1) = hodnota bunky B5
H2(5,1) = hodnota bunky B6
H2(6,1) = hodnota bunky B7
H2(7,1) = hodnota bunky B8
H2(8,1) = hodnota bunky B9

Za "Case X:" - kde "X" je číslo z D1, si vždy urobte čo sa má pri tejto hodnote "X" stať.

Teda tie Vaše tajuplné podmienky si už zvládnete urobiť. 1 (alebo dodajte presné inštrukcie pre každú kombináciu)

Ja som urobil len len pre D1=1 a D1=2, aj to som si tipol ...

PS: A ešte som zabudol, že stĺpec F v List2, je schovaný. Sú v ňom odkazy na "riadiace bunky" - bunky spúšťajúce Calculate. Pretože samotná zmena napr. bunky D1 nevyvolá Calculate, ale ak je niekde odkaz "=D1", tak to už Calculate vyvolá.
Příloha: zip31251_skryvanie-s-podmienkou-2.zip (17kB, staženo 34x)
citovat
#031252
avatar
Děkuji, velice jste mi pomohl. Myslím, že podmínky už budu schopen dotvořit sám. Je jich tolik, že než bych je vypsal sem, už je budu mít v kódu :-)
Na shledanou.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Jak odstraním duplicitní údaje

Mirek8 • 24.4. 6:02

Relativní cesta - zdroje Power Query

elninoslov • 23.4. 19:33

Vyhledej

elninoslov • 23.4. 18:54

Vyhledej

PavDD • 23.4. 12:29

Vyhledej

PavDD • 23.4. 11:47

Relativní cesta - zdroje Power Query

Alfan • 23.4. 10:52

Relativní cesta - zdroje Power Query

elninoslov • 23.4. 10:22