Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
práce s buňkami (oblastmi buněk) na základě požadovaných podmínek - počet, barvy, velikost, ...
Aktualizace:1.9.2013
Při práci v Microsoft Excelu je někdy potřeba použít kód pro práci s buňkami. Proč jej vymýšlet a nepoužít hotové - ověřené řešení. V tomto článku jsou praktické ukázky kódu, které tyto problémy řeší:
Každá věc se dá vyřešit několika způsoby. Záleží na požadované rychlosti, zkušenostech s programováním (na co je mi efektní kód kterému nerozumím).
Požadavek na funkci, které v označené oblasti spočte buňky, které mají stejnou barvu pozadí jako označená buňka.
Function SpoctiBarvuPozadi(Rng As Range, RngColor As Range) As Integer
Dim Bunky As Range
Dim Barva As Long
Barva = RngColor.Range("A1").Interior.Color
For Each Bunky In Rng
If Bunky.Interior.Color = Barva Then
SpoctiBarvuPozadi = SpoctiBarvuPozadi + 1
End If
Next Bunky
End Function
Poznámka: Kód umístit do Modulu.
Do buňky v listu se vloží tato nová uživatelská funkce:
=SpoctiBarvuPozadi(oblast;buňka)
Popis argumentů:
V oblasti A1:A4, spočte buňky které mají stejné pozadí jako buňka A1.
=SpoctiBarvuPozadi(A1:A4;A1)
Jak zjistit jakou barvu má pozadí v buňce.
CellColor = Cells(1, 1).Interior.ColorIndex
MsgBox CellColor
CellColor = Cells(1, 1).Interior.ColorIndex
MsgBox CellColor
Jak zjistit kolik buněk v dané oblasti má požadovanou barvu.
For a = 1 To 10 Step 1
If Cells(a, 1).Interior.ColorIndex = 3 Then
ColorPočet = ColorPočet + 1
End If
Next a
MsgBox ColorPočet
Potřebujeme spočítat počet buněk v zadané oblasti, které mají shodné pozadí jako buŇka A1.
CellColor = Cells(1, 1).Interior.ColorIndex
For A = 1 To 10 Step 1
If Cells(A, 1).Interior.ColorIndex = CellColor Then
ColorPočet = ColorPočet + 1
End If
Next A
MsgBox ColorPočet
Další kódy v přípravě
Pokud máte zajímavý kód o který se chcete podělit, můžete zapsat do komentářů.
Článek byl aktualizován: 19.09.2020 11:06
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 04.01.14 17:06
Tohle secte hodnoty v bunkach, ktere maji shodnou barvu :)
Function soucetbunekstejnebarvy(Rng As Range, RngColor As Range) As Integer
Dim Bunky As Range
Dim Barva As Long
Dim pocet As Integer
pocet = 0
Barva = RngColor.Range("A1").Interior.Color
For Each Bunky In Rng
If Bunky.Interior.Color = Barva Then
soucetbunekstejnebarvy = Bunky.Value + soucetbunekstejnebarvy
End If
Next Bunky
End Function
Přidáno: 27.07.14 06:57
To Migi: Díky za doplnění zajímavého a užitečného kódu.
Přidáno: 16.09.14 14:19
Udelal sem malou modifikaci vyse zmineneho kodu. Takze treba nekdo hleda neco podobneho, a tak mu to muze pomoct.
Jsou to funkce na spocitani barevneho pozadi a barvy fontu podle zadane bunky (rWhatColor). s tim ze se to vykovana na "zvolenem" listu (SheetTarget) "zvoleneho" sesitu (WBName).
Function CountInteriorColor(WBName As String, SheetTarget as String, rWhatColor As Range) As Integer
Dim LastFullColumn, LastFullRow As Integer
Dim rCells, rRange As Range
Dim CellColor As Long
'init
Workbooks(WBName).Worksheets(SheetTarget).Activate
LastFullRow = Workbooks(WBName).Worksheets(SheetTarget).Cells(Rows.Count, 1).End(xlUp).Row
Set rRange = Range(Cells(2, 1), Cells(LastFullRow, 1))
CellColor = rWhatColor.Interior.Color
For Each rCells In rRange
If rCells.Interior.Color = CellColor Then
CountInteriorColor = CountInteriorColor + 1
End If
Next rCells
End Function
Function CountFontColor(WBName As String, SheetTarget as String, rWhatColor As Range) As Integer
Dim LastFullRow As Integer
Dim rCells, rRange As Range
Dim CellColor As Long
'init
Workbooks(WBName).Worksheets(SheetTarget).Activate
LastFullRow = Workbooks(WBName).Worksheets(SheetTarget).Cells(Rows.Count, 1).End(xlUp).Row
Set rRange = Range(Cells(2, 1), Cells(LastFullRow, 1))
CellColor = rWhatColor.Font.ColorIndex
For Each rCells In rRange
If rCells.Font.ColorIndex = CellColor Then
CountFontColor = CountFontColor + 1
End If
Next rCells
End Function
Přidáno: 21.09.15 08:17
Ahoj, můžeš mi prosím někdo poradit ?
Mám jeden jednoduchý zdrojový sešit , který se mi generuj z webu a má hodnoty jen ve sloupci A. Někdy jsou vyplněny třeba jen 3 buňky jindy třeba 60. Druhý cílový sešit je připravený se vzorci a já potřebuji do jeho sloupce A přidat buňky ze zdrojového sešitu ze sloupce A. Říkal jsem si, že není nic jednoduššího, ale narazil jsem. Já to zkrátka nedokážu. Potřeboval aby ty buňky se do cílového sešitu přidávaly, protože jich je pokaždé jiný počet a kdybych třeba kopíroval víc buněk, narazil bych na konec sloupce, kde mám vzorec pro součet. Já jsem zatím dokázal jen tohle:
Workbooks.Open Filename:=Environ("TEMP") & "\Rozpis.xls" 'sem se zapíše sešit vygenerovaný z webu a otevřu ho.
Workbooks("Rozpis.xls").Sheets("Rozpis").Select 'tady ho vyberu
pocradku = Workbooks("Rozpis.xls").Sheets("Rozpis").Cells(Rows.Count, "A").End(xlUp).Row 'tady si najdu kolik buněk se bude kopírovat
Můžeš mi tedy prosím poradit co dál ? Díky
Přidáno: 11.01.16 17:21
Ahoj, mohu poprosit o radu, jak tu funkci "SpoctiBarvuPozadi" modifikovat, aby spočítala i barvu buňky určenou podmíňěným formátováním? děkuji JB
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |