SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Bij macro's die een bepaalde, merkbare, tijd nodig hebben om hun werk te doen is het van belang de gebruiker een idee te geven van wat er gebeurt, zeker met macro-optimalisatie aan kan het lijken alsof Excel is vastgelopen. Je kan bijvoorbeeld de statusbar een waarde geven, met eventueel een percentage van de reeds uitgevoerde code.SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.Verder
Alle vorige topics zijn hier terug te vinden.
Nieuw topic? Haal de OP uit de wiki
[ Bericht 28% gewijzigd door qu63 op 30-01-2012 15:01:43 ]It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
Oh, helemaal overheen gelezenquote:Op vrijdag 27 januari 2012 15:37 schreef qu63 het volgende:
[..]
Ik weet niet of dat ook werkt met je grafieklijn..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | Sub PosNegChart() Dim i As Integer Dim j As Integer Dim x As Range Dim y As Range Dim xnew() As Double Dim ynew() As Double 'User input x en y waarden Set x = Application.InputBox("Kies range X-as", "FOK! Excel Help", , , , , , 8) Set y = Application.InputBox("Kies range Y-as", "FOK! Excel Help", , , , , , 8) ReDim xnew(0) ReDim ynew(0) For i = 1 To x.Rows.Count 'Arrays uitbreiden ReDim Preserve xnew(UBound(xnew) + 1) ReDim Preserve ynew(UBound(ynew) + 1) 'x en y waarden aan nieuw array toevoegen xnew(UBound(xnew)) = x(i, 1) ynew(UBound(ynew)) = y(i, 1) 'Bekende (x1,y1) en (x2,y2) voor bepaling 'Richtingscoëfficient en B uit y = ax + b A1 = x(i, 1) B1 = y(i, 1) A2 = x(i + 1, 1) B2 = y(i + 1, 1) 'berekening y = 0 (snijdpunt x-as) SP = -1 * (B2 - (A2 * (B2 - B1) / (A2 - A1))) / (B2 - B1) / (A2 - A1) 'test of snijden x-as plaatsvindt in deze verzameling If SP > A1 And SP < A2 Then 'uitbreiden nieuwe arrays en toevoegen y=0 snijpunten x as ReDim Preserve xnew(UBound(xnew) + 1) ReDim Preserve ynew(UBound(ynew) + 1) ynew(UBound(ynew)) = 0 xnew(UBound(xnew)) = SP End If Next 'actieve sheetnaam onthouden Dim Naam As String Naam = ActiveSheet.Name 'Geheime sheet aanmaken (eerst verwijderen) On Error Resume Next Application.DisplayAlerts = False Sheets("FOK").Delete Application.DisplayAlerts = True On Error GoTo 0 ActiveWorkbook.Sheets.Add ActiveSheet.Name = ("FOK") Sheets("FOK").Visible = False 'Nieuwe serie x en y waarden plaatsen in geheime sheet For i = 1 To UBound(xnew) Sheets("FOK").Cells(i, 1) = xnew(i) Sheets("FOK").Cells(i, 2) = ynew(i) Next 'Grafiek toevoegen Charts.Add ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = Sheets("FOK").Range(Sheets("FOK").Cells(LBound(xnew) + 1, 1), Sheets("FOK").Cells(UBound(xnew), 1)) ActiveChart.SeriesCollection(1).Values = Sheets("FOK").Range(Sheets("FOK").Cells(LBound(xnew) + 1, 2), Sheets("FOK").Cells(UBound(xnew), 2)) ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.Location Where:=xlLocationAsObject, Name:=Naam For i = 1 To UBound(xnew) On Error Resume Next If ynew(i) <= 0 And ynew(i + 1) <= 0 Then ActiveChart.SeriesCollection(1).Points(i + 1).Border.ColorIndex = 3 End If Next ActiveChart.Legend.Delete End Sub |
1 2 3 4 | Dim x As Variant x = Range("A1:B4") MsgBox x(2,2) 'geeft waarde cell B2 Range("A12:B15") = x |
ok, dank je, ik zal het meenemen, ik dacht dat ik range moest gebruiken ivm met de input van user, ik had in het begin steeds fouten in de de uitvoering van code en kon niet vinden waar het lag. Uiteindelijk lag het niet aan de ranges maar heel ergens anders...quote:Op zondag 29 januari 2012 18:05 schreef ralfie het volgende:
@KritischeMassa
[ code verwijderd ]
Ranges kun je makkelijk converteren naar Variants, en omgekeerd. Gebruik is weinig anders als cells(2 argumenten, rij en kolom), maar snelheid is honderden malen sneller.
http://www.mediafire.com/?8kbsfc8v0mjyiffquote:Op maandag 30 januari 2012 13:04 schreef Basp1 het volgende:
Kan de handige sheet met macros (tip 4) ergens anders geupload worden, de mediafire link werkt niet meer.
quote:Op maandag 30 januari 2012 11:07 schreef KritischeMassa het volgende:
Maak een cel waarin je zet =min(c:c)
vervolgens doe je voorwaardelijke opmaak vergelijken met die celwaarde
zie de link aan Basp, het menu zit hierin met verklaringenquote:Op maandag 30 januari 2012 12:55 schreef Deetch het volgende:
@Qu63, hoe maak je zo'n extra menu? en kun je die ook installeerbaar maken?
quote:
Oeps, dan heb ik niet de goeie gepakt.. Ga em ff updaten!quote:Op maandag 30 januari 2012 13:30 schreef KritischeMassa het volgende:
[..]
http://www.mediafire.com/?8kbsfc8v0mjyiff
Gek in de OP wiki had ik sowieso ook een ander link geplakt (ik had de OP geheel herschreven)
Geen idee, dat was een screenshot van KritischeMassaquote:Op maandag 30 januari 2012 12:55 schreef Deetch het volgende:
@Qu63, hoe maak je zo'n extra menu? en kun je die ook installeerbaar maken?
Zie OPquote:Op maandag 30 januari 2012 15:06 schreef Jesse_ het volgende:
Wat zitten er eigenlijk voor macro's in het macro bestand?
NOD32 gaat helemaal over zijn gerrit van deze linkquote:Op maandag 30 januari 2012 13:30 schreef KritischeMassa het volgende:
[..]
http://www.mediafire.com/?8kbsfc8v0mjyiff
Gek in de OP wiki had ik sowieso ook een ander link geplakt (ik had de OP geheel herschreven)
Dat is gek... er zit niets bijzonders in namelijkquote:Op maandag 30 januari 2012 15:14 schreef mirelia het volgende:
[..]
NOD32 gaat helemaal over zijn gerrit van deze link
Je kan vast wel een excel bestand koppelen aan een simpel batch filetje dat even een deltree doet oidquote:Op maandag 30 januari 2012 15:23 schreef KritischeMassa het volgende:
[..]
Dat is gek... er zit niets bijzonders in namelijk
Maar misschien worden VBA macro's per definitie als riskant beoordeeld?
Het is gewoon een zip file met hierin een sheet met macro's
Als je het niet vertrouwd kun je de sheet openen zonder macro's te activeren en de code bekijken
Ik kan leuk programmeren, maar een virus schrijven is een level of 100 te hoog gegrepen voor mij
Ja ok, maar dat batchfiletje moet ik er dan wel bij leverenquote:Op maandag 30 januari 2012 15:59 schreef Jesse_ het volgende:
[..]
Je kan vast wel een excel bestand koppelen aan een simpel batch filetje dat even een deltree doet oid
aha.. ok, dank jequote:Op maandag 30 januari 2012 18:42 schreef mirelia het volgende:
Ik kreeg de meldingen op de site, niet op het bestand zelf.
Daar is niets mee aan de hand, excuses voor de verwarring
=1,25/24quote:Op vrijdag 3 februari 2012 17:00 schreef Puckzzz het volgende:
Ik heb Excel 2010.
Taal geen idee.
Ik heb twee identieke tabbladen met als enig verschil dat ik in tabblad 2 zal werken. (maar de gegevens worden wel overgenomen in tab 1)
Daar komt in een kolom een tijdsnotatie te staan in decimalen. Dus voor 1 uur en een kwartier komt daar te staan 1.25. We ronden alles af naar kwartieren dus doen niet moeilijk met 5 minuutjes e.d.
Nu moet ik dus in diezelfde cel maar dan in tabblad1 dat decimale getal omzetten naar uren en minuten. daar moet dus komen te staan 1:15
Ik krijg het niet voor elkaar
quote:Op vrijdag 3 februari 2012 17:10 schreef DaFan het volgende:
Lol ok dat is best makkelijk.
Kritisch owned dit topic
1 2 3 4 5 6 7 8 9 | Function SubT(Bereik As Variant, Term As String, TermKol as integer, OptelKol as integer) For i = 1 To Bereik.Count If Term = Bereik(i, TermKol) Then SubT = SubT + Bereik(i, OptelKol) End If Next End Function |
Mijn tweede suggestie is beter en sneller (UDF is traag)quote:Op vrijdag 3 februari 2012 20:07 schreef Sjaakbakfiets het volgende:
Dank voor je uitgebreide reactie, ik ga er mee aan de slag!
Waarom niet helemaal dan?quote:Op vrijdag 3 februari 2012 20:38 schreef Sjaakbakfiets het volgende:
Mocht je een oplossing hebben voor mijn volgend probleem dan hoor ik het graag![]()
Ik heb 2 excelbestanden (respectievelijk 4000 en 8000 rijen), en in beide bestanden zit een kolom met codes. In totaal zijn ongeveer 3500 van deze codes hetzelfde. U raadt het al, deze 3500 codes (met bijbehorende informatie) moet ik filteren.
Weet jij/iemand hoe ik deze bestanden kan matchen?
Edit: grotendeels gelukt, dmv formule ALS(ISFOUT(VERT.ZOEKEN(A1;B:B;1;0));"";VERT.ZOEKEN(A1;B:B;1;0))
Macro/VBAquote:Op zondag 5 februari 2012 15:24 schreef elkravo het volgende:
Stel ik heb een vrij lange Excel lijst/tabel. Hierin staat een kolom met categoriën, bijvoorbeeld A, B, C.
Iedere rij/object heeft dus een categorie A B of C gekregen, hierin zit geen volgorde
Nu wil ik graag dat er ondere iedere rij van categorie B een extra lege regel wordt toegevoegd.
Beperking: ik kan/mag de lijst NIET sorteren omdat ik dan nooit meer terugsorteren kan naar de huidige volgorde.
Kan dit makkelijk, zonder dat ik handmatig rijen 1-voor-1 moet toevoegen?
Ik probeer zoveel mogelijk macro's VBA te vermijden omdat ik er geen verstand van heb. Liefst een simpel trucje. Het betreft een eenmalige verbouwing van een excel lijst waarbij ik onder bepaalde rijen van een categorie een extra regel moet toevoegen. En de lijst is 10.000 rijen...quote:Op zondag 5 februari 2012 15:27 schreef qu63 het volgende:
[..]
Macro/VBA
KritischeMassa zal zo wel langskomen om het uit te leggen
Of zoek uit hoe je t zelf kan doen, ik kan t namelijk ook (nog) niet goed (genoeg)
Ja ik zou wel VBA gebruikenquote:Op zondag 5 februari 2012 15:30 schreef elkravo het volgende:
[..]
Ik probeer zoveel mogelijk macro's VBA te vermijden omdat ik er geen verstand van heb. Liefst een simpel trucje. Het betreft een eenmalige verbouwing van een excel lijst waarbij ik onder bepaalde rijen van een categorie een extra regel moet toevoegen. En de lijst is 10.000 rijen...
1 2 3 4 5 6 7 8 9 10 11 12 | Sub InsertLines() Dim LastRow As Long With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With For i = LastRow To 1 Step -1 If ActiveSheet.Cells(i, 1) = "B" Then Rows(i + 1).Insert Shift:=xlDown End If Next End Sub |
Je kan altijd terug sorteren als je eerst een kolom maakt die gewoon telt van 1 tot eindequote:Op zondag 5 februari 2012 15:24 schreef elkravo het volgende:
Beperking: ik kan/mag de lijst NIET sorteren omdat ik dan nooit meer terugsorteren kan naar de huidige volgorde.
1 vraagje... in de code, waar staat de A voor in "LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ??quote:Op zondag 5 februari 2012 15:47 schreef KritischeMassa het volgende:
[..]
Ja ik zou wel VBA gebruiken
Maar ja
Het invoegen van regels is nu eenmaal niet mogelijk met een formule, of lastig.
Als je in VBA gaat klooien maak dan wel eerst een backup van de huidige situatie.
[ code verwijderd ]
Deze code in de betreffende sheet plakken (in het VBA scherm) en de macro draaien
Deze code gaat ervan uit dat de ABC in kolom A staat (activesheet.cells(i,1) = "B") de 1 in cells verwijzing slaat op kolom A dat kun je aanpassen
Hij kijkt in kolom A wat de laatste regel isquote:Op zondag 5 februari 2012 16:17 schreef elkravo het volgende:
[..]
1 vraagje... in de code, waar staat de A voor in "LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ??
1 2 3 4 5 6 7 | Sub InsertLines() For i = 32012 To 1 Step -1 If ActiveSheet.Cells(i, 1) = "B" Then Rows(i + 1).Insert Shift:=xlDown End If Next End Sub |
Ok... dan snap ik 'm... ben geen VBA held ;-)... normaal als ik een rij toevoeg, duurt dat 3 seconden ivm formuleberekeningen... de macro runt nu... zal wel even duren ;-)... laat m'n comp gewoonjakkeren... Hopelijk kom ik straks terug met goed het resultaat op m'n scherm.quote:Op zondag 5 februari 2012 16:20 schreef KritischeMassa het volgende:
[..]
Hij kijkt in kolom A wat de laatste regel is
Ik ben uitgegaan van kolom A
Je kan ook de lastrow opgeven als je die weet (bijvoorbeeld rij 32012)
Dan kan je volstaan met
[ code verwijderd ]
Ach had dat gezegdquote:Op zondag 5 februari 2012 16:26 schreef elkravo het volgende:
[..]
Ok... dan snap ik 'm... ben geen VBA held ;-)... normaal als ik een rij toevoeg, duurt dat 3 seconden ivm formuleberekeningen... de macro runt nu... zal wel even duren ;-)... laat m'n comp gewoonjakkeren... Hopelijk kom ik straks terug met goed het resultaat op m'n scherm.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |