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

Goedkoopste leverancier

Status
Niet open voor verdere reacties.
de bron voor je draaitabel is een tabel, dus hoef je je niets aan te trekken over het aantal rijen, zo'n tabel is automatisch dynamisch.
De matrixforumes naast de draaitabel, daar zet je er zoveel van als het max aantal personeelsleden, dus bv. 20 of 50, dus niet zo verschrikkelijk veel.
In de matrixformules zelf zijn de bereiken van de tabel verwerkt.
Al bij al, nogal rechttoe-rechtaan.
 
dit kan ook
Code:
Sub Goedkoopste()
  Dim a, i&, it, arr, BGoedkoper As Boolean
  a = Sheets("blad1").Range("A1").CurrentRegion.Resize(, 4).CurrentRegion.Value
  With CreateObject("scripting.dictionary")
    For i = 1 To UBound(a)
      it = .Item(a(i, 1))
      BGoedkoper = VarType(it) = vbEmpty
      If Not BGoedkoper Then BGoedkoper = (it(3) > a(i, 3))
      If BGoedkoper Then
        arr = Application.Index(a, i, 0)
        .Item(a(i, 1)) = arr
      End If
    Next
    a = Application.Index(.items, 0, 0)
  End With

  With Range("G1").Resize(UBound(a), UBound(a, 2))
    .Columns(1).NumberFormat = "@"
    .Value = Application.Index(a, 0, 0)
    .EntireColumn.AutoFit
  End With
End Sub
 
Na 7 minuten was hij toch al aan rij 725 bezig.
Wil maar zeggen dat dat ook geen oplossing is voor 36000 rijen.
Die draaitabeluitleg van u heb ik meer vertrouwen in maar kan dat zelf niet testen heb totaal geen verstand van draaitabellen.
Zou me dat toch eens moeten eigenmaken.
 
Is de sortering op eancode en vervolgens op prijs al overwogen ?

En daarna:

Code:
Sub M_snb()
   sn = Cells(1).CurrentRegion
   With CreateObject("scripting.dictionary")
      For j = 2 To UBound(sn)
          If Not .exists(sn(j, 1)) Then .Item(sn(j, 1)) = sn(j, 1) & "_" & sn(j, 2) & "_" & sn(j, 3)
      Next
      
      Cells(1, 10).Resize(.Count) = Application.Transpose(.items)
   End With
End Sub
 
Deze is goed tot zeer goed te doen, enkel de uitkomst staat in een kolom en is een beetje onhanteerbaar.
Kan het zelf niet aanpassen.
 
1e macro maakt 36.000 producten aan, 2e macro zoekt daarin naar de goedkoopste
 

Bijlagen

  • goedkoopste.xlsm
    66,7 KB · Weergaven: 32
'Ietsje' sneller:

Code:
Sub RandomAanmaken()
  Randomize
  ReDim sn(36000, 3)
  
  With Range("Tabel1").ListObject
'    .DataBodyRange.AutoFill .DataBodyRange.Resize(UBound(sn))
    For j = 1 To UBound(sn)
      y = Rnd
      sn(j, 0) = Int(y * 10 ^ 7)
      sn(j, 1) = "product_..."
      sn(j, 2) = y * 10
      sn(j, 3) = Chr(65 + y * 25)
    Next
    .DataBodyRange.Value = sn
  End With
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan