< návrat zpět

MS Excel


Téma: IsUsedRangeContinuousArea rss

Zaslal/a 18.2.2020 10:12

Zdravím makromilce!
Jak ověřit je-li UsedRange na listu souvislá oblast?
UsedRange vrací pouze jednu Area ?
Vždy je počet UsedRange.Areas = 1 ?
Prostě žádné vynechané celé prázdné řádky nebo celé prázdné sloupce, kontrola oblasti před zpracováním.
Oblast však nemusí začínat na prvním řádku s rohem v A1, ale taky například třeba v C3.
Za případné reakce předem děkuji.

Zaslat odpověď >

#045935
avatar
UsedRange.Areas.Count je vždy = 1

Pokud vybereš nesouvisle oblast, tak to poznáš příkazem selection.areas.count, tam to bude > 1

Dotaz zněl na UsedRange, ale není známo, čeho chceš dosáhnout. Možná, že se dá použít jiných vlastností či metod objektu Range ...citovat
#045936
elninoslov
Areas za iných okolností áno, ale nie v UsedRange. Tu by sa muselo asi zisťovať po jednom, či bunka obsahuje rám, podmienený formát, overenie údajov a pod. Samozrejme hodnotu, ale tá by sa ako jediná dala testovať rýchlo cez pole, či hromadne cez SpecialCells, prípadne maticovým EVALUATE s testom riadkov aj stĺpcov. Jednoduché to nebude.citovat
#045941
avatar
S odmlkou oprašuji své chabé znalosti VBA a vidím, jak tady pořád řádíte, tak jsem se pustil do pokusů s hrnkem silné kávy. Když došla, tak jsem sem napsal dotaz... 1

Pak je tu ještě CurrentRegion, ale pokud UsedRange je nesouvislá oblast, která zrovna nezačíná na buňce A1, tak Cells(1).CurrentRegion vrátí oblast která buňku zahrnuje, ačkoli je buňka A1 prázdná, za poslední buňkou oblasti vrácené CurrentRegion je prázdný řádek i sloupec.

Chápu návrh použít SpecialCells s parametrem na prázdné buňky, ale stejně bude nutné to dále nějak rozpitvat.

Evaluate jsem už někde zahlídnul, ale netuším, jak to myslíte s tím testem, to bych chtěl určitě zkusit.

Budou-li kolem oblasti obsahující data naformátované buňky bez hodnot, tak budou zahrnuty do UsedRange, že?

Zapomeneme-li orámování, podmíněné formátování, barvičky..

Předpokládejme, že někde v listu má být ke zpracování jediná souvislá oblast s hodnotami, případně znám předem počet sloupců, počet řádků je neznámý.

Můžete prosím otestovat, zda lze pomocí vlastní funkce níže dosáhnout požadovaného výsledku :
Function IsUsedRangeContinuousArea(Optional ByVal Sh As Object, _
Optional ByVal ExpectedColumnsCount As Integer) As Boolean
If Sh Is Nothing Then Set Sh = ActiveSheet
On Error GoTo Exit_Function
If Not TypeOf Sh Is Worksheet Then Exit Function 'Sh.Type = xlWorksheet

Dim ru As Range: Set ru = Sh.UsedRange
Dim rc As Range: Set rc = ru.Cells(1).CurrentRegion
If rc.Rows.Count = ru.Rows.Count And rc.Columns.Count = ru.Columns.Count Then
If ru.Cells.Count > 1 Then
If Not ExpectedColumnsCount > 0 Then
IsUsedRangeContinuousArea = True
Else
If ExpectedColumnsCount = ru.Columns.Count Then
IsUsedRangeContinuousArea = True
End If
End If
End If
End If
Exit_Function:
End Function


Dalším krokem by mohlo být ověření záhlaví sloupců, je-li známo...citovat
#045947
avatar
Že by takto?
Sub Makro1()
If ActiveSheet.UsedRange.Cells.Count = ActiveSheet.UsedRange.Cells(1).CurrentRegion.Cells.Count Then
MsgBox "jedna súvislá oblasť"
Else
MsgBox " viac oblastí"
End If
End Sub


https://www.excel-easy.com/vba/examples/areas-collection.htmlcitovat
#045951
avatar
marjankaj: Moc díky, jednoduché a geniální.

Díky tomu mi došlo, že oblast může mít jen jeden sloupec a ke zpracování bude jediná buňka, pouze záhlaví a žádné řádky.

Pro prázdný list UsedRange vrátí jedinou prázdnou buňku.
Je-li prázdná pomocí IsEmpty(UsedRange.Cells(1))?
Očekávám nějakou zradu...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

odpocet a storno tl.

PavDD • 28.3. 8:53

odpocet a storno tl.

Začátečník • 26.3. 14:39

odpocet a storno tl.

PavDD • 26.3. 10:22

odpocet a storno tl.

elninoslov • 26.3. 7:50

odpocet a storno tl.

PavDD • 26.3. 7:26

odpocet a storno tl.

elninoslov • 25.3. 22:34

odpocet a storno tl.

Začátečník • 25.3. 15:09