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

Resultaten uit Matrix kopiëren naar leeg blad, in de Matrix zit wel een variabele

Status
Niet open voor verdere reacties.

AbvStaalduinen

Gebruiker
Lid geworden
11 mei 2009
Berichten
12
Hallo allemaal,

Ik zit met een probleem en vind in andere topics geen oplossing.

Ik heb een schaarconstructie opgelost doormiddel van een matrix van 24x24. De krachten in de schaar zijn onder elke hoek anders dus kan hoek Alfa variabel worden gekozen. Hierdoor wijzigen de resultaten in de matrix steeds.

Nu wil ik op een leeg blad een overzicht maken van de 24 uitkomsten per hoek. Waarbij hoek Alfa tussen de 5 en 55 gekozen kan worden in stappen van 5. (5, 10, 15, ....., 50, 55).

Ik ben gestart door het maken van een Macro (macro opnemen). Ik vulde hierbij hoek alfa op blad "Matrix" in, kopieerde vervolgens het eerste resultaat. Ging hierna naar het blad "Overzicht schaarbenen", selecteerde de cel waar het resultaat moest komen en plakte hier de waarde (dus niet de formule). Vervolgens weer terug naar blad "Matrix", 2de uitkomst kopiëren, vervolgens weer naar blad "Overzicht schaarbenen" en plakte hier, naast het eerste resultaat, het tweede resultaat. Dit heb ik voor alle 24 waardes gedaan. Vervolgens vulde ik voor hoek alfa 10 in en herhaalde de eerste stappen weer.

Je begrijpt het al dit kost veel tijd. Dit kon iets versneld worden door de gehele code voor één hoek te kopiëren en in de programmacode de waarde van de regel te veranderen (één lager). Maar het resultaat van deze Macro is niet fraai. Op het blad "Matrix" is namelijk de commandbutton "Matrix invullen" geplaatst. Als deze ingedrukt wordt lijkt het alleen alsof je computer op hol begint te slaan. Er wordt namelijk, heel snel, continue tussen de bladen gewisseld, zoals met het macro opnemen is opgegeven. Een deel van de code die ik nu heb ziet er als volgt uit:
Code:
Sub Matrix_invullen()

    Sheets("Matrix").Select
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("AD18").Select
    Selection.Copy
    Sheets("Overzicht schaarbenen").Select
    Range("B5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Matrix").Select
    Range("AD30").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Overzicht schaarbenen").Select
    Range("C5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Matrix").Select
    Range("AD40").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Overzicht schaarbenen").Select
    Range("D5").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

---------> zo nog 21 resultaten. Hierna wordt de hoek Alfa gewijzigd in 10 graden.

Code:
Sheets("Matrix").Select
    Range("E4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "10"
    Range("AD18").Select
    Selection.Copy
    Sheets("Overzicht schaarbenen").Select
    Range("B6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Matrix").Select
    Range("AD30").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Overzicht schaarbenen").Select
    Range("C6").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Etc, etc,

Wat ik eigenlijk wil is als volgt, je drukt op de knop en vervolgens wordt op de achtergrond het blad "overzicht schaarbenen" gevuld. Is het laatste resultaat hier ingevuld, dan wordt pas het blad "Overzicht schaarbenen" getoond.
 
Vermijd select en activate in VBA-code.

Deze code is voldoende:
Code:
sub simulatie()
  for j=5 to 55 step 5
    [Matrix!E4]=j
  next
end sub

zet in blad "Overzicht schaarbenen" in cel B5 de formule:
= Matrix!AD18
in C5 = Matrix!AD30
in D5 = Matrix!AD40
enz.
 
snb bedankt voor je snelle reactie.

De code voor het automatisch wijzigen van de hoek Alfa werkt. Ik had dit ook al eerder gedaan maar dan met behulp van "macro opnemen". Dit werkt dan wel sneller. Het aanpassen van de stappen is nu ook veel eenvoudiger aan te passen.

Alleen met de formule =Matrix!AD18 ben ik er nog niet. Op deze manier neemt het blad namelijk alleen het recente getal over. Als je de commandbutton nu indrukt, vliegen de getallen 5 t/m 55 voorbij. Je hebt dus niet de tijd om de 24 resultaten per hoek te bekijken. Daarom wil ik op het blad "overzicht schaarbenen" de 24 resultaten per hoek opsommen. Als je dat met bovenstaande formule doet, krijg je een overzicht van 11 rijen met 24 dezelfde waardes. Het overzicht moet er dus als volgt uit komen te zien:

Code:
               Fa     Fb      Fc      Fd      Fe      Ff     Fg    ......   Fn
5              x1     x2      x3       ....  
10                                                 .....
15                                                           .....
20                                                                   .....
25                                                                           .....
...
alfa(n)                                                                               xn

De getallen x1 t/m xn moeten dus steeds veranderen als de parameters voor de matrix wijzigen. Het zou ook mooi zijn als je met het programma gelijk de hoek alfa kan aanpassen naar de stappen die je hebt gemaakt. Het programma bepaald dus zelf hoeveel rijen er op dat moment nodig zijn (afhankelijk van het aantal stappen dat gekozen is).
 
Zet je bestand hier neer, praat gemakkelijker.
 
Hierbij het document.

Dan heb ik gelijk nog een vraag:
Om het eenvoudig te houden heb ik gekozen voor een bereik van 5 tot 55 met stappen van 5. Als je dit veranderd naar 1, kom je uiteindelijk ook goed uit. Als ik dit verander naar 3bijvoorbeeld dan stopt het bereik op 53 (= te wijzigen in cel K4). Eigenlijk wil ik dus standaard beginnen met de minimale hoek (Min) en eindigen bij de maximale hoek (Max). De waardes hiertussen moeten dan met een stapgrootte van 'x' kunnen wijzigen zonder dat de maximale waarde in gevaar komt.
 

Bijlagen

  • Matrix_berekening_helpmij.rar
    27,3 KB · Weergaven: 53
Helaas, omdat ik van de meerwaarde van latere versies nog niet ben overtuigd, kan ik alleen overweg met xls-bestanden.
 
Hierbij het xls-bestand. Ik hoop dat met het omzetten de macro's zijn blijven werken.
 

Bijlagen

  • Matrix_berekening_helpmij.rar
    15 KB · Weergaven: 46
1. Mij is niet duidelijk waarin de kolommen van elkaar verschillen
2. Ik kan niet beoordelen of de formule voor de berekening klopt (ik krijg hier nl. overal hetzelfde getal (dat overeenkomt met de waarde in cel E3.
3. Toelichting stapsgewijs:
het werken met variabelen versnel VBA en voorkomt 'schermflikkeringen' (=screenupdating)
- lees de criteria voor min. max en stap in
- maak een lege matrisx van 24 x 24
- zet de waarde van cel E3 in vairabele y
- voer de berekeing voor iedere cel van de 24 x 24 matrix uit
- zet de resultaten van de matrix in het daarvoor bestemde gebied

Code:
Private Sub CommandButton1_Click()
    st = [Matrix!K2:K4]
    sq = [Matrix!B11:Y34].Offset(100)
    y = [E3]
    
    For j = 1 To UBound(sq)
        For jj = 1 To UBound(sq, 2)
            sq(j, jj) = bereken(st(1, 1) + (st(2, 1) * (j - 1)), y)
        Next
    Next
     
     [Matrix!B11:Y34] = sq
End Sub

Function bereken(x, z)
    bereken = Cos(x / 180 * Pi) * z
End Function
 
Zijn dit de resultaten die je wil zien op je overzichtblad ?

Mvg

Rudi
 

Bijlagen

  • Matrix_berekening.xls
    75 KB · Weergaven: 38
Voor snb: de toepassing waar ik de code in wil gaan gebruiken is iets anders dan nu is voorgelegd maar de werkwijze is gelijk. Ik wil dus gewoon de gegevens die ik per hoek Alfa uit de Matrix krijg, in een later stadium kunnen evalueren doormiddel van een overzicht op een ander werkblad. Zodra de knop "Matrix invullen" wordt ingedrukt en er wat schermflikkeringen zijn maakt me niet uit, alleen het probleem wat ik met de macro had was dat er werd gewisseld tussen de bladen en dat was wel vrij irritant. Ik wil de formule voor de matrix dus ook gewoon in de cel laten staan en niet meenemen in m'n macro. De code die Warme Bakkertje hiervoor heeft gebruikt werkt daarom prima en dat is ook wat ik wil, bedankt hiervoor.

Nu zit ik alleen nog met het probleem wat ik al eerder voorlag.

De hoek Alfa wordt nu bepaald door de Min en Max waarde welke in cel K2 en K3 staan. Vervolgens wordt een stapgrootte aangegeven. Als je bijvoorbeeld Min=5 invult en Max=55 met een stapgrootte van 3 komt je nooit goed uit op 55. Dit is niet wat ik wil kan dit ook als volgt:

Stel ik heb een minimale hoek van 3,2 en een maximale hoek van 54,11 en ik geef een stapgrootte aan van 2. Het programma gaat dan kijken hoe hij dit het beste kan opdelen in groottes van 2 of een meervoud hiervan. De laagste waarde in het bereik wordt dan 2 (factor stapgrootte kleiner dan Min) en de grootste wordt 56 (factor stapgrootte groter dan Max. In het overzicht komen onder de hoek alfa de waardes voor 2,4,6,8,10....50,52,54 en 56) onder elkaar te staan. Vervolgens wordt er één regel overgeslagen en komen ook nog de waardes voor de MIN en MAX (3,2 en voor 54,11) in het overzicht te staan.

Voor stapgrootte 1 zou je een range moeten krijgen van 3,4,5,...51,52,53,54 ..3,2;54,11
Voor stapgrootte 3 zou je een range moeten krijgen van 3,6,9,12....51,54,57 .. 3,2:54,11
Voor stapgrootte 5 zou je een range moeten krijgen van 0,5,10.....45,50,55 .. 3,3:54,11

Hoop dat het zo duidelijk genoeg is.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan