• 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.

Matrix omzetten in VBA

Status
Niet open voor verdere reacties.

rikik

Gebruiker
Lid geworden
14 feb 2017
Berichten
125
Hey Hey,

Ik zit met een kleine vraag.

Ik ben reeds enkele weken bezig met de creatie van onderstaande Excel-macro.

" Is mijn eerste keer dat ik iets een VBA van zo'n formaat tracht te maken; vandaar de lange duurtijd" :eek:

Nu zit ik nog met een laatste.

Op tabblad "Profit" tracht ik vanaf N6 een matrix om te zetten naar VBA.
Spijtg genoeg zonder enig succes.

Weet er iemand toevallig hoe dit moet? :rolleyes:
Ik heb hier al mijn hoofd over gebroken :(



Alvast bedankt.

Rikik
 

Bijlagen

  • Analayse.xlsx
    70,9 KB · Weergaven: 35
Op tabblad "Profit" tracht ik vanaf N6 een matrix om te zetten naar VBA.

wat bedoel je hiermee?

In je .xlsx bijlage staat geen macro/VBA, heb je al iets geprobeerd met VBA? Zo ja laat dat dan eens zien?
 
Laatst bewerkt:
Je hebt een xlsx document geplaatst, daar zit per definitie geen macro in.
 
Hey Haije,

Alvast bedankt voor je interesse.
Als je de Excel Analyse opent, dan vind je het tabblad Profit terug.
In het tabblad profit vind je in de cel 6N een matrix formule terug.

Ik heb getracht om dit om te zetten naar VBA.
Spijtig genoeg zonder succes. :eek:
 
selecteer N6
start de macrorecorder
druk op F2
druk op Ctrl+Shift+Enter
stop de macrorecorder

Open de VBA - editor en je ziet staan:
Code:
Sub Macro1()
'
' Macro1 Macro
'

'
    Selection.FormulaArray = _
        "=IFERROR(INDEX(qryClientContractsOneClient!C40,MATCH(Profit!RC[-1]&Profit!R3C14&MIN(IF(qryClientContractsOneClient!C17=Profit!RC[-1],qryClientContractsOneClient!C31,1000)*IF(qryClientContractsOneClient!C30=Profit!R3C14,1,1000)),qryClientContractsOneClient!C17&qryClientContractsOneClient!C30&qryClientContractsOneClient!C31,0)),"""")"
End Sub

Dat is de macroformule

In je openingespost heb je het echter over een matrix, niet over een matrixformule!
 
Laatst bewerkt:
Hey Haije,

Dit had ik ook geprobeerd.
Maar als ik de macro laat lopen krijg ik de foutmelding: " Fout 1004 tijdens uitvoering: Eigenschap FormulaArray van klasse Range kan niet worden ingesteld"
 
Je gebruikt te veel tekens in de formule. In VBA mag dat maximaal 255? zijn.

Wijzig de naam van tab qryClientContractsOneClient eens in bv 1 en probeer het dan nog eens.
 
Die 255 karakter limiet geldt overigens alleen voor de FormulaArray eigenschap, niet voor de Formula of FormulaR1C1 eigenschap.
 
In een gewone formule is dat 1024 karakters; rekening houdend met het nesten of max aantal argumenten van de formule.

In een arrayformula en de evaluate is 255 tekens maximaal.
Code:
sub hsv_evaluate()
 range("a1").value = evaluate("rept(""x"",255)")
[a2] = [rept("x",255)]
end sub
Maak in de 'rept' (herhaling) van 255 maar eens 256.

Over je formulevraag:
Je kan het veranderen zoals @VenA aangaf; in onderstaande code gaat dat automatisch.
Dat het calculeren zolang duurt komt niet van de code maar van je matrixformules in het werkboek die over gehele kolommen gaan.
Selection heb ik zomaar overgenomen.

Code:
Sub hsv()
Dim StrWs As String, StrC As String
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
StrWs = "qryClientContractsOneClient"
StrC = 1
  Worksheets(StrWs).Name = StrC
    Selection.FormulaArray = "=IFERROR(INDEX(" & StrC & "!C40,MATCH(Profit!RC[-1]&Profit!R3C14&MIN(IF(" & StrC & "!C17=Profit!RC[-1]," & StrC & "!C31,1000)*IF(" & StrC & "!C30=Profit!R3C14,1,1000))," & StrC & "!C17&" & StrC & "!C30&" & StrC & "!C31,0)),"""")"
  Worksheets(StrC).Name = StrWs
Application.Calculation = xlCalculationAutomatic
End Sub
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan