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

Vind het kolomnummer binnen een geselecteerd bereik [VBA]

Status
Niet open voor verdere reacties.

Ginger

Terugkerende gebruiker
Lid geworden
29 dec 2006
Berichten
2.972
Ik liep tegen iets stoms aan waar ik niet uit kom op de manier waarop ik het wilde en wat me ook niet meer loslaat. Ik wilde even snel een collega helpen met een tabel met ritnummers. Onze default ritnummers zijn per dag de honderdtallen (dus rit 100 voor maandag, 200 voor dinsdag enzovoorts). Ik had dus zijn 5 kolommen met ritnummers geselecteerd en wilde daar doorheen lussen om zo de check uit te voeren of bijvoorbeeld de rit 100 ook werkelijk in de eerste kolom van de selectie zou staan.
Dit werkt dus niet...
Code:
    For Each c In Selection       
        If IsNumeric(c.Value) Then
            If c.Column <> Val(Left(c.Value, 1)) Then c.Font.Color = vbRed
        End If
    Next c
Dit komt omdat de "c.column" niet het kolomnummer teruggeeft die binnen de selectie hoort, maar het kolomnummer van de cel binnen de sheet. In de bijlage heb ik een piepklein voorbeeldje gemaakt. Selecteer het bereikje F4:H5. Als je dan op de knop drukt, krijg je deze uitkomsten...
Regel: 4 kolom: 6
Regel: 4 kolom: 7
Regel: 4 kolom: 8
Regel: 5 kolom: 6
Regel: 5 kolom: 7
Regel: 5 kolom: 8

Maar eigenlijk wilde ik zien...
Regel: 1 kolom: 1
Regel: 1 kolom: 2
Regel: 1 kolom: 3
Regel: 2 kolom: 1
Regel: 2 kolom: 2
Regel: 2 kolom: 3

Ik heb het in de tussentijd opgelost door het bereik in een array te gieten maar dat was dus NIET mijn eerste opzet. Weet iemand hoe je wél die juiste kolommen en regels IN een selectie kan achterhalen?
 

Bijlagen

  • Helpmij.xlsm
    17,3 KB · Weergaven: 49
Laatst bewerkt:
Hmmm.... Ik heb nu dit als oplossing bedacht...
Code:
Sub KleurVerschovenRitten()
' 26/02/2018; Martijn had héél enthousiast het uitvalschema al gemaakt zonder dat ik de 'overige cellen' op font = Red had gezet
    
    For Each c In Selection
        If IsNumeric(c.Value) Then
            If (c.Column [B][COLOR="#FF0000"]- (Selection.Cells(1).Column - 1))[/COLOR][/B] <> Val(Left(c.Value, 1)) Then c.Font.Color = vbRed
        End If
    Next c

End Sub
Maar is nog steeds niet het antwoord op mijn vraag of je binnen een selectie het kolom- of regelnummer kan bepalen. ;)
 
Probeer deze eens:
Code:
Sub ToonPositieInSelectie()
    For x = 1 To Selection.Rows.Count
        cRow = (Selection.Row - 1) + x
        For y = 1 To Selection.Columns.Count
            cCol = (Selection.Column - 1) + y
            msg = msg & "Regel: " & x & " - Kolom: " & y & " - Waarde: " & Selection(x, y) & vbTab & " = Cells(" & cRow & "," & cCol & ")" & vbCrLf
        Next y
    Next x
    MsgBox msg
End Sub
 
Laatst bewerkt:
Edmoor, Dank voor je reactie.
Grappig... Wat je nu doet, heb ik ook met die array gedaan. Element voor element afgelopen. Het voordeel met de array is overigens dus wél dat je kan werken met het direct adresseren vanaf regel en kolom 1. Je hoeft dan dus geen terugrekening te doen.
Het absoluut adresseren binnen je selectie is dus iets dat niet kan voor zover je weet? Ik probeer dus volgens mij de selectie als een geheel op zichzelf staand object te zien ipv een onderdeel van de grote sheet met alle adressen.
 
Laatst bewerkt:
Haaaa.... zonder terug rekenen kan déze wél...

Code:
Sub NogEenKeer()

    For x = 1 To Selection.Rows.Count
        For y = 1 To Selection.Columns.Count
'            Debug.Print "Regel: " & Selection.Cells(x, y).Row & " Kolom: " & Selection.Cells(x, y).Column
            With Selection.Cells(x, y)
                If Val(Left(.Value, 1)) <> y Then .Font.Color = vbRed
            End With
        Next y
    Next x
    
End Sub
In mijn originele code doorliep ik de For Each c in Selection.SpecialCells(xlcelltypeconstants) om het aantal leesbewegingen te verminderen. Maar goed, dan kan je dus niet die absolute kolom-adressering achterhalen.
 
De absolute verwijzing staat ook in mijn voorbeeld.
 
Of:

Code:
Sub M_snb()
    y = 1
    x = Selection.Columns.Count
    For Each it In Selection
        Debug.Print "Regel: " & (y - 1) \ x + 1 &; "    kolom: " & (y - 1) Mod x + 1
        y = y + 1
    Next
End Sub

Waarnaar jij op zoek bent heeft niets met Excelrijen of Excelkolommen te maken, maar met een positie in een geselecteerde 'range' (=Array)
 
Laatst bewerkt:
@Edmoor, yup, had ik gezien, maar is dus via een "berekening" verkregen.

@snb, ook weer dank voor jouw bijdrage. Jouw opmerking is een bevestiging van wat ik al dacht. Ofwel, appels met peren vergelijken. :D

Ik heb nu in elk geval voldoende antwoord om m'n gemoedsrust op een aanvaardbaar niveau te krijgen. Ha ha ha...
 
Code rood opgeheven dus :p
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan