Makro nebo podmíněné formátování Vyřešeno

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Makro nebo podmíněné formátování

Příspěvekod Branscombe » 13 črc 2010 12:46

Ahoj, v příloze je soubor kde bych potřeboval naprogramovat formátování buněk tak jak je naznačeno a nevím zda-li pomocí VBA nebo pomocí podmíněného formátování. Co je jednodušší ??

Zadání - pokud je ve sloupci "C" je jakákoliv hodnota naformátuj buňku příslušného řádku a sloupce (dle sloupce A a B) v oblasti G2:G77
Příklad pro první řádek: Datum = 2010-01 což je sloupec "M", Kód = 110 což je řádek "7", ve sloupci C <> "", naformátuj buňku "M7"

Myslím si že by to šlo přes podmíněné formátování, ale nevím jestli by to nebylo moc složité.
Doufám že jsem to napsal srozumitelně a předem díky za rady...
Přílohy
akce.xlsx
(10.69 KiB) Staženo 41 x

Reklama
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Makro nebo podmíněné formátování

Příspěvekod navstevnik » 13 črc 2010 14:54

Podminene formatovani by bylo mozno pouzit za predpokladu, ze vyskyt data ve sloupci A:A je jedinecny. Protoze tomu tak neni, je navrzena procedura, ktero je zapotrebi zavolat pri zmenach v oblastech dat.
Procedura odstrani formatovani v bloku G2:R16 a pak postupne ve smyckach hleda pozadovanou shodu pro formatovani v bloku G2:R16.
Vzhledem k jednoznacnemu vymezeni jednotlivych bloku dat v ukazce, jsou tyto bloky v procedure staticke.

Kód: Vybrat vše

Option Explicit

Sub PodmineneFormatovani()
  Dim DBlk As Range, DCll As Range
  Dim KBlk As Range, KCll As Range, OfsC As Integer
  Dim HBlk As Range, HCll As Range
  With Worksheets("list1")
    With .Range("g2:r16") ' ostranit stary format
      .Interior.ColorIndex = xlNone
      .Font.Bold = False
    End With
    Set DBlk = .Range("a2:a16")  ' blok bunek ve sloupci A:A - datum
    Set KBlk = .Range("e2:e16")  ' blok bunek ve sloupci E:E - kod
    Set HBlk = .Range("g1:r1")  ' blok bunek v radku G1:R1 - hlavicky sloupcu
  End With
  OfsC = 2
  For Each HCll In HBlk.Cells  ' prochazi blok hlavicek
    For Each DCll In DBlk.Cells ' prochazi blok Datum
      If DCll.Value = HCll.Value Then ' pri shode
        For Each KCll In KBlk.Cells ' prochazi blok Kod
          If KCll.Value = DCll.Offset(0, 1).Value Then ' pri shode
            With KCll.Offset(0, OfsC) ' vlozi format bunky pozadi a font
              .Interior.ColorIndex = 6
              .Font.Bold = True
            End With
          End If
        Next KCll
      End If
    Next DCll
    OfsC = OfsC + 1 ' ofset pro dalsi sloupec v bloku G2:R16
  Next HCll
  Set KCll = Nothing
  Set KBlk = Nothing
  Set DCll = Nothing
  Set DBlk = Nothing
  Set HCll = Nothing
  Set HBlk = Nothing
End Sub

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Makro nebo podmíněné formátování

Příspěvekod Branscombe » 13 črc 2010 15:05

Super, díky moc ...

Uživatelský avatar
Branscombe
Level 3
Level 3
Příspěvky: 469
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline

Re: Makro nebo podmíněné formátování

Příspěvekod Branscombe » 14 črc 2010 09:30

Ahoj, nějako mi to přestalo fungovat a nevím proč. Soubor v příloze. Rád bych pochopil kde jsem udělal chybu, tak jestli můžeš tak mi prosím jen naznač kde je problém a já to zkusím předělat sám.
Přílohy
akce.xlsm
(22.97 KiB) Staženo 26 x

navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: srpen 08
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Makro nebo podmíněné formátování  Vyřešeno

Příspěvekod navstevnik » 14 črc 2010 12:40

Prestalo fungovat v dusledku:
1. zmena sloupce Kod z E:E na D:D a neopravils dusledne v procedure; opraveno.
2. neopravils vychozi hodnotu OfsC v dusledku vyse uvedene zmeny; upraveno v procedure, vychozi hodnota je odvozena od bloku HBlk a KBlk
3.nejednotnost typu vlozenych hodnot kodu ve sloupcich B:B a D:D, nekde cislo a jinde retezec, ukazka mela jednotny typ, takze jsem predpokladal, ze tomu bude tak i nadale; nelze porovnat cislo a retezec, upraveno v procedure, prevod retezce na hodnotu. Doprucuji pred vkladanim hodnoty kodu vyprazdnit sloupce, jednotne naformatovat, bud text nebo vlastni format 000 (tri nuly) a pote vkladat hodnoty kodu, v pripade typu retezec neni 058 totez co 58, totez by melo platit pro hlavicky G1:R1 a sloupec Datum - A:A.
Dale v procedure upravena podminka pro formatovani - pridana neprazdna bunka v G2:Rxx
Upravena a doplnena procedura v dusledku zmeny obsahu sloupcu, osetreni typu Kod a neprazdnych bunek:

Kód: Vybrat vše

Option Explicit

Sub PodmineneFormatovani()
  Dim DBlk As Range, DCll As Range
  Dim KBlk As Range, KCll As Range, OfsC As Integer
  Dim HBlk As Range, HCll As Range
  With Worksheets("list1")
    With .Range("g2:r72")  ' ostranit stary format v G2:Rxx
      .Interior.ColorIndex = xlNone
      .Font.Bold = False
    End With
    Set DBlk = .Range("a2:a72")  ' blok bunek ve sloupci A:A - datum
    Set KBlk = .Range("d2:d72")  ' blok bunek ve sloupci D:D - kod
    Set HBlk = .Range("g1:r1")  ' blok bunek v radku G1:R1 - hlavicky sloupcu
  End With
  OfsC = HBlk.Column - KBlk.Column  ' vychozi hodnota ofsetu sloupcu G:G a K:K
  For Each HCll In HBlk.Cells  ' prochazi blok hlavicek
    For Each DCll In DBlk.Cells  ' prochazi blok Datum
      If DCll.Value = HCll.Value Then  ' pri shode
        For Each KCll In KBlk.Cells  ' prochazi blok Kod
          ' pri shode a neprazne bunce v G2:Rxx
          If Val(KCll.Value) = Val(DCll.Offset(0, 1).Value) And KCll.Offset(0, OfsC) <> vbNullString Then
            With KCll.Offset(0, OfsC)  ' vlozi format bunky pozadi a font
              .Interior.ColorIndex = 6
              .Font.Bold = True
            End With
          End If
        Next KCll
      End If
    Next DCll
    OfsC = OfsC + 1  ' ofset pro dalsi sloupec v bloku G2:Rxx
  Next HCll
  Set KCll = Nothing
  Set KBlk = Nothing
  Set DCll = Nothing
  Set DBlk = Nothing
  Set HCll = Nothing
  Set HBlk = Nothing
End Sub

PS.: mozna bude vhodne pouzit pro bloy dat dynamickou definici, procedura bude nezavisla na poctu radku a sloupcu


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Podmíněné formátování poměru Příloha(y)
    od veselypettr » 25 kvě 2023 14:01 » v Kancelářské balíky
    7
    1972
    od veselypettr Zobrazit poslední příspěvek
    31 kvě 2023 14:00
  • Formatování SD karty
    od P. Sedlacek » 18 kvě 2023 14:27 » v Mobily, tablety a jiná přenosná zařízení
    7
    1597
    od mmmartin Zobrazit poslední příspěvek
    19 kvě 2023 10:07
  • Formátování SSD před prodejem
    od Honzis » 05 čer 2023 23:16 » v Vše ostatní (hw)
    11
    1233
    od Cemada Zobrazit poslední příspěvek
    06 čer 2023 13:07
  • Makro pro myš Rapture Python
    od mmmartin » 27 srp 2023 15:18 » v Problémy s hardwarem
    9
    1233
    od mmmartin Zobrazit poslední příspěvek
    29 srp 2023 16:47

Zpět na “Kancelářské balíky”

Kdo je online

Uživatelé prohlížející si toto fórum: DotNetDotCom.org [Bot] a 6 hostů