cijfers naar tekst om te filteren in array via transponeren?

Status
Niet open voor verdere reacties.

StephaanK

Gebruiker
Lid geworden
19 jun 2015
Berichten
34
ik heb een tabel (in het origineel in blad verwerking) en bijkomende data (in blad verwerkingsinfo waar ook nog andere parameters staan voor de verwerking maar niet opgenomen in bijlage wegens te groot) die gefilterd moet worden op meerdere items om zo twee verschillende bestanden aan te maken: 1 met 2 voorkomende items en eentje met al de rest. het filteren van de twee items is geen problem, daarvoor gebruik ik deze
Code:
criterium = Array("=1204", "=1210")
. De andere filtering is moeilijker, daar heb ik meerdere items (zie bijlage). Volgens wat ik gevonden heb zou je een range in een array moeten steken die als string gedefinieerd wordt en de gegevens transponeren. Ik heb dat geprobeerd maar ik krijg enkel een filtering op het item "N1213" dat effectief als tekst wordt aanzien, de andere ziet hij nog als cijfers zelfs als ik die als tekst formatteer.
dit gebruik ik nu :
Code:
criterium = Worksheets("verwerkingsinfo").Range("a1:a" & sorteerrij).Value

critrange = Split(Join(Application.WorksheetFunction.Transpose(criterium), "#"), "#")
waarbij sorteerrij de laatste rij is waarin een gegeven voorkomt (in voorbeeld in bijlage is dat 12), criterium is als variant gedefineerd en critrange als string.
de filtering zou dan hier moeten gebeuren :
Code:
ThisWorkbook.Worksheets("verwerking").ListObjects("Tabel1").Range.AutoFilter Field:=18, Criteria1:= criterium, Operator:=xlFilterValues
.

In het origineel filter ik dus op veld nr 18 (komt niet voor in bijlage). Het is er mij om te doen hoe ik die array moet maken zodat ik die in de filter kan gebruiken.

Ik heb die via "macro opnemen" geprobeerd en dan is dit het resultaat (via het afvinken in de filter van de parameters die ik niet nodig heb)
Code:
 ActiveSheet.ListObjects("Tabel1").Range.AutoFilter Field:=18, Criteria1 _
        :=Array("1208", "1209", "1213", "1217", "1238", "1239", "1249", "1250", "1255", "N1213" _
        , "="), Operator:=xlFilterValues
en dat is wat ik via vba zou moeten krijgen

Stephaan
 

Bijlagen

  • transposetest.xlsx
    8,9 KB · Weergaven: 39
Ik heb in cel 1 wel een kolomnaam gezet.

Code:
Sub M_snb()
   With Columns(1).SpecialCells(2)
    .AutoFilter 1, Array("1208", "1209", "1213", "1217", 1238), 7
    .Offset(1).Copy
    .Cells(20, 6).PasteSpecial -4104, , , True
    .AutoFilter
   End With
End Sub

van kolom 1 een listobject gemaakt:

Code:
Sub M_snb()
   With ListObjects(1).ListColumns(1).Range
    .AutoFilter 1, Array("1208", "1209", "1213", "1217", 1238), 7
    .Offset(1).Copy
    .Cells(20, 6).PasteSpecial -4104, , , True
    .AutoFilter
   End With
End Sub

In jouw geval hoef je van listcolumns(1) slechts listcolumns(18) te maken
 
Laatst bewerkt:
bedankt voor de snelle reactie. Dat zal ik al eens uittesten.

hoe krijg ik de array Array("1208", "1209", "1213", "1217", "1238", "1239", "1249", "1250", "1255", "N1213") opgevuld zoals hij hier staat met vba zonder dat dat manueel wordt aangevinkt in de filter op basis van kolom 1 in het vb of rij c1:L1.

zelfs als ik de kolom of cellen als tekst formatteer werkt de filter nog altijd met cijfers behalve voor N1213 omdat daar een N staat en die herkent de filter wel als tekst en ik kan niet met een loop werken en 1 per 1 gaan filteren. Het moet met de hele reeks tegelijk.
Bijkomend probleem is dat het originele bestand beveiligd is en dat die beveiliging programmatorisch wordt opgeheven als dat nodig is om bewerkingen te doen maar de gebruikers kunnen niets wijzigen (dus ook niet aanvinken)
 
Code:
sn=filter[transpose(A2:A10)],"")

Resulteert in louter tekstwaarden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan