| 1 2 3 4 5 6 7 8 9 10 11 12 13 | for i = 2 to 32000 for j = 2 to 32000 if workbooks("sheet1").sheets("blad1").cells(j,1)=workbooks("sheet2").sheets("blad1").cells(i,1) and workbooks("sheet1").sheets("blad1").cells(j,2)=workbooks("sheet2").sheets("blad1").cells(i,2) then workbooks("sheet2").sheets("blad1").cells(i,3) = workbooks("sheet1").sheets("blad1").cells(j,3) exit for end if next next |
Nou dat maakt toch ook niet uitquote:Op woensdag 11 januari 2012 20:00 schreef Basp1 het volgende:
Ik verwacht dat de lijst 2 per dag verschillend is anders zou vraagsteller ook dagelijks 1 kolom gekopieerd kunnen hebben.
Zoals ik al zei, ik zou lastactivecell pakkenquote:Op woensdag 11 januari 2012 20:08 schreef Basp1 het volgende:
Klopt mijn fout. Gaat alleen jou oplossing niet een hele lang runtime hebben met 2 for loops in elkaar tot 32000?
En zoals ik zei dat pakket zoals sap waar het uit komt zal waarschijnlijk toch ook wel de mailadressen bevatten dus gewoon het rapport wat lijst 2 genereerd aanpassen. Sterker nog ze zouden een rapport moeten maken wat meteen de word documenten genereerd ipv die omslachtige wegen die bewandeld worden.
Ja, sheet1 en sheet2 zijn de werkboeknamenquote:Op woensdag 11 januari 2012 21:18 schreef gekkie000000 het volgende:
Maakt het trouwens nog uit wat voor namen de bestanden krijgen?
| 1 2 3 4 5 | sub macro1() code end sub |
| 1 2 3 4 5 6 7 8 | Dim fn as string dim Worbook_1 as string fn = Application.GetOpenFilename If fn = False Then MsgBox "U drukte op Cancel" Else workbook_1= fn End If |
Waar zie ik dat?quote:Op donderdag 12 januari 2012 08:48 schreef Basp1 het volgende:
Gekkie0000 let even op of de toolbar/ribbon voor ontwikkelaars wel aanstaat (in ieder geval in office 2007 moet ik dat altijd bij een nieuwe installatie altijd doen) anders kun je geen macro's ed toevoegen.
Als je hem niet ziet moet je hem aanzettenquote:
Help of zeg nietsquote:Op donderdag 12 januari 2012 09:18 schreef Jesse_ het volgende:
[..]
Als je hem niet ziet moet je hem aanzetten
Je hebt PMquote:Op donderdag 12 januari 2012 16:57 schreef gekkie000000 het volgende:
Kritische massa, als je me zou willen helpen als je er tijd voor hebt een keer zou ik het heel erg op prijs stellen. Ik heb de helft van de dag gevogeld, maar ik snap er echt niets van. Voel me heel dom...
[ afbeelding ]
[ afbeelding ]
Dit zijn de begin bestanden.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Sub Samenvoegen() Workbooks.Open (WB_1) WB_1_Name = ActiveWorkbook.Name WB_1_LastCell = Workbooks(WB_1_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row Workbooks.Open (WB_2) WB_2_Name = ActiveWorkbook.Name WB_2_LastCell = Workbooks(WB_2_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row For i = 2 To WB_1_LastCell For j = 2 To WB_2_LastCell If Workbooks(WB_1_Name).Sheets(1).Cells(i, 1) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 1) And Workbooks(WB_1_Name).Sheets(1).Cells(i, 2) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 2) Then Workbooks(WB_2_Name).Sheets(1).Cells(j, 3) = Workbooks(WB_1_Name).Sheets(1).Cells(i, 3) End If Next Next End Sub |
quote:Op vrijdag 13 januari 2012 17:49 schreef gekkie000000 het volgende:
@Kritische massa, je bent geweldig! vandaag getest met mijn "eigen" bestanden en zelf de kolomnummers aangepast en het werkt perfect. Nog een keer hardstikke bedankt!
Ik heb al lang verteld dat een geweldige fokker dit voor me gemaakt heeft. Ik ga maandag verder proberen. Fijn weekend!quote:Op vrijdag 13 januari 2012 17:54 schreef KritischeMassa het volgende:
En je kunt het form natuurlijk altijd zelf pimpen met jouw naam in het userfform, zodat als collega's het gebruiken ze herinnerd worden aan jouw briljantheid
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 'voor het overzicht declareer ik mijn variabelen altijd in een aparte module 'ik maak ze allemaal public, ook de tellers 'omdat deze voor navigatie worden gebruikt en ik ze eventueel bij uitbreiding van code en functies 'misschien wel wil hergebruiken Public fn As String Public WB_1 As String Public WB_1_Name As String Public WB_2 As String Public WB_2_Name As String Public WB_1_LastCell As Integer Public WB_2_LastCell As Integer Public i As Integer Public j As Integer |
| 1 2 3 4 5 6 | Sub Dialoog() 'Aanroepen Userform1, start van de routine MailMerge 'Deze routine wordt niet gebruikt maar is wel een macro die kan worden aangeroepen als het plaatsen 'van het menu niet is gelukt (ivm met office 2010 ribbon en het feit dat de code in office 2003 is gebouwd) UserForm1.Show End Sub |
| 1 2 3 4 5 | Sub Get_File() 'Aanroepen interne verkenner van Excel 'Het gekozen bestand wordt in de variabele "fn" opgeslagen fn = Application.GetOpenFilename End Sub |
| 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 | Sub Samenvoegen() 'Routine die wordt uitgevoerd wanneer er op "samenvoegen" wordt geklikt 'WB_1 is het bronbestand waar de email adressen in staan 'Deze is aangewezen door met behulp van de browse knop een bestand te kiezen Workbooks.Open (WB_1) 'Sla de naam van het workbook op in de variabele "WB_1_Name" WB_1_Name = ActiveWorkbook.Name 'Zoek de laatste actieve cell op van sheet WB_1 WB_1_LastCell = Workbooks(WB_1_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row 'WB_2 is het SAP uitvoerbestand waar de email adressen in moeten komen 'Deze is aangewezen door met behulp van de browse knop een bestand te kiezen Workbooks.Open (WB_2) 'Sla de naam van het workbook op in de variabele "WB_2_Name" WB_2_Name = ActiveWorkbook.Name 'Zoek de laatste actieve cell op van sheet WB_1 WB_2_LastCell = Workbooks(WB_2_Name).Sheets(1).Cells.SpecialCells(xlCellTypeLastCell).Row 'met teller i lopen we door het bronbestand met de email adressen 'om de routine niet onnodig lang te laten duren tellen we tot de laatste actieve cel For i = 2 To WB_1_LastCell 'met teller j lopen we door het doelbestand waar de email adressen heen moeten 'om de routine niet onnodig lang te laten duren tellen we tot de laatste actieve cel For j = 2 To WB_2_LastCell 'Als de naam uit kolom 1 overeenkomt en het bedrijf uit kolom 2 kopieeren we het emailadres uit kolom 3 naar kolom 3 If Workbooks(WB_1_Name).Sheets(1).Cells(i, 1) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 1) And Workbooks(WB_1_Name).Sheets(1).Cells(i, 2) = Workbooks(WB_2_Name).Sheets(1).Cells(j, 2) Then Workbooks(WB_2_Name).Sheets(1).Cells(j, 3) = Workbooks(WB_1_Name).Sheets(1).Cells(i, 3) End If Next Next End Sub |
| 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 | Sub AddMenus() 'Routine om een menu item toe te voegen aan excel 'We declareren een control, commandbar en een commandbarcontrol 'We willen het nieuwe menu voor het Help item in excel plaatsen Dim cMenu1 As CommandBarControl Dim cbMainMenuBar As CommandBar Dim iHelpMenu As Integer Dim cbcCustomMenu As CommandBarControl 'Schakel errordetectie uit omdat we geen lelijke melding willen in het volgende stuk 'voor de netheid verwijderen we namelijk eerst het menu item 'om te voorkomen dat er twee identiek menuitems kunnen bestaan On Error Resume Next 'verwijder het menu "mailmerge" 'als mailmerge niet bestaat geeft dit een fout 'maar foutdetect staat uit, dus code zal gewoon doorgaan Application.CommandBars("Worksheet Menu Bar").Controls("MailMerge").Delete 'zet error detect weer aan On Error GoTo 0 'stel een commandbar in in excel (application) Set cbMainMenuBar = Application.CommandBars("Worksheet Menu Bar") 'stel vast welk indexnummer het menu "Help" heeft iHelpMenu = cbMainMenuBar.Controls("Help").Index 'voeg het menu toe aan excel, voor het menu "Help" 'menutype is pop-up Set cbcCustomMenu = cbMainMenuBar.Controls.Add(Type:=msoControlPopup, Before:=iHelpMenu) 'stel de naam in van het menu cbcCustomMenu.Caption = "MailMerge" 'Voeg een item toe aan het menu With cbcCustomMenu.Controls.Add(Type:=msoControlButton) 'geef het item een naam .Caption = "Mailbestand Samenvoegen" 'geef het item een uit te voeren routine .OnAction = "OpenMe" 'geef het item een kek plaatje .FaceId = 733 End With End Sub |
| 1 2 3 4 5 | Sub OpenMe() 'er is geklikt op "mailbestand samenvoegen"in het menu "MailMerge" 'het dialoogscherm wordt aangeroepen UserForm1.Show End Sub |
| 1 2 3 4 5 6 7 | Sub DeleteMenu() 'als de gebruiker excel, of het bestand "MailMerge.xls", afsluit 'wordt deze routine aangeroepen om de menubar weer op te ruimen On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("MailMerge").Delete On Error GoTo 0 End Sub |
| 1 2 3 4 5 6 7 8 9 | Private Sub Workbook_Open() 'actie als workbook wordt geopend AddMenus End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) 'actie als workbook wordt gesloten DeleteMenu End Sub |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Private Sub CommandButton1_Click() 'Commandbuttonactie Browse bestand 1 Get_File TextBox1.Text = fn WB_1 = fn End Sub Private Sub CommandButton2_Click() 'Commandbuttonactie Browse bestand 2 Get_File TextBox2.Text = fn WB_2 = fn End Sub Private Sub CommandButton3_Click() 'Commandbuttonactie Samenvoegen Samenvoegen Unload Me End Sub Private Sub CommandButton4_Click() 'Commandbuttonactie Annuleer Unload Me End Sub |
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.
[ Bericht 39% gewijzigd door #ANONIEM op 14-01-2012 14:21:50 ]
Heb je hier wat aan?quote:Op zaterdag 14 januari 2012 15:14 schreef Irritatie100 het volgende:
Is het mogelijk om een recursieve functie uit te rekenen met Excel?
Een recursieve functie als in Ackerman recursie? Dan denk ik dat je MathLab moet hebben.quote:Op zaterdag 14 januari 2012 15:14 schreef Irritatie100 het volgende:
Is het mogelijk om een recursieve functie uit te rekenen met Excel?
quote:Op zaterdag 14 januari 2012 15:20 schreef KritischeMassa het volgende:
[..]
Een recursieve functie als in Ackerman recursie? Dan denk ik dat je MathLab moet hebben.
Wat wil je precies doen?
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.Ik weet van te voren de gegevens in A1, A2 en A3. A4 is uitgerekend met de functie BET. Het antwoord dat ik wil weten is het bedrag in B17. Alleen de bedoeling is dat ik dat antwoord niet verkrijg door zo'n hele tabel op te stellen, maar door 1 formule (dus maar 1 cel) te gebruiken.
Je wil dat het dus gebouwd wordt voor je, zeg dat dan...quote:Op zaterdag 14 januari 2012 17:52 schreef Irritatie100 het volgende:
Ik heb het al anders gedaan. Ik had de formule van de bijbehorende rekenkundige rij opgesteld, een vriend gezocht die wiskunde studeert en hem de functie laten aanpassen zodat hij niet meer recursief was. En het werkte
Ik ga nu eens kijken of ik een vriend heb die informatica studeert zodat ik wel zo'n directe functie in Excel heb
| 1 2 3 4 5 6 7 8 9 10 | Function FOK(rente, startbedrag, aflossing, looptijd) For i = 1 To looptijd FOK = startbedrag - (aflossing - (rente / 100 * startbedrag)) startbedrag = FOK Next End Function |
Alleen verandert de verhouding tussen aflossing en rente elk jaar, dan kan je dit toch niet gebruiken?quote:Op zaterdag 14 januari 2012 18:14 schreef KritischeMassa het volgende:
[..]
Je wil dat het dus gebouwd wordt voor je, zeg dat dan...
[ code verwijderd ]
Deze code in een module zetten en voila
[ afbeelding ]
Type in =FOK() en druk op fx
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.Ik moet uitzoeken welke waarde er in cel B3 komt te staan, zodat de waardes in F11 en J11 gelijk zijn. Kan ik de doelzoeker gebruiken? En zo ja: hoe moet ik die invullen?
Als er verder nog info nodig is over de gegevens die er in de sheet staan hoor ik het wel![]()
Nou dat gebeurt toch ook, het startbedrag wordt steeds ge-updatequote:Op zaterdag 14 januari 2012 18:23 schreef Irritatie100 het volgende:
[..]
Alleen verandert de verhouding tussen aflossing en rente elk jaar, dan kan je dit toch niet gebruiken?
Ik heb het net getest, maar als ik als aflossing die 24081,89 invul, looptijd 10, rente 5,5% en startbedrag 350.000, dan komt er iets heel anders uit...quote:Op zaterdag 14 januari 2012 18:43 schreef KritischeMassa het volgende:
[..]
Nou dat gebeurt toch ook, het startbedrag wordt steeds ge-update
Volgens mij werkt het, heb je het al getest?
Die looptijd in de functie is dus bijvoorbeeld 10
is die 5,5 het getal 5,5 of 5,5% want ik deel die 5,5 eerst door 100quote:Op zaterdag 14 januari 2012 18:47 schreef Irritatie100 het volgende:
[..]
Ik heb het net getest, maar als ik als aflossing die 24081,89 invul, looptijd 10, rente 5,5% en startbedrag 350.000, dan komt er iets heel anders uit...
0,055 en dan de cel als eigenschap percentage meegegeven.quote:Op zaterdag 14 januari 2012 18:53 schreef KritischeMassa het volgende:
[..]
is die 5,5 het getal 5,5 of 5,5% want ik deel die 5,5 eerst door 100
Probeer het eens met het getal 5,5?quote:Op zaterdag 14 januari 2012 18:53 schreef Irritatie100 het volgende:
[..]
0,055 en dan de cel als eigenschap percentage meegegeven.
Ja, nu werkt ie. Thanks!quote:Op zaterdag 14 januari 2012 18:54 schreef KritischeMassa het volgende:
[..]
Probeer het eens met het getal 5,5?
quote:Op zaterdag 14 januari 2012 18:43 schreef Irritatie100 het volgende:
Maar ik zal hem zo proberen, eerst even het volgende
Dit is de situatie: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.Ik moet uitzoeken welke waarde er in cel B3 komt te staan, zodat de waardes in F11 en J11 gelijk zijn. Kan ik de doelzoeker gebruiken? En zo ja: hoe moet ik die invullen?
Als er verder nog info nodig is over de gegevens die er in de sheet staan hoor ik het wel
Lieverd, kijk naar de code en help jezelf verderquote:Op zaterdag 14 januari 2012 18:56 schreef Irritatie100 het volgende:
[..]
Ja, nu werkt ie. Thanks!
Nu deze:
[..]
Code-FEBOquote:Op zaterdag 14 januari 2012 18:57 schreef KritischeMassa het volgende:
[..]
Lieverd, kijk naar de code en help jezelf verder
Ik vind je best lief denk ik maar ik ben geen code-FEBO, waar je half warme code uit de muur trekt. Als je er niet uitkomt en je hebt specifieke vragen wil ik ze best beantwoorden...
Nee, met Verticaal zoeken moet je op te zoeken waarde links staan.quote:Op zondag 15 januari 2012 20:47 schreef EL_Presidente het volgende:
bij verticaal zoeken: Zoekt in de meest linkse kolom in de matrix naar een bepaalde waarde.
is er ook een mogelijkheid dat ie juist zoekt in de meest rechtse kolom?![]()
eerst zelf proberen?..quote:Op zondag 15 januari 2012 20:56 schreef DaFan het volgende:
[..]
Nee, met Verticaal zoeken moet je op te zoeken waarde links staan.
Anders moet je INDEX(VERGELIJKEN(etc)) gebruiken. Succes, eerst zelf proberen
En dan geeft iemand het antwoord, werkt het niet, moeten we t aanpassen, werkt nog niet, etc., tot dat het wel werkt. En een week later weer een vraag..quote:Op zondag 15 januari 2012 20:57 schreef EL_Presidente het volgende:
[..]
eerst zelf proberen?..![]()
gast ik heb de ballenverstand van Excel daarom vraag ik het ook hier..
Een hele andere formule, met bijvoorbeeld =INDEX(VERGELIJKEN())) zoals DaFan al zei..quote:maar uh ik heb dus dit..
=VERT.ZOEKEN(A:A;Blad1!A:B;2;ONWAAR) (hij zoekt dus (default) in de meest linker kolom)
wat moet ik hiervan maken zodat ie in de meest rechter kolom zoekt?![]()
dat is als excelexpert makkelijk praten tegen een excelnoob die gisteren excel ontdekt heeft..quote:Op zondag 15 januari 2012 21:05 schreef qu63 het volgende:
[..]
En dan geeft iemand het antwoord, werkt het niet, moeten we t aanpassen, werkt nog niet, etc., tot dat het wel werkt. En een week later weer een vraag..
En dat je er de ballen verstand van hebt is geen probleem, dat je het ook niet wil weten (en dus geen inzet toont) wel..
[..]
Een hele andere formule, met bijvoorbeeld =INDEX(VERGELIJKEN())) zoals DaFan al zei..
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |