Door een lijst 'lopen'

Status
Niet open voor verdere reacties.

Robin121

Gebruiker
Lid geworden
4 mei 2011
Berichten
24
Hoi,

Ik ben een macro aan het schrijven die door een lijst in Excel 'loopt' en op basis van een voorwaarde bepaalde waarden overneemt naar een ander werkblad in hetzelfde bestand.
De volgende gevonden waarde die aan de voorwaarde voldoet moet dan in de volgende vrije cel van de opgegeven range in het doelbestand worden geplaatst.
Het gaat om zo'n 250 cellen, dus uitschrijven in een 'If/Then' geeft een enorme macro; niet echt een optie.
Tot nu toe heb ik het volgende samengesteld:

Code:
Sub overnemen()
    Worksheets("A").Select
    Application.ScreenUpdating = False
    Set myInput = Range("O10:O17")
        For Each Cell In myInput
            If Cell.Value > "0" Then
                Range("O10").Select
                Application.CutCopyMode = False
                Selection.Copy
                Worksheets("B").Select
                Application.ScreenUpdating = False
                Set myOutput = Range("AR7:AR14")
                    For Each Cel In myOutput
                        If Cel.Value = "" Then
                        Range("AR7").Select
                        'Application.CutCopyMode = True
                        ActiveSheet.Paste
                        End If
                    Next Cel
            End If
        Next Cell
    Application.ScreenUpdating = True
End Sub

Dit lijkt door de bron te 'loopen', maar er wordt nog niks weggeschreven.
Ik haal waarschijnlijk wat door elkaar, wie weet een eenvoudige oplossing hiervoor?
Bedankt vast!
:rolleyes:
 
Laatst bewerkt door een moderator:
Ipv een loop zou ik de inputrange filteren op niet-lege cellen en het resultaat in 1 keer kopieëren naar je doelrange.
Enig aandachtspunt is de manier waarop de inputrange gevuld wordt (manueel of met formules)
 
Code:
sub snb()
  [B!AR7:AR17]=application.transpose(filter([transpose(if(A!O7:O17>0,A!O7:O17,"~"))],"~",false))
end sub
 
Dag snb,
Dank voor je antwoord! Code werkt inderdaad, de waarden worden overgenomen op het andere blad. Alleen wordt #N/A in het doelbestand geplaatst waar lege cellen staan in het bronbestand..?
Daar zou ik ook graag lege cellen terugverwachten. Komt dat door de ~ in deze code?
Als ik de tilde vervang door 0 of een spatie, worden niet alle scores meer getoond..?
 
Code:
sub snb()
  sn=application.transpose(filter([transpose(if(A!O7:O17>0,A!O7:O17,"~"))],"~",false))
  [B!AR7].resize(ubound(sn)+1)=sn
end sub
 
Doe bij de Ubound +1 weg en het zaakje is compleet

@snb
Er bleef er nog eentje staan, daarom mijn opmerking. ;)
 
@WB

Dat betwijfel ik (tenzij je, anders dan ik, option base =1 hebt ingesteld)
 
snb,

Bijna goed! Er blijft 1 #N/A over, wordt geplaatst direct na de laatste geldige waarde..
20
21
3
22
2
5,3
78
#N/A
 
Werkt! option base =1 zegt mij niets..

@ warme bakkertje:
Ik ben ook bezig jouw oplossing uit te werken; maar deze code lijkt zoveel eenvoudiger in de uitvoer. Nou nog even kijken wat het beste werkt.
In het doelbestand moeten nog berekeningen gedaan worden met de geplaatste data.

Dank allebei!
Robin
 
@WB

Tsss. U heeft gelijk.

Code:
sub snb()
  sn=application.transpose(filter([transpose(if(A!O7:O17>0,A!O7:O17,"~"))],"~",false))
  [B!AR7].resize(ubound(sn))=sn
end sub

of
Code:
sub snb()
  sn=filter([transpose(if(A!O7:O17>0,A!O7:O17,"~"))],"~",false)
  [B!AR7].resize(ubound(sn)+1)=application.transpose(sn)
end sub
 
Bijkomende vraag:
Om het bronbestand horizontaal uit te lezen en vervolgens verticaal te laten plaatsen in het doelbestand...kan ik dan deze aanpassing maken?:

Code:
sub snb()
  sn=filter([transpose(if(A!O7:S7>0,A!O7:S7,"~"))],"~",false)
  [B!AR7:AR11].resize(ubound(sn)+1)=application.transpose(sn)
end sub
 
Laatst bewerkt door een moderator:
Code:
Sub snb2()
  sn = Filter([if(A!O7:S7>0,A!O7:S7,"~")], "~", False)
  [B!AR7:AR11].Resize(UBound(sn) + 1) = Application.Transpose(sn)
End Sub
 
Rudi,

Ik krijg een Run-time error 13, Type mismatch op de macro-run....?

Mvg,
Robin
 
Post eens een voorbeeldbestandje waarin je deze fout krijgt, want ik kan ze niet simuleren.
 
Sorry, waardeer jullie hulp erg, maar het duurde even; hectische tijden. Ik denk dat ik zelf weet waar het mis gaat; iets meer info voor jullie:
In een worksheet wil ik graag sportscores verwerken die opgehaald worden van het internet. Omdat mijn tool niet kan lezen uit en schrijven naar dezelfde file, heb ik een 'tussenbestand' gemaakt waarin de gegevens klaargezet worden voor communicatie met internet en daar weer opgevangen worden van internet voor verdere verwerking.
Vanuit het tussenbestand worden per regel 8 uitvragingen gedaan, voor elke uitvraging worden waarden in 3 kolommen geplaatst: een datum, een categorie en al dan niet een score. Dus kolom A bevat een datum, kolom B een categorie en kolom C een score of is leeg.
Doordat er twee verschillende categoriëen zijn, splits ik de waarden m.b.v. formules, waardoor twee blokken gegevens ontstaan, één voor categorie 1 en één voor categorie 2. Die waarden wil ik sorteren zodat van links naar rechts gevonden waarden getoond worden en evt. lege cellen achteraan komen te staan. Doordat de cellen echter formules bevatten, gaat het sorteren van deze cellen fout. Dus misschien is nu de vraag: kan ik cellen sorteren op hun waarden met behoud van de onderliggende formules?
Goed weekend allemaal!

Hier is de sortering voor categorie 1:
Code:
Range("AX10:BE10").Select
    ActiveWorkbook.Worksheets("import").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("import").Sort.SortFields.Add Key:=Range( _
        "AX10:BE10"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("import").Sort
        .SetRange Range("AX10:BE10")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
 
Laatst bewerkt door een moderator:
Zoek svp in je woordenboek eens het woord voorbeeldbestand op.
 
Ik denk niet dat het veel gaat helpen, maar hier komt 'ie:

"Geen resultaat voor ' voorbeeldbestand 'Het woord is verkeerd gespeld of het staat niet in het gratis woordenboek."
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan