• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

matrixformule omzetten naar VBA code,

Status
Niet open voor verdere reacties.

pjava001

Gebruiker
Lid geworden
28 apr 2020
Berichten
7
Hallo,

Wie kan mij helpen met het omzetten van een matrixformule naar VBA code.

De matrixformule is: {=INDEX(Verificatiematrix!I:I;VERGELIJKEN($E$5;ALS(Verificatiematrix!D:D=A6;Verificatiematrix!G:G);0))}

De bedoeling is dat er waardes uit cellen opgehaald worden uit werkblad verificatiematrix naar werkblad verificatiemodule.
Middels de VBA wil ik dit automatiseren voor elke werkblad die ik invoeg uit een ander excel bestand. Deze VBA code zit al in het bijgevoegde bestand.
Waar #N/B staat moet komen te staan "Fout, niet gedefinieerd" of iets dergelijks.

Ik hoop dat dit mogelijk is in VBA-Code.

mvg,
Pascal
 

Bijlagen

  • Verificatiematrix & Module_test.xlsm
    48 KB · Weergaven: 52
Code:
Range("F6").FormulaArray = "=INDEX(Verificatiematrix!I:I,MATCH($E$5,IF(Verificatiematrix!D:D=A6,Verificatiematrix!G:G),0))"
 
Pascal, welkom op Helpmij.nl!

Open de bijlage, druk op de Knop 'Matrixformule invoegen'

Als dat naar wens is, kijk dan in Module2
 

Bijlagen

  • Verificatiematrix & Module_test (hs).xlsm
    49,3 KB · Weergaven: 44
Hallo,

Bedankt voor jullie inzet in deze.

Ik zie dat ik niet helemaal duidelijk ben geweest.
De oplossing die jullie aandragen is voor een cel in kolom F. De VBA-code moet werken voor alle cellen in kolom F, dwz voor de rijen waar waarden in de cellen staan in de kolommen A t/m E.
En daar waar dan de waarde #N/B in een cel in Kolom F wordt getoond, moet dan"Fout, niet gedefinieerd" getoond worden.

Ik hoop dat jullie mij hier de VBA code van kunnen aandragen, ben een te grote leek op het gebied van VBA.
Ben me er in aan het verdiepen, ben echter niet zo ver.
(Hebben jullie wellicht een goede site waar stap voor stap VBA-code wordt uitgelegd?)

Alvast bedankt en hopelijk zie ik jullie reactie tegemoet.

Groetjes Pascal
 
Hallo,

Nog een kleine aanvulling, want ik ben nog steeds niet helemaal duidelijk.
Met 1 druk op de knop moeten de waarden in de cellen van kolom F getoond worden.

gr,
Pascal
 
Ben jij dan niet de auteur van de rest van de code?
Wat die ziet eruit alsof die door iemand gemaakt is met verstand van zaken.
 
Hij heeft de codes zelf wel gewijzigd.
Dat zie je zo als je verstand van zaken hebt.

Code:
Sub VERIFIEER_1()
   For Each c In Range("a5").CurrentRegion.Columns(1).Cells   'alle A-cellen in het gebruikte bereik
      If WorksheetFunction.Count(c.Offset(, 4).Resize(, [SIZE=3][COLOR=#ff0000]5[/COLOR][/SIZE])) = 2 Then   [COLOR=#ff0000]'staan er 2 getallen in D en E[/COLOR]
         c.Offset(, 8).Value = IIf(c.Offset(, 4).Value <= c.Offset(, 5).Value, "VOLDOET", "VOLDOET NIET")   'afhankelijk van waarden wel of niet voldoen
      Else
         c.Offset(, 8).Value = " "             'geen 2 getallen = ???
      End If
   Next
End Sub
 
zie bijlage.
- Maak van beide gegevens tabellen, dat werkt stukken gemakkelijker. Dan hoef je 1 en ander niet door te kopieren middels VBA.
- maak vervolgens gedefinieerde namen van je tabelkolommen D, G en I
- nu kan je kiezen uit 2 mogelijke oplossingen via matrixformules, de kolom F en de kolom G
Mits alles nu in een tabel staat, is het vrij gemakkelijk. Je moet niets meer doorkopieren, dat doet de tabel in jouw plaats, behalve de 1e keer.
Dan tik je de formule er eerst netjes in + CSE om er een matrixformule van te maken.
Dan verschijnt er onderaan rechts van die cel een klein vierkantje, klik daarop (eventueel 2 keer) en klik op "alle cellen in deze kolom aanpassen aan deze formule".

Daarmee is de vraag niet opgelost om dat via VBA te doen, dat zijsprongetje heb je niet meer nodig.
Merk op dat in mijn matrixformule, in vergelijking met de voorgestelde matrixformule, slechts de gebruikte rijen van die tabel gebruikt worden, niet alle rijen van het werkblad.
Voor die 40 rijen in je werkblad zal dat nu niet veel uitmaken, maar stel dat je zo'n matrixformule 1.000 keer zou toepassen, dan vrees ik een beetje voor de vereiste rekencapaciteit. Je werkmap zal duidelijk vertragen.
 

Bijlagen

  • Verificatiematrix & Module_test.xlsm
    54,5 KB · Weergaven: 34
is ook een optie !
Ik was er eigenlijk nooit aan begonnen omdat het idee van die matrixformule even iets verfrissends was, maar anders had een UDF met diezelfde gedachtengang er ook mogen wezen.
 
voor in mijn bijdrage 8
Let wel, er wordt hier een chronometer gebruikt om de nodige tijd van een actie meten.
Let wel, voor heel kleine tijden is die eigenlijk niet zo betrouwbaar, louter indicatief.
Het was enkel om je duidelijk te maken dat matrixformules, en vooral slecht geformuleerde, je op termijn niet happy maken.
Code:
Sub Matrixformules()
   With Sheets("verificatiemodule")
      Set c = .Range("F6:F46")                   '1e bereik
      tijd = Timer                               'chrono starten
      c.Cells(1).FormulaArray = "=IFNA(INDEX(Verificatiematrix!C[3],MATCH(R5C5,IF(Verificatiematrix!C[-2]=RC[-5],Verificatiematrix!C[1]),0)),""fout, niet gedefinieerd"")"   'matrixformule in 1e cel
      c.Cells(1).AutoFill c                      'doortrekken naar andere cellen
      MsgBox "1e reeks matrixformules aanpassen duurt " & Format(Timer - tijd, "0.000\ sec")   'uitlezen chrono

      Set c = .Range("G6:G46")
      tijd = Timer
      c.Cells(1).FormulaArray = "=IFNA(INDEX(KolI,MATCH(RC[-6]&""oppervlakte"",KolD&KolG,0)),""fout, niet gedefinieerd"")"
      c.Cells(1).AutoFill c
      MsgBox "2e reeks matrixformules aanpassen duurt " & Format(Timer - tijd, "0.000\ sec")
   End With
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan