[VBA]Matrix compressie

Pagina: 1
Acties:

  • Iradun
  • Registratie: Juli 2002
  • Laatst online: 23-10-2023
Hallo,

Ik ben bezig met het ontwikkelen van een programma in Visual Basic for Applications in Excel( een macro). De matrix bestaat uit meerdere rijen en kolommen met alleen maar enen en nullen. De laatste rij en kolom bevatten steeds de som van alle enen van die rij/kolom.

Ik heb een algoritme bedacht om dit op te lossen. Dit algoritme bestaat uit meerdere "subroutines" waarin steeds een percentage van de kolommen/rijen wordt "weggeveegd". Ik ben al vrij ver maar heb nog een paar probleempjes. Het programma wat ik tot nu toe heb ziet er zo uit:

Sub Convert()

Dim R As Long
Dim Co As Long
Dim c As Range
Dim l As Long
Dim x As Double
Dim z As Double
Dim rng As Range
Dim rnc As Range


On Error GoTo EndMacro
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


'STAP 1 - Aantal proevers dat 50% of meer van producten heeft getest

Set rng = ActiveSheet.UsedRange.Rows
Set rnc = ActiveSheet.UsedRange.Columns

For R = (rng.Rows.Count - 1) To 1 Step -1
x = Range("F" & R).Value
z = (x / (rnc.Columns.Count - 2)) * 100
If z < 50 Then
rng.Rows(R).EntireRow.Delete
End If
Next R


'STAP 2 - Aantal producten dat door 60% of meer van proevers is getest

Set rng = ActiveSheet.UsedRange.Rows
Set rnc = ActiveSheet.UsedRange.Columns

For Co = (rnc.Columns.Count - 1) To 2 Step -1
x = rnc.Cells(10, Co).Value
z = (x / (rng.Rows.Count - 2)) * 100
If z < 60 Then
rnc.Columns(Co).EntireColumn.Delete
End If
Next Co

EndMacro:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Het eerste probleem dat ik heb is dat ik in stap 1 en 2 steeds de de kolommen en rijen met de sommen van de enen wil benaderen alleen ik weet niet hoe ik dat relatief moet doen. Ik heb nu staan Range("F" & R).Value en rnc.Cells(10, Co).Value waarbij ik een relatieve waarde voor de "F" resp. 10 wil hebben.

Het tweede probleem is dat stap 1 en stap 2 niet achter elkaar uitgevoerd willen worden. Ze willen wel apart( dus als ik quotjes zet voor 1 van de stappen) maar niet achter elkaar.

hoop dat iemand me hiermee verder kan helpen,
mvg,
iradun

Verwijderd

Bij mij doet die gewoon de twee stappen? Ik weet niet wat er bij jou verkeerd gaat??

Voorbeeld dynamische verwijzing:

x = rng.Cells(R, rnc.Columns.Count).Value
x = rnc.Cells(rng.Rows.Count, Co).Value

Als je iets beter uitlegt wat er verkeerd gaat kunnen we misschien beter helpen, succes.

  • Iradun
  • Registratie: Juli 2002
  • Laatst online: 23-10-2023
Dat met de relatieve cellverwijzing begrijp ik nu en ik heb ik werkend gekregen.

Mijn precieze probleem is het volgende:

De laatste kolom en rij in mijn matrix bevatten cellen met Autosom, deze worden immers gebruikt in de 2 stappen van het algoritme. Mijn complete algoritme bestaat uit 6 stappen waarin steeds weer de som van de rijen en kolommen wordt gebruikt. Het probleem is dat nadat in de eerste stap rijen worden verwijdert de laatste rij en kolom niet meer Autosom zijn. Hier staan nu alleen de waarden in die autosom de eerste keer in de matrix had berekend. Wat ik dus nodig heb is dus een manier om aan het eind van elk van de zes stappen ervoor gezorgd wordt dat de laatste rij en kolom weer autosom zijn.

Verwijderd

Als je Application.Calculation = xlCalculationManual aanzet, berekent de sheet alleen op commando. Dus haal die regel eens weg, en dan berekent de sheet de som wel elke keer opnieuw.

  • Iradun
  • Registratie: Juli 2002
  • Laatst online: 23-10-2023
Ok bedankt voor de tip dat gedeelte van het programma werkt nu.

Ik heb nu nog 1 probleem dat te maken heeft met de bron van de matrix. De bron van de matrix is een Draaitabel gemaakt in Excel. Het probleem is dat ik de macro die ik gemaakt heb niet op de een draaitabel kan uitvoeren. Concreet heb ik de volgende problemen nog:

Hoe zou ik ervoor kunnen zorgen dat de ik de matrix kopieer naar een nieuwe sheet en daar automatisch de macro over heen laat gaan?

En hoe kan ik er dan voor zorgen dat de laatste rij en kolom in de macro automatisch autosom worden? In de draaitabel zijn de laatste kolom en rij de som alleen niet autosom en als je dit kopieert worden het zowieso "normale cellen" met de som erin.

  • Iradun
  • Registratie: Juli 2002
  • Laatst online: 23-10-2023
1 1 17
1 1 1 1 1 17
1 1 1 1 16
1 1 19
1 1 1 1 1 17
1 1 1 1 19
1 1 1 1 1 15
1 1 15
1 1 1 1 15
1 1 1 1 18
1 1 1 1 1 18
1 1 1 17
1 1 1 1 18
1 1 1 1 20
1 1 1 1 17
1 1 1 1 1 17
1 1 1 1 18
1 1 1 19
1 1 1 1 16
1 1 1 1 17
1 1 1 1 1 17
1 1 1 15
1 1 1 1 1 19
1 1 1 16
1 1 1 17
148 273 277 240 132 202 291 6479


Zo ziet de rechteronderhoek eruit van de ongecomprimeerde matrix.

[edit]alleen dan netjes gesorteerd in excel

[ Voor 26% gewijzigd door Iradun op 12-03-2005 17:36 ]

Pagina: 1