Klopt, deze werkt wel:quote:Op vrijdag 10 juni 2011 09:11 schreef DaFan het volgende:
[..]
Sorry wel aanhalingstekens! Je hebt een spatie in je sheetnaam
1 | =VERGELIJKEN("*Adviseur*";INDIRECT("'"&A35&"'!A4:Q4");0) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Function UNIQUE(InputRange As Range, ItemNo As Long) As Variant Dim cl As Range, cUnique As New Collection, cValue As Variant Application.Volatile On Error Resume Next For Each cl In InputRange If cl.Formula <> "" Then cUnique.Add cl.Value, CStr(cl.Value) End If Next cl UNIQUE = "" If ItemNo = 0 Then UNIQUE = cUnique.Count Else If ItemNo <= cUnique.Count Then UNIQUE = cUnique(ItemNo) End If End If On Error GoTo 0 End Function |
1 | =UNIQUE("'"&A34&"'!$"&B34&"$6:$"&B34&"$106";1) |
1 | =UNIQUE('Amsterdam IMB'!$H$6:$H$106;1) |
Tja dat is niet echt een verbetering tov het optellen van de countifs maar toch bedankt.quote:Op donderdag 9 juni 2011 19:32 schreef DaFan het volgende:
[..]
Sorry jullie hebben gelijk, het was eigenlijk tellen.
Ik heb nog deze:
=SUM(IF(A2:B4="tekst";1)+IF(C5:F20="tekst";1))
Ctrl-Shift-Enter
Ja! Thanks!quote:Op vrijdag 10 juni 2011 10:38 schreef Deetch het volgende:
Je functie UNIQUE verwacht een range en niet een string (tekst).
Als je =UNIQUE(INDIRECT("'"&A34&"'!$"&B34&"$6:$"&B34&"$106");1) doet zou het wel moeten werken.
mee eens maar ik krijg het niet anders voor elkaar..quote:Op vrijdag 10 juni 2011 10:39 schreef Deetch het volgende:
[..]
Tja dat is niet echt een verbetering tov het optellen van de countifs maar toch bedankt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Function UNIQUE(InputRange As Range, ItemNo As Long) As Variant Dim cl As Range, cUnique As New Collection, cValue As Variant Application.Volatile On Error Resume Next For Each cl In InputRange If cl.Formula <> "" Then cUnique.Add cl.Value, CStr(cl.Value) End If Next cl UNIQUE = "" If ItemNo = 0 Then UNIQUE = cUnique.Count Else If ItemNo <= cUnique.Count Then UNIQUE = cUnique(ItemNo) End If End If On Error GoTo 0 End Function |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | Sub Vernieuwen() ' ' Vernieuwen Macro ' ' Sneltoets: Ctrl+Shift+V ' Application.ScreenUpdating = False Dim c As Range For Each c In Sheets("Hulpsheet Sven").Range("A32:A58") c.ClearContents Next c Dim Ws As Worksheet, Wb As Workbook, R As Range, S As Integer Set Wb = ActiveWorkbook Set R = Sheets("Hulpsheet Sven").Range("a32") S = 1 For Each Ws In Wb.Worksheets R.Cells(S, 1) = Ws.Name S = S + 1 Next Ws Application.ScreenUpdating = True End Sub |
Dit scheelt al bijna 10 sec!quote:Op vrijdag 10 juni 2011 14:53 schreef Deetch het volgende:
Dim c As Range
For Each c In Sheets("Hulpsheet Sven").Range("A32:A58")
c.ClearContents
Next c
Kun je dat niet net zo goed vervangen door:
Sheets("Hulpsheet Sven").Range("A32:A58").ClearContents?
Nu gaat de macro elke cel apart clearen.
Hoe zou ik dat anders moeten doen dan?quote:IN die tweede loop roep je een cel aan: R.Cells(s,1) als onderdeel van een range. Maar daarboven definieer je de range als 1 cel A32, kan het daar aan liggen?
Vanaf cel A32 naar beneden wil ik een lijst met sheetnamenquote:Op zondag 12 juni 2011 17:58 schreef Deetch het volgende:
leg eerst eens uit wat je met die tweede code wilt bewerkstelligen? Dan zal ik na de pinksteren eens een poging wagen.
quote:Op maandag 13 juni 2011 01:41 schreef qu63 het volgende:
[..]
Vanaf cel A32 naar beneden wil ik een lijst met sheetnamen
1 2 3 | For i = 1 To Sheets.Count Range("A" & i + 31) = Sheets(i).Name Next i |
zo ga je van 20 regels code naar 6 dat is vast sneller.quote:
quote:
1 2 3 4 | dim ws as worksheet for each ws in thisworkbook.sheets .... ws.name gebruiken next ws |
Hmz, die code kost me alasnogruim 20 seconden.. Geen verbetering t.o.v. dit dus:quote:
1 2 3 4 5 6 7 8 | Dim Ws As Worksheet, Wb As Workbook, R As Range, S As Integer Set Wb = ActiveWorkbook Set R = Sheets("Hulpsheet Sven").Range("a32") S = 1 For Each Ws In Wb.Worksheets R.Cells(S, 1) = Ws.Name S = S + 1 Next Ws |
Qua tijd niet...code wel. Korter is beterquote:Op woensdag 15 juni 2011 09:14 schreef qu63 het volgende:
[..]
Hmz, die code kost me alasnogruim 20 seconden.. Geen verbetering t.o.v. dit dus:
[ code verwijderd ]
Ik denk dat het vooral komt door bijna 800 cellen met een UNIQUE()-functie..quote:Op woensdag 15 juni 2011 10:24 schreef DaFan het volgende:
[..]
Qua tijd niet...code wel. Korter is beter
Misschien moet je calculate ook ff uitzetten. Het zou best een kunnen dat Excel gaat rekenen als de macro de sheet raadpleegt?
17 lege sheets duurt <1 sec
Ik denk gewoon met een IF, volgens mij evalueert ie pas FALSE of TRUE na de IFquote:Op woensdag 15 juni 2011 11:37 schreef qu63 het volgende:
Nu moet ik alleen nog iets bedenken hoe ik die UNIQUE-functie lege cellen over kan laten slaan en of deze nog sneller kan. In grote sheets duurt het namelijk soms 0,5sec voordat ik weer verder kan..
1 2 3 4 5 6 7 8 | For Each cl In InputRange If cl.Formula <> "" Then cUnique.Add cl.Value, CStr(cl.Value) Else Goto Volgende End If Volgende: Next cl |
dan stopt de code toch bij de eerste de beste lege cel? vraag me af of dat de bedoeling is.quote:
Aangepast, thanks.quote:Op woensdag 15 juni 2011 13:12 schreef Deetch het volgende:
[..]
dan stopt de code toch bij de eerste de beste lege cel? vraag me af of dat de bedoeling is.
Helaas, het veranderd niets, ik krijg nog steeds in een lijst unieke waarden een lege celquote:
Is je waarde in cl leeg leeg of is hij leeg door een formule?quote:Op woensdag 15 juni 2011 13:29 schreef qu63 het volgende:
[..]
Helaas, het veranderd niets, ik krijg nog steeds in een lijst unieke waarden een lege cel
1 | =IF(ROW(A1)=4;"";ROW(A1)) |
1 2 3 4 5 | For Each cl In InputRange If cl.Value<> "" Then cUnique.Add cl.Value, CStr(cl.Value) End If Next cl |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |