< návrat zpět

MS Excel


Téma: Zjištění počtu řádků ve výběru rss

Zaslal/a 13.12.2023 17:48

ZačátečníkDobrý den,
potřebuji vypočítat počet řádků ve výběru oblasti dat označených uživatelem
For i = 1 To Selection.Rows.Count
If Not Selection.Rows(i).Hidden Then
pocet = pocet + 1
End If
Next i
vrátí správný počet vybraných řádků v souvislé oblasti dat i když je zapnutý filtr

Pokud však bude označena nesouvislá oblast dat, výsledek vrátí pouze počet první souvislé oblasti a další je ignorována.
Oblast na obrázku vrátí tímto algoritmem pouze pocet=7.

Jak vypočítat všechny vybrané řádky?
Díky za nakopnutí.

Příloha: png55787_vybrana_oblast.png.png (20kB, staženo 6x)
55787_vybrana_oblast.png.png
Zaslat odpověď >

#055788
elninoslov
Som zatiaľ len na mobile, tak zatiaľ len rada.
Musíte použiť najskôr cyklus
For Each ARE in Selection.EntireRow.Areas
A potom
For Each RIADOK in ARE.Rows
If Not RIADOK.Hidden Then

Alebo
...SpecialCells(xlCellTypeVisible)citovat
#055789
Začátečník
Super.
Díky
Edit
Lze jednoduše vyplnit pole konkrétními hodnotami z řádku v jednom cyklu aniž bych znal předem velikost pole?

idx=0
For Each oblast In Selection.EntireRow.Areas
For Each radekX In oblast.Rows
If Not radekX.Hidden Then
' zde např.
poleHodnot(idx,0)= hodnota1
poleHodnot(idx,1)= hodnota2
idx=idx+1
' ...
End If
Next radekX
Next oblast
citovat
#055790
elninoslov
Ak ide len o počet riadkov, ktoré sú označené (v akomkoľvek stĺpci) a zároveň viditeľné, stačí
pocet = Intersect(Selection.Parent.Columns(1), Selection.EntireRow).Cells.Count
Ale o to asi nepôjde.

Čo myslíte pod pojmom "pole"? Skutočný VBA Array()? Alebo oblasť buniek? Čo znamená naplniť hodnotami? Akými? Konštantou? Každá je variabilná a počítaná? Zložitosť a týchlosť zápisu bude záležať na množstve vecí. Napr. či sú zapisované stĺpce pri sebe alebo ob-stĺpce, či sú medzi hodnotami vzorce a pod. Čo predstavuje "poleHodnot(idx,0)"?

Musíte to podstatne upresniť, ideálne pomocou anonymizovanej prílohy formou súboru Excelu, kde bude znázornené čo máte, a manuálne vytvorené aj to čo má po úprave vzniknúť + popis podmienok, výpočtov dopĺňaných hodnôt a pod. V prílohe ale musíte zachovať štruktúru a formáty. Ak je niekde vzorec, nechajte ho tam. Je to dôležité napr., ak chcete hromadne zapisovať do viacerých nesúvislých stĺpcov/riadkov, tak sa dá použiť namiesto niekoľkonásobných zápisov, jeden, kde sa aj prepíšu nemenené hodnoty tými istými. Kvôli rýchlosti. To ale nie je celkom možné, ak sú tam vzorce.citovat
#055794
Začátečník
Díky za zjednodušení výpočtu.
Ano pojmem pole myslím VBA Array
jde o problematiku změny dat ve společném souboru na základě změny provedené u jednotlivce
zatím řešeno přes pole hodnot, které se přepisují do "společného" souboru (jakoby databáze).
pocet = Intersect(Selection.Parent.Columns(1), Selection.EntireRow).Cells.Count

ReDim aZaznam(pocet - 1, slKonec - 1)

For idx = 0 To UBound(aZaznam)
For i = 0 To slKonec - 1
aZaznam(idx, i) = "none" ' naplnění pole "bez změny"
Next i
Next idx

pocet = 0
For Each oblast In Selection.EntireRow.Areas
For Each radek In oblast.Rows
If Not radek.Hidden Then
hodnota = Cells(radek.Row, slZmena)
' změna hodnoty na opačnou
If hodnota = "ANO" Then
aZaznam(pocet, slZmena - 1) = "NE"
Else
aZaznam(pocet, slZmena - 1) = "ANO"
End If
aZaznam(pocet, slKonec - 1) = Cells(radek.Row, slKonec) ' ID měněného zázanmu
pocet = pocet + 1
End If
Next radek
Next oblast

na základě tohoto pole je pak následně aktualizován zdrojový soubor dat a aktualizují se pouze opravdu změněné hodnoty.
Zatím jsem nepřišel na lepší způsob sdílení dat s použitím maker a kontrol aniž by došlo ke konfliktu sdílení nebo ztráty dat.citovat
#055835
elninoslov
No ja neviem. To aktualizujete iba tie hodnoty, ktoré sú označené Selectom ? A to pole je iba ako infolog a súvisí to nejako s témou "Vybrané řádky do pole"? Idete bunku po bunke, to je pomalé. Čo je slKonec? Dodajte anonymizované prílohy oboch súborov a pozriem na to, či to lepšie poberiem. Ale v stĺpcoch kde sú vzorce nechajte nejaké vzorce, tam kde sú hodnoty, nechajte hodnoty rovnakého typu. Stačí pár riadkov.citovat
#055836
Začátečník
Pokusil jsem se něco nasimulovat.
Ano ve zdrojovém souboru dat se aktualizují pouze vybrané řádky podle ID jednotlivých záznamů.
Ano souvisí to částečně s tím tématem - ale je to jiná funkcionalita.

Popisy sloupců a počet jsou neměnné, slKonec=poslední použitý sloupec (ID záznamu).

Ovládací soubor má více funkcionalit pro různé typy uživatelů, kteří k němu přistupují (celkem cca 40-50 uživatelů s různými požadavky). Zjednodušeně lze definovat skupiny uživatelů jako zadavatel, servis, vystupní kontrola, fakturace.
Každá skupina uživatelů ovlivňuje jiný sloupec, ale pro celkový přehled zpracování dat je pro všechny uživatele stejný náhled na data prostřednictvím "Ovládacího" souboru.

EDIT:
na listu jsou pouze hodnoty, datové typy jsou ošetřeny individuálné (vím co umí excel s datovými typy provést 5 ).
Příloha: zip55836_ukazka.zip (26kB, staženo 0x)
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

Vynásobit hodnoty kurzem - Power Query

Alfan • 26.4. 7:56

Relativní cesta - zdroje Power Query

Alfan • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

elninoslov • 26.4. 7:54

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21