Do OneDrive sa púšťať nebudem. Čo si tak pamätám, tak je problém získať rovnaký typ adresy, ako v akýchkoľvek návodoch. Potom inak je to v OD Personal a inak v OD Business. Načítať adresárovú štruktúru sa asi nedá. Problém s povereniami. MS inštruuje - stiahnite si súbory do PC alebo prejdite na SharePoint :) Ak súbor zmažete a nahradíte súborom s rovnakým názvom, nesedí link. No je to hrôza.
Ak máte ale tie súbory s OD synchronizované, teda máte ich v PC v zložke OneDrive, tak by to malo fungovať ako normálna PC zložka.
Ak sa Vám chce čítať množstvo problémov, pohľadajte niečo v zmysle "powerquery onedrive folder structure"...
Nemôžete použiť formát súboru XLSX? Pri ukladaní do XLS sa stratí možnosť voľby mesiaca, ak je na druhom liste. Predsa len Office pre XLSX je od roku 2007.
EDIT: Tak XLSX...
Ak máte Office 2021/2024/365 tak mi to pošlite mailom alebo na nejaké verejné úložisko to capnite (Google Disk a pod). Samozrejme iba ak je to zverejniteľné.
Pr.
Ako píše "€Ł мσşqμΐτσ", treba pridať príklad takých dát. Inak aký máte Excel? V novších verziách sa dá načítať PDF do PowerQuery, a tam by sa to možno dalo ošetriť (podľa toho ako to PDF vyzerá).
Toto znamená, že sa prvý znak vloží do výsledku bez kontroly, a cyklus začína na znaku 2.
...
xOut = VBA.Left(pValue, 1)
For i = 2 To VBA.Len(pValue)
...
Editnem moju fnc v príspevku vyššie, aby brala celý reťazec.
EDIT: Napadá ma predsa len dôvod, prečo vynechať 1. písmeno. Ak sa jedná o pridanie medzery do zle zložených mien. Namiesto "MenoPriezvisko" urobí "Meno Priezvisko". V takomto prípade je nutné vynechanie 1. znaku, aby nevzniklo " Meno Priezvisko". Takže aký je účel?
Pridal som voliteľný parameter Start, ktorý určuje, od ktorého znaku sa má začať s kontrolou a pridávaním medzery. Ak sa parameter vynechá, začína sa od 1. znaku:
Function AddSpaces(pValue As String, Optional Start As Long = 1) As String
Dim xOut As String, CH As String, chU As String, U As String, L As String
U = UCase(pValue)
L = LCase(pValue)
xOut = Mid(pValue, 1, Start - 1)
For i = Start To Len(pValue)
chU = Mid(U, i, 1)
CH = Mid(pValue, i, 1)
If StrComp(chU, Mid(L, i, 1), vbBinaryCompare) <> 0 Then 'iba ak je to písmeno
CH = IIf(CH = chU, " ", vbNullString) & CH 'ak je to veľké písmeno, pridaj medzeru
End If
xOut = xOut & CH
Next i
AddSpaces = xOut
End Function
Samozrejme to pôjde, ale najskôr otázka :
Prečo sa vynecháva ten 1. znak ???
Function AddSpaces(pValue As String) As String
Dim xOut As String, CH As String, chU As String, U As String, L As String
U = UCase(pValue)
L = LCase(pValue)
For i = 1 To Len(pValue)
chU = Mid(U, i, 1)
CH = Mid(pValue, i, 1)
If StrComp(chU, Mid(L, i, 1), vbBinaryCompare) <> 0 Then 'iba ak je to písmeno
CH = IIf(CH = chU, " ", vbNullString) & CH 'ak je to veľké písmeno, pridaj medzeru
End If
xOut = xOut & CH
Next i
AddSpaces = xOut
End Function
Ak chcete priložiť súbor s makrom (.XLSM), musíte ho zabaliť do ZIP, inak ho fórum nezoberie. A veľkosť je tiež obmedzená, no neviem na koľko, možno do 300 KB.
Tu máte všetky 3 verzie. Verzie "pole" a "vzorec" vracajú výsledok zatiaľ do druhého listu (dá sa prerobiť aby nahrádzali pôvodné), a posledná verzia "stĺpce" nahrádza pôvodné. Prvé dve sú najrýchlejšie, ale ak by tam boli nejaké nesúrodé formáty, orámovania a pod, nebude to logicky fachať. Naopak posledný variant "stĺpce" je síce najpomalší, ale ponechá nesúrodé formáty apod.
Verzia "vzorec" v Office 2016 fungovať nebude, ostatné áno.
Nemáte náhodou Office 365 verziu?
Ak áno, tak môžete získať výsledok extrémne rýchlo iba jediným obyčajným vzorcom
=FILTER(A1:C51600;BYROW((LEFT(A1:A51600;{2\1\1\1})={"EN"\"Z"\"S"\"B"})*1;SUM)=0)
=FILTER(A1:C51600;BYROW((ZLEVA(A1:A51600;{2\1\1\1})={"EN"\"Z"\"S"\"B"})*1;SUMA)=0)
Takto by vyzeralo makro, ktoré vypočíta daný vzorec cez EVALUATE. Ako vidíte získať výsledok je 1 riadok, ostatné je omáčka. Zatiaľ do 2. hárku, je možné aj nahradiť do pôvodného, takto som to dal pre kontrolu. Zmenšil som dáta na 10K, aby mi to sem vošlo. Rozdiel medzi 10K vs 50K je takmer nepostrehnuteľný. Celkovo sú to iba desatiny sekundy.
Sub smazat()
Dim V
Dim RNG As Range
Dim Col As Integer, i As Integer
Dim F As String
Dim aF() As String
Col = 1
F = "EN,Z,S,B"
Set RNG = Worksheets("Hárok1").UsedRange
aF = Split(F, ",")
F = """" & Replace(F, ",", """,""") & """"
For i = LBound(aF) To UBound(aF): aF(i) = Len(aF(i)): Next i
V = Evaluate("=FILTER(" & RNG.Address(External:=True) & ",BYROW((LEFT(" & RNG.Columns(Col).Address(External:=True) & ",{" & Join(aF, ",") & "})={" & F & "})*1,SUM)=0)")
'=FILTER(A1:C51600;BYROW((LEFT(A1:A51600;{2\1\1\1})={"EN"\"Z"\"S"\"B"})*1;SUM)=0)
With Worksheets("Hárok2")
.UsedRange.ClearContents
If IsError(V) Then
MsgBox "Žiadne dáta nevyhovujú filtru.", vbExclamation
Else
.Activate
With .Cells(RNG.Row, RNG.Column)
.Resize(UBound(V, 1), UBound(V, 2)).Value = V
.Select
End With
End If
End With
End Sub
Ak nemáte Office 365 pôjdem sa piplať aj s inými verziami...
EDIT:
Pre Office 2024 musí byť vo vzorci explicitne aj LAMBDA
=FILTER(A1:C51600;BYROW((LEFT(A1:A51600;{2\1\1\1})={"EN"\"Z"\"S"\"B"})*1;LAMBDA(A;SUM(A)))=0)
=FILTER(A1:C51600;BYROW((ZLEVA(A1:A51600;{2\1\1\1})={"EN"\"Z"\"S"\"B"})*1;LAMBDA(A;SUMA(A)))=0)
Priložte prílohu s príkladom, ako vyzerajú tie dáta (anonymizované). Nech je vidno aj či a aké sú tam vzorce, dátové typy a formáty. Aj napíšte koľko sa približne nachádza vymazávaných riadkov v 50K tabuľke.
Suverénne najrýchlejšie by bolo, ak tam nie sú vzorce, preliať tie dáta iba v poli cyklom a pôvodné nahradiť.
Lebo ako som písal ja aj lubo, ak je tých subrange v range veľa je to pomalé, inak je to výhodné. Ak tam budú iba dáta, urobil by som to cez pole, ak aj vzorce, tak spomenutou lubovou metódou.
Robil som pokus, na 56K tabuľke, kde bolo k vymazaniu 7200 riadkov. A je to pomalé aj pri rozdelení na 1000 alebo 500 riadkov (nesusediacich) v jednom mazanom range. Meranie času síce ukáže pár sekúnd, ale reálne Excel nereaguje >40s.
Po obede by som mohol mať čas, tak priložte tú prílohu.
To je naschvál tak urobené. Pre kontrolu správnej funkčnosti. V kóde sú 2 riadky. Mazací je vypnutý pomocou apostrofu. Ak si to skontrolujete, tak vypnite Select a zapnite Delete.
rngDEL.EntireRow.Select
' rngDEL.EntireRow.Delete
Makro je urobené tak, aby mazalo všetky riadky naraz. To je výhodné časovo, ale iba do nejakého rozumného počtu. Range sa preťaží. Ak by to trvalo neúmerne dlho (napr. dlhšie ako pôvodný spôsob), tak tam doplním, aby napr. každých 1000 nájdených riadkov vykonalo výmaz. Potom nebude Range preťažovaná.
No problema...
Sub smazat()
Dim Countrow As Long
Dim R As Long, c As Long
Dim CalcMode As Long
Dim ViewMode As Long
Dim rngDEL As Range
Dim aVal()
Dim aCon() As String
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
End With
With ActiveWindow
ViewMode = .View
.View = xlNormalView
End With
aCon = Split("EN,Z,S,B", ",")
With ActiveSheet.UsedRange
.Parent.DisplayPageBreaks = False
Countrow = .Rows.Count
If .Column <> 1 Then
MsgBox "Použitá oblast nezačíná sloupcem A", vbExclamation: Exit Sub
End If
If Countrow = 1 Then
ReDim aVal(1 To 1, 1 To 1)
aVal(1, 1) = .Cells(1, 1).Value
Else
aVal = .Columns(1).Value
End If
For R = 1 To Countrow
For c = 0 To UBound(aCon)
If Left(aVal(R, 1), Len(aCon(c))) = aCon(c) Then
If rngDEL Is Nothing Then
Set rngDEL = .Cells(R, 1)
Else
Set rngDEL = Union(rngDEL, .Cells(R, 1))
End If
Exit For
End If
Next c
Next R
End With
If Not rngDEL Is Nothing Then
rngDEL.EntireRow.Select
' rngDEL.EntireRow.Delete
End If
ActiveWindow.View = ViewMode
Application.Calculation = CalcMode
End Sub
Neviem či nie je rozdiel "pre firmy" a "pre veľké organizácie".
Ako píše Dingo, vo verzii "pre veľké organizácie" sa to nachádza v menu Štart.
W10/W11
Štart - napísať "Spreadsheet Compare"
alebo
W10
Štart - Nástroje balíka Office - Spreadsheet Compare
W11
Štart - Všetko - Nástroje balíka Office - Spreadsheet Compare
Citácia z webu MS:
Important: Spreadsheet Compare is only available with Office Professional Plus 2013, Office Professional Plus 2016, Office Professional Plus 2019, or Microsoft 365 Apps for enterprise.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.