Kan je iets duidelijker zijn?quote:
Bovenstaand is hetzelfde als:quote:Op donderdag 9 juni 2011 13:24 schreef DaFan het volgende:
Nee telefoon typt kut :p
With Range("A1")
.value = 4
.interior = black
End With
Snap je ??
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Sub test() Dim arrPivot As Variant pivot = Array(9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 23) For i = 0 To 12 'eerste element van een array heeft altijd volgnummer 0 MsgBox pivot(i) With Range("A" & pivot(i)) ''hier gebruik je de varabele uit de pivot array als rijnummer .Value = pivot(i) .Interior.ColorIndex = pivot(i) End With Next End Sub |
Duidelijk!quote:Op donderdag 9 juni 2011 13:49 schreef Deetch het volgende:
[..]
Bovenstaand is hetzelfde als:
Range("A1").value = 4
Range("A1").interior = black
Dus alle dubbele stukken in je object beschrijving kun je dan weglaten.
Als je dan vervolgens ook nog het pivottabelnummer variabel maakt kun je volgens mij een loopje maken om elke keer die tabellen te vernieuwen.
probeer onderstaande code eens te doorgronden een aan te passen aan jouw situatie:
[ code verwijderd ]
In plaats van Range("A" & pivot( i)) gebruik je:
Sheets("Hulpsheet Sven").PivotTables("Draaitabel"&pivot( i))
=SOMPRODUCT((A1:B4="tekst")*(C5:F20="tekst"))quote:Op donderdag 9 juni 2011 14:09 schreef Deetch het volgende:
Kun je trouwens in excel 2007 een COUNTIF functie doen over meerdere losstaande bereiken?
Ik wil nl tellen hoevaak er een bepaalde tekst staat in het cellenbereik A2:B4 en C5:F20
De simpelste oplossing is natuurlijk: =countif(A2:B4,"tekst")+countif(C5:F20,"tekst") maar dat vind ik niet mooi, ik wil 1 formule.
Wat niet werkt is: =COUNTIF((A1:B4,C5:F20),"tekst") of =COUNTIF(A1:B4&C5:F20,"tekst")
of =COUNTIF(BEREIKJE,"tekst") (waarbij BEREIKJE de named range A2:B4 en C5:F20 is)
Wie heeft de gouden tip (iets met SUMPRODUCT ofzo??)
Hmz, deze regel blijft een foutmelding geven..quote:Op donderdag 9 juni 2011 13:49 schreef Deetch het volgende:
[..]
Bovenstaand is hetzelfde als:
Range("A1").value = 4
Range("A1").interior = black
Dus alle dubbele stukken in je object beschrijving kun je dan weglaten.
Als je dan vervolgens ook nog het pivottabelnummer variabel maakt kun je volgens mij een loopje maken om elke keer die tabellen te vernieuwen.
probeer onderstaande code eens te doorgronden een aan te passen aan jouw situatie:
[ code verwijderd ]
In plaats van Range("A" & pivot( i)) gebruik je:
Sheets("Hulpsheet Sven").PivotTables("Draaitabel"&pivot( i))
1 | With Sheets("Hulpsheet Sven").PivotTables("Draaitabel" & pivot(I)).PivotCache.Refresh ''hier gebruik je de variabele uit de pivot array als rijnummer |
1 | Sheets("Hulpsheet Sven").PivotTables("Draaitabel27").PivotCache.Refresh |
1 2 3 4 5 6 | Dim pt As PivotTable For Each pt In Sheets("Hulpsheet Sven").PivotTables pt.PivotCache.Refresh pt.PivotFields("Adviseur").AutoSort _ xlAscending, "Adviseur" Next pt |
1 2 3 4 | Amsterdam H Rotterdam I Hilversum X [..] |
Die * heb ik hier van t forum..quote:Op donderdag 9 juni 2011 15:08 schreef DaFan het volgende:
Lekker bezig.
Geen * gebruiken in Somproduct (performance-technisch)
Denk ook aan -- anders werkt hwt niet meer
Als de waarde 1 is dan alleen som C1? en 0=0?quote:Op donderdag 9 juni 2011 15:59 schreef icebeer het volgende:
ik kom er ff niet meer uit
bijv:
ik heb in kolom B het volgende staan:
B1 2
B2 0
B3 0
B4 4
B5 0
B6 0
B7 0
met allerlei waarden in kolom C
nu wil ik een formule hebben waarbij het volgende gebeurt:
A1: =IF (B1=2 dan SUM (C1+C2)
A3 = IF (B4=4 dan SUM (C4+C5+C6+C7)
dus als in B een bepaalde waarde staat (bijv 6) wil ik van die rij + de 5 opvolgende in rij C de som hebben
iemand die mij de goede weg op kan sturen
maakt niet uit hoe omslachtig het is, als hij maar werkt
=SUMPRODUCT(--(A2:B4="tekst"),--(C5:D7="tekst"))quote:
Omdat "tekst"+"tekst" ook 0 is. Hadden er getallen gestaan dan had er 6289568 uit kunnen komen ipv 13.quote:Op donderdag 9 juni 2011 16:14 schreef Deetch het volgende:
[..]
=SUMPRODUCT(--(A2:B4="tekst"),--(C5:D7="tekst"))
Dan komt er 0 uit in plaats van 13 zoals ik met de hand tel.
quote:=COUNTIF(A2:B4,"tekst")+COUNTIF(C5:F20,"tekst") geeft overigens ook 13.
1 | =VERGELIJKEN("*Adviseur*";'Amsterdam MB'!A4:Q4;0) |
1 | =VERGELIJKEN("*Adviseur*";"'"&A35&"'!A4:Q4";0) |
wow super!quote:Op donderdag 9 juni 2011 16:11 schreef Deetch het volgende:
[..]
Als de waarde 1 is dan alleen som C1? en 0=0?
=IF(B1=0,0,SUM(INDIRECT("C"&ROW(B1)&":C"&ROW(B1)+B1-1)))
Of is dit een limitatie van Vergelijken() en moet het met een macro?quote:Op donderdag 9 juni 2011 16:19 schreef qu63 het volgende:
[ code verwijderd ]
Nu moet alleen 'Amsterdam MB' variabel worden..
Als ik het zo doe werkt het niet:
[ code verwijderd ]
In A35 staat dus Amsterdam MB
Sorry jullie hebben gelijk, het was eigenlijk tellen.quote:Op donderdag 9 juni 2011 16:17 schreef qu63 het volgende:
[..]
Omdat "tekst"+"tekst" ook 0 is. Hadden er getallen gestaan dan had er 6289568 uit kunnen komen ipv 13.
[..]
=VERGELIJKEN("*Adviseur*";INDIRECT(A35 & "!A4:Q4");0)quote:Op donderdag 9 juni 2011 16:19 schreef qu63 het volgende:
[ code verwijderd ]
Nu moet alleen 'Amsterdam MB' variabel worden..
Als ik het zo doe werkt het niet:
[ code verwijderd ]
In A35 staat dus Amsterdam MB
INDIRECT(A35 & "!A4:Q4") wordt bij mij vervangen door #VERW (Excel 2010 NL)..quote:Op donderdag 9 juni 2011 19:35 schreef DaFan het volgende:
[..]
=VERGELIJKEN("*Adviseur*";INDIRECT(A35 & "!A4:Q4");0)
Volgens mij hoeven de enkele aanhalingstekens er niet omheen. Bij mij niet iig (Office 2010)
Sorry wel aanhalingstekens! Je hebt een spatie in je sheetnaamquote:Op vrijdag 10 juni 2011 09:09 schreef qu63 het volgende:
[..]
INDIRECT(A35 & "!A4:Q4") wordt bij mij vervangen door #VERW (Excel 2010 NL)..
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: |