< návrat zpět

MS Excel


Téma: Nesrovnalosti v Excelu rss

Zaslal/a 7.10.2016 15:10

Už jsem asi blázen... Dělám revizi svých řešení. Léta jsem učil něco, co je najednou jinak, a to ve verzi Excelu, ve které jsem to měl vyzkoušené...

Pár postřehů z poslední doby (Windows 10 CZ, Excel 2010 CZ SP2, externí monitor, grafika AMD)

Výchozí šířka buňky je na mém externím monitoru 8,38 namísto "naučených" 8,43 (výchozí Calibri 11)

U starších sešitů se mi rozjebalo měřítko vložených tvarů ve vodorovném směru. (Tohle bych přisuzoval buď Windows 10, které pořád nejsou schopné korektní práce na více monitorech, nebo to dělá grafika, jejíž ovladače už pro AMD dělá jiná firma a která i dost často zamrzala.)

Ve VBA Array (oproti některé literatuře) vždy vracelo pole s dolní mezí 1 (bez užití Option Base). Nyní je dolní mez prostě nula.

Výsledkem překlopení jednořádkové oblasti do pole bylo tuším jednorozměrné pole (čili jednorozměrné pole bylo ekvivalentem jednořádkové oblasti buněk). Teď je jakákoliv oblast překlopená do pole "dvourozměrná".

Windows 8/8.1/10 "ztrácí" zástupce nemaximalizovaných sešitů Excelu v systémové liště.

Jsem zvědavý, na co ještě přijdu...

Děje se něco z toho i vám?

Zaslat odpověď >

Strana:  1 2   další »
#033017
kabaka
...ja k win 10 len toľko, že tento software má ešte nevychytané muchy a je stále problémový, takže sa týmto problémom vôbec nečudujem... (...my máme doma aj v robote staré dobré XP...aj keď je pravda, že už je pomalé)

pozri
http://www.porada.sk/t267205-windows-10-a.htmlcitovat
#033018
avatar
Porovnal jsem dva počítače, které mám teď k dispozici. Oba mají čerstvě updatovaný W-10. V jednom je E-2007 s procesorem Intel I5 a s monitorem HD, ve druhém E-2010 s procesorem AMD a monitorem 1600x900. Potvrzuji, že u obou Excelů se mi v posledních dnech změnila základní šířka sloupce z 8,43 na 8,38.
U polí mi v obou počítačích funkce SPLIT produkuje vždy jednorozměrný Array s LBound = 0, přiřazení Pole = Range mi produkuje zásadně dvourozměrné pole s oběma LBound = 1.citovat
#033019
avatar
Split ano, ten produkoval vždy "bezohledně" pole s dolní mezí nula (ono VB.NET se s tím už vůbec netento a mně to prostě nesedí, nabourává to myšlení u algoritmů, první člen má mít prostě index 1 a basta :-). Každopádně v hlavě prostě mám, že jednořádková oblast buněk reprezentovala jednorozměrné pole, čili, že jednorozměrné pole mělo vodorovný charakter. A teď to tak není. Krom jiného začínám už upouštět od překlápění přes Transpose, ta holka mizerná prostě degraduje datumy. A mám momentálně dost sešitů, ve kterých není dodržen definovaný poměr stran u tvarů. Vodorovně jsou rozjeté. Bych vraždil u sešitů, kde si člověk hraje na každý pixel. Ty sešity jsou doslova zničené.citovat
#033039
avatar
U funkce Split jsem se s LBound=0 smířil tím, že nultý prvek zpravidla plním nějakou formální hodnotou (např. popisným textem) a pole používám logicky až od indexu 1. U vazby polohy Cells a Shapes se mi osvědčilo využití vlastností Top a Left, které jsou pro oba typy objektů definovány shodně. Žádný způsob, jak jednoduše získat z jednořádkové oblasti jednorozměrný Array, jsem neobjevil (i když by se mi to občas hodilo). Zato s výhodou využívám Cells s jedním indexem, který mi umožňuje pracovat shodně s jednořádkovou i jednosloupcovou oblastí. Často tím lze obejít potřebu transpozice oblasti.citovat
icon #033042
eLCHa
@xlnc
Krom jiného začínám už upouštět od překlápění přes Transpose, ta holka mizerná prostě degraduje datumy.

