• 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 uitlezen inclusief coördinaten

Status
Niet open voor verdere reacties.

pelikano

Gebruiker
Lid geworden
30 sep 2009
Berichten
195
Weer een lastig probleem die ik niet terug kan vinden op forum/Google.

Ik heb een matrix die door gebruikers wordt ingevuld met waarden. Nu wil ik de waarden op de coördinaten uitlezen samen met de bijbehorende coördinaten. Ik heb een voorbeeldje gemaakt maar mijn denkwijze loopt vast. Het resultaat moet een lijst worden van X, Y, Z zodat we deze kunnen inlezen in een andere tool.

iemand een ideetje, het liefst zonder VB maar anders is een VBtje ook welkom.
 

Bijlagen

  • Matrix_uitlezen.xls
    18,5 KB · Weergaven: 66
De toppers zijn in uiterste verwarring denk ik. Voorbeeld is zo mogelijk nog onduidelijker dan je vraag

Ron
 
Laatst bewerkt:
pelikano,
er staat niet bij of het ook met VBA mag
en er staat niet bij of je lege cellen ook in de lijst moeten
en vul ( ter verduidelijking ) de tabel in zoals je hem zo willen hebben.
groet sylvester
 
Ik dacht, doe er een voorbeeldje bij voor de verduidelijking....:rolleyes: En schrijf er bij
iemand een ideetje, het liefst zonder VB maar anders is een VBtje ook welkom.
Maar sorry dat ik niet duidelijker ben, gelukkig zijn er nog wel toppers aanwezig die kunnen helpen:thumb:

Ik heb vanmorgen nog eens gezocht met een andere kijk op het probleem. Ben ik wel een stukje VB tegen gekomen maar die geeft nog niet het gewenste resultaat. Ik heb de gewenste resultaten als voorbeeld ingevuld in de Excel en heb de VB-macro er ook bijgezet. Misschien kunnen jullie helpen te "vertalen" naar het juiste resultaat. Ik kan beter koekjes bakken van VB-script uitpluizen.:eek:

De bron ziet er zo uit;
Code:
	a	b	c	d	e	f
A		m	t			
B	m		t	t		
C		m	n		t	
D	t		m	m		t
E		t	m	t	t	
F		t	t

Scriptje ziet er nu zo uit;
Code:
Sub Matrix2lijst()

    Dim r As Range
    
    Range("M:M").ClearContents
    Range("M1").Value = "Resultaat lijst VB Script"
    
    For Each r In Range("A2:G8").SpecialCells(xlCellTypeConstants, xlTextValues)
    
        If r.Value > 0 Then
        
            Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Range("A" & r.Row).Value & " - " & Cells(4, r.Column).Value & r.Value
                    
        End If
    
    Next

End Sub

Resultaat zou moeten zijn;
Code:
X	Y	Z
a	B	m
a	D	t
b	A	m
b	C	m
b	E	t
b	F	t
c	A	t
c	B	t
c	C	n
c	D	m
c	E	m
c	F	t

Of eventueel mag het resultaat ook zijn;
Code:
X,Y,Z
a,B,m
a,D,t
b,A,m
b,C,m
b,E,t
b,F,t
c,A,t
c,B,t
c,C,n
c,D,m
c,E,m
c,F,t
 

Bijlagen

  • Matrix_uitlezen VB V1-1.xls
    72 KB · Weergaven: 25
Kijk eens of deze formule-aanpak de gewenste resultaten geeft.
Edit: macro ook aangepast.
 

Bijlagen

  • Matrix_uitlezen VB V1-1.xls
    64 KB · Weergaven: 29
Laatst bewerkt:
Top! Die werkt! Zojuist heb ik ook een andere manier gevonden om het resultaat te kunnen krijgen mbv draaitabellen. Die zal ik zo ook even posten.
 
Van Martix naar lijst

Een matrix omzetten naar een lijst met behulp van een draaitabel.

Excel(2003)
Data, Draaitabel- en gegevensrapport
Kies: Meervoudige samenvoegingsbereiken en Draaitabel, volgende
Kies: De paginavelden zelf maken, volgende
Selecteer het bereik inclusief de X-waarden en Y-waarden(dus de hele matrix), volgende
Kies: Bestaand werkblad en plaats waar de draaitabel moet komen, voltooien.
Truuk: pak Rij op en zet deze buiten de tabel(de rij verdwijnt dan)
Truuk: pak Kolom op en zet deze buiten de tabel(de kolom verdwijnt dan)
Truuk: dubbelklik op de totaalwaarde om een lijst van het totaal te krijgen in een nieuw tabblad.

Met dank aan: http://www.tek-tips.com/faqs.cfm?fid=5287


Edit: bijlage toegevoegd met alle drie de oplossingen erin.
Met dank aan WHER voor het maken van de formule oplossing en aanpassen van de VB! :thumb::thumb:
 

Bijlagen

  • Matrix_uitlezen VB V1-3.xls
    75,5 KB · Weergaven: 28
Laatst bewerkt:
In Excel gebuik je toch VBA
Wat bedoel jij nou met VB, een voorbeeld, Visual Basic of Visual Basic for Applications ??

In VBA:

Code:
Sub snb()
    ReDim sn(Cells(1).CurrentRegion.SpecialCells(2).Count, 2)
    
    j = 0
    For Each cl In Cells(1).CurrentRegion.SpecialCells(2)
      If cl.Column > 1 And cl.Row > 1 Then
        sn(j, 0) = cl.Offset(1 - cl.Row).Value
        sn(j, 1) = cl.Offset(, 1 - cl.Column).Value
        sn(j, 2) = cl.Value
        j = j + 1
      End If
    Next
    
    Cells(20, 1).Resize(UBound(sn) + 1, UBound(sn, 2) + 1) = sn
End Sub
 
Laatst bewerkt:
Dit zal wel vloeken zijn in de progammeerkerk maar ik heb al heel wat VB code in Excel gecut&paste wat dan veelal gewoon gesnapt wordt door Excel. Dus mij maakt het niet uit, Excel kennelijk ook niet. Maar strikt genomen hebben we het over VBA als het om Excel gaat. Je leest het al, ik heb er weinig verstand van en vertrouw op specialisten.
 
hallo Pelikano
hier een oplossing met een matrix_formule
dus als je hem zelf ergens toepast afstuiten in de formulebalk met ctrl_shift_enter
dit is de formule:
Code:
Function XYZ(Tabel_incl_Kop_en_Rijnamen As Range)
    Dim Res(), K As Integer, R As Integer, Teller As Integer
    ReDim Res(Tabel_incl_Kop_en_Rijnamen.Cells.Count, 2)
    For R = 2 To Tabel_incl_Kop_en_Rijnamen.Rows.Count
        For K = 2 To Tabel_incl_Kop_en_Rijnamen.Columns.Count
            If Tabel_incl_Kop_en_Rijnamen(R, K) <> "" Then
                Teller = Teller + 1
                Res(Teller, 0) = Tabel_incl_Kop_en_Rijnamen(1, K)
                Res(Teller, 1) = Tabel_incl_Kop_en_Rijnamen(R, 1)
                Res(Teller, 2) = Tabel_incl_Kop_en_Rijnamen(R, K)
            End If
        Next K
    Next R
    Res(0, 0) = "Aantal=" & Teller
    XYZ = Res
End Function
en hier een voorbeeld Bekijk bijlage Matrix_uitlezen (met VBA formule (versie 1.xls
groet sylvester
 
Thx Sylvester, weer een nieuwe oplossing. Voor mij helemaal nieuw met een functie tussen { }. Ik snap het nog niet maar ga het uitpluizen. :confused:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan