Excel Macro's.
Om in Excel met Macro's, hetzij opgenomen via de Macro-recorder, hetzij via eigen ontwerp in de VBE editor, moet de Developer Tab in de Excel-interface zichtbaar zijn. En dit via volgende stappen:
Vervolgens moet het Excel-werkboek als Excel macro-enabled werkboek met de extensie xlsm" worden bewaard.
Om de VBA editor te openen Kies DEVELOPER -> Visual Basic (Alt+ F11).
Macro's worden ondergebracht in een module en zijn van het Sub type.
Case: voeg een nieuwe module toe en hernoem deze tot basMijnMacros. Voeg in de module een procedure toe en noem
deze sMijnMacro1 met de volgende code:
Sub sMijnMacro()
ActiveCell.FormulaR1C1 = 'Mijn naam is haas''
' deze Macro schrijft in de actieve cel van het werkblad 'Mijn naam is haas'.
End Sub
Ga vervolgens naar een Excel werkblad en selecteer een cel. Druk op Macros onder de DEVELOPER tab, hier vindt men sMijnMacro terug, selecteer de Macro en druk op Run om de macro uit te voeren. Opgepast Een uitgevoerde Excel-macro kan niet ongedaan worden.
TopVeiligheid
Wanneer men een werkboek met macro's opent bericht Excel dat de macro's uitgeschakeld zijn. Men moet er zelf voor kiezen om de macro's in te schakelen, dit wanneer men zeker is dat het werkboek niet van verdachte afkomst is. Wil men dit mecanisme voor macro's uitschakelen dan moet men het werkboek bewaren in een map 'Trusted location' . Ga daarbij als volgt tewerk:
Werkboeken die in deze map bewaard worden openen automatisch met actieve macro's
TopWillekeurige datum tussen twee datums.
Deze functie maakt gebruik van een van de vele Worksheet-functies die Excel rijk is.
Public Function fRandomDatum(startDatum As Date, eindDatum As Date) As Date
Dim RandomDatum As Date
RandomDatum = WorksheetFunction.RandBetween(startDatum, eindDatum)
fRandomDatum = Format(RandomDatum, "dd/mm/yyyy")
End Function
Top
Een datum vertalen naar kwartaal.
Public Function fVertaalInKwartaal(datDatum As Date) As String
Dim intMaand As Integer
Dim strkwartaal As String
intMaand = Month(datDatum)
Select Case intMaand
Case Is < 4
strkwartaal = "Kwartaal 1"
Case 4 To 6
strkwartaal = "Kwartaal 2"
Case 7 To 9
strkwartaal = "Kwartaal 3"
Case Is > 9
strkwartaal = "Kwartaal 4"
End Select
fVertaalInKwartaal = strkwartaal
End Function
Top
Willekeurig getal tussen onder- en bovengrens
Public Function fWilgetal(lngmin As Long, lngMax As Long) As Long
Maakt gebruik van Worksheet-function
fWilgetal = WorksheetFunction.RandBetween(lngmin, lngMax)
End Function
Top
Worksheet functie via code in Range invoegen
Om een Worksheet-functie via code in een Range in te voegen gebruikt men volgende syntax
Waar x en y the coordinaten zijn relatief aan de Range waar de Formule moet ingevoerd worden
x is het aantal rijen rechts van de Formule-Range, is x negatief dan links van de Formule-Range
y is de kolom onder de Formule-Range, is y negatief boven.
De volgende code brengt een waarde in respectievelijk de cellen A1 en B1 en de Productfunctie in cel C1
Sub product()
Dim shtTest As Excel.Worksheet
Set shtTest = ThisWorkbook.Worksheets("Sheet4")
shtTest.Range("A1") = 25
shtTest.Range("B1") = 4
shtTest.Range("C1").FormulaR1C1 = "=PRODUCT(RC[-2],RC[-1])"
End Sub
Top
Kolomnummers omzetten naar Letters
In een scenario waar men bijvoorbeeld via de Range.Offset methode verticaal naar cellen met een waarde
zoekt is het vrij eenvoudig het aantal kolommen te tellen maar soms wil men deze omzetten naar de cijferaanduiding in Excel.
Ik heb daartoe hier een functie gevonden die ik aangepast heb voor persoonlijk gebruik.
Public Function KonverteerNrLetter(intKol As Integer) As String
'functie maakt gebruik van VBA Chr() functie Chr(65) = A Chr(90) = Z
Dim intAlfa As Integer
Dim intRest As Integer
intAlfa = Int(intKol / 27) ' geeft 0 tem kolom 26 letter Z
intRest = intKol - (intAlfa * 26)
If intAlfa > 0 Then
KonverteerNrLetter = Chr(intAlfa + 64)
End If
If intRest > 0 Then 'vanaf kolom 27
KonverteerNrLetter = KonverteerNrLetter & Chr(intRest + 64)
End If
End Function
Top
Unieke waarden genereren
Veronderstel een tabel met hoofdingen. In bepaalde kolommen komen de dezelfde data-waarden meerdere malen voor.
Graag wil met
de unieke waarden uitfilteren. Dit kan zowel per kolom of op meerdere kolommen.Kiest men bijvoorbeeld 2 kolommen dan gaan de unieke gegeven per rij
weergeven worden. Men kan dit verwezenlijken via de Data tab van de Ribbon.
Kies Data en vervolgens
| Kies de optie Copy to another location |
| Duidt een range waar moet op gefilterd worden |
| Kies waar de gefilterde data moet geplaatst worden |
| Duidt Unique records aan. |
Hetzelfde resultaat kan ook via volgende code.
Public Sub sUniekeWaarden()
Dim rngTeFilteren
Dim rngGefilterd
Set rngTeFilteren = ThisWorkbook.Worksheets("FilterUniek").Range("A1:B500")
Set rngGefilterd = ThisWorkbook.Worksheets("FilterUniek").Range("D1")
rngTeFilteren.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rngGefilterd, Unique:=True
End Sub
Top
hallo