Nejen to. Ona je i hrozně omezená - max 65536 prvků (což je mimochodem i tak vlastně zbytečné, když sloupců je 16384). Ale hlavně poooomaaaaláááá.

Dej si do oblasti A1:A65536 nějaká data - když už se bavíme o datumech, tak jsem tam měl datum - celou ji označ a spusť si tyto 2 procedury:Sub test()
Dim t As Double
t = Evaluate("=NOW()")

Dim i As Byte
Dim a
For i = 0 To 254
a = Application.Transpose(Application.Transpose(Selection.Value))
Next i
Debug.Print WorksheetFunction.Text(Evaluate("=NOW()") - t, "m:ss.000")
End Sub

Sub test2()
Dim t As Double
t = Evaluate("=NOW()")

Dim i As Byte, j As Long
Dim a, b()
For i = 0 To 254
a = Selection.Value
ReDim b(LBound(a, 1) To UBound(a, 1))
For j = LBound(b) To UBound(b)
b(j) = a(j, UBound(a, 2))
Next j
Next i
Debug.Print WorksheetFunction.Text(Evaluate("=NOW()") - t, "m:ss.000")
End Sub

Musím Transpose provést 2x a výsledek
test => 0:50.200
test2 => 0:03.760

Na druhou stranu - jak často načítáš 65k dat 255x za sebou, že ano. V každém případě bychom měli používat ten druhý postup, protože tam máme vše pod kontrolou a vše si můžeme určit. Nicméně to nedělám, protože Transpose je tak nějak pohodlnější a jestli něco trvá 0,1s nebo 0,2 s mi nevadí. Důležité je o tom vědět.

Pokud jde o to rozhození - tam je excel sfiňa a nikdy na něj nebyl spoleh. Asi to máš něco jiného, ale win 10 mi automaticky po instalaci nastavily zobrazení na 125% a to dělá v excelu s prvky neplechu.citovat
icon #033043
eLCHa
A jen tak mimochodema = Evaluate("=TRANSPOSE(" & Selection.Address & ")")nevrátí text, ale ani datum. Alespoň vrátí číslo (Double)citovat
#033045
avatar
Transpose a její jednoduché/dvojité užití jsem bral tak, že oblast "povýšila do maticové podoby/pole". Jednorozměrná pole jsem měl radši, protože jsem měl u nich jistotu, že na nich bude fungovat pod VBA Match. A opět, dlouho jsem měl za to, že pro ni MUSÍ být pole jednorozměrné. Ona je kromě jiného Transpose nepoužitelná u recordsetů "ToArray", které mají převrácenou orientaci, obzvláště, když se do toho přimotá Null. Takže ano, používám cykly a testuju datový typ. Ale o to tady nejde.

V Excelu se mi dějí věci na pozadí a potichu, a to mě se.. Jak kdyby mi tam běhali trpaslíci a já o nich neměl tušení. Už stačí to, že nemaximalizované sešity "po pěti minutách" ztrácí své zástupce v systémové liště. Fajn, ať si to dělají nové verze, ale ne, že mi někdo bude zpětně bez pardonů ku.vit Excel 2010. A věřím, že přinejmenším za půlku toho můžou Windows 10.citovat
#033046
avatar
Ono u toho datumu... klient se mě tuhle zeptal, jak je to s Value a Value2 a vlastně mě dostal, protože jsem od boku nevěděl zdaleka všechno. A není to tak úplně jednoduché. Vlastně se mi vykouřilo z hlavy, že Value2 umožňuje i zápis. Kdo ví, proč Value vlastně zohledňuje Currency, když tím může být i nebezpečná při zakrouhlování, proč Value2 u datumu vrací Double (?) a interní hodnotu. Použili jste někdy vůbec Value2 pro zápis? Zas je to už ale trochu filozofie mimo původní myšlenku vlákna.citovat
icon #033047
eLCHa
Přiznám se dobrovolně. O Value2 vím, několikrát už jsem hledal k čemu je a vždycky to úspěšně zapomněl. A nikdy jsem ji nepoužil. Takže ani nevím, jestli je to škoda nebo ne ;)) .citovat
#033054
avatar
Ahoj, že by:
Value2 se nestará o formáty => je rychlejší?citovat

Strana:  1 2   další »

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje