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

Anti-symmetrische matrix

Status
Niet open voor verdere reacties.

ibouwman

Gebruiker
Lid geworden
9 nov 2009
Berichten
7
Beste forumleden,

Kan iemand mij misschien helpen/tips geven voor het volgende probleem:

Ik heb de onderste helft van een anti-symmetrische matrix en moet de volledige matrix genereren. De rijen moeten dus getransponeerd worden naar kolommen en indien de cel in de rij een 1 bevat moet dit een -1 zijn in de getransponeerde cel.

Kortom, de volgende informatie heb ik:

0
1 0
1 1 0
1 1 1 0

Dit moet worden:
0 -1 -1 -1
1 0 1 -1
1 -1 0 -1
1 1 1 0

Natuurlijk kan het bij een klein voorbeeld nog handmatig, maar de matrix die ik heb is aanzienlijk groter (600 rijen). In de matrix die ik heb, bevat niet iedere cel informatie.

Alvast bedankt,

Irma
 
Dag Irma

Met een kleine macro:

Code:
Sub fff()

    With ActiveCell.CurrentRegion
        .SpecialCells(4).Formula = "=-INDEX(" & .Address & ",COLUMN()-" & .Cells(1).Column - 1 & ",ROW()-" & .Cells(1).Row - 1 & ")"
    End With

End Sub

Selecteer een cel met een getal in en voer hem uit.

Wigi
 
Laatst bewerkt:
Oke, bedankt voor de snelle reactie.

Het werkt bijna. Hoe zorg ik ervoor dat lege cellen ook lege cellen blijven? Nu komt in iedere lege cel een 0 te staan.

Groeten,

Irma
 
Als je wil kan je de formule in een ALS-DAN vorm gieten.

Je ziet in de VBA-code staan wat je nodig hebt om de cel volgens de spiegeling te bepalen.

Hier moet dus een =ALS( functie rond.

Denk eraan dat formules in VBA in het Engels komen, met een komma als scheidingsteken.

Wigi
 
Zelf had ik inderdaad ook al bedacht dat dat waarschijnlijk met een IF loop moet worden opgelost. Ik heb lang geprobeerd een oplossing te vinden, maar krijg het niet voor elkaar om een if -loop toe te voegen aan deze macro, zodat lege cellen ook leeg blijven.

Hopelijk kan iemand mij nog eenmaal helpen...

Alvast bedankt,

Irma
 
Code:
Sub tst()
  sq = Sheets("Blad1").UsedRange
  For j = 2 To UBound(sq, 2)
    For jj = 1 To j - 1
      If sq(j, jj) <> "" Then sq(jj, j) = sq(j, jj) * -1
    Next
  Next
  Sheets("Blad1").UsedRange = sq
End Sub
 
Snb,

Heb je deze code ook getest? Bij mij doet deze code niets namelijk... Wat doe ik fout?

Groeten,

Irma
 
Is de bladnaam wel correct bij jou (of aangepast in de code)? Wellicht ben je op een verkeerd blad aan het kijken.
 
De bladnaam heb ik inderdaad aangepast naar de bladnaam die ik gebruik, maar de macro doet niets.

Moet ik iets veranderen in de code? Moet ik een cel selecteren met een waarde erin of de gebruikte range toevoegen aan de code? Alle drie de opties heb ik geprobeerd...
 
Je moet niets aanpassen.

Hang je bestand maar eens bij hier.
 
Lees dan je eerdere posts opnieuw. In het bestand staan er getallen boven de diagonaal, in de vraag wil je dit omgekeerd hebben? Vanwaar die verandering in de vraagstelling?
 
Bedankt voor de reacties, het probleem is opgelost:D Excuses voor de verwarring in de vraagstelling, dat komt omdat beide situaties voor kunnen komen, maar dat was ik vergeten te vermelden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan