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

Data anders structuren met VBA

Status
Niet open voor verdere reacties.

mattie92

Gebruiker
Lid geworden
19 mrt 2017
Berichten
25
Hallo allemaal,

Ik ben opzoek naar een macro die hetvolgende kan:
Er is op het werk, lang geleden door iemand een tool ontwikkeld in Excel. Deze tool wordt in een productieomgeving dagelijks ingevoerd om storingen te regisitreren.

Deze worden per shift weggeschreven in het tabblad storingen.
Deze gegevens willen we straks gaan uitlezen in powerbi, en daarvoor is het het makkelijkst als de data net zo wordt ingevuld als staat beschreven onder het tabblad storingsanalyse.

Kan iemand me aan een macro helpen die dit kan?
De opzet van het blad storingen is altijd hetzelfde wordt alleen langer maar er veranderd niks aan de opzet.

Alvast bedankt!
 

Bijlagen

  • Voorbeeld helpmij.xlsx
    16,5 KB · Weergaven: 26
@cow18

Iets teveel storingen ?

Code:
Sub M_snb()
  sn = Sheet1.UsedRange
  
  With CreateObject("scripting.dictionary")
    For Each it In Sheet1.UsedRange.Offset(, 3).SpecialCells(2, 1)
        If IsNumeric(it.Offset(, 1)) Then .Item(.Count) = Array(CLng(sn(it.Row, 3)), sn(it.Row, 2), sn(it.Row, 4), sn(it.Row, it.Column - 1), it, sn(it.Row, it.Column + 1), Application.WeekNum(sn(it.Row, 3),21))
    Next
    
    Blad1.Cells(40, 1).Resize(.Count, 7) = Application.Index(.items, 0, 0)
  End With
End Sub
 
Laatst bewerkt:
Dan lossen we dat toch eenvoudig op ?

Code:
Sub M_snb()
  sn = Sheet1.UsedRange
  
  With CreateObject("scripting.dictionary")
    For Each it In Sheet1.UsedRange.Offset(, 3).SpecialCells(2, 1)
        If Val(sn(it.Row, it.Column + 1)) > 0 Then .Item(.Count) = Array(CLng(sn(it.Row, 3)), sn(it.Row, 2), sn(it.Row, 4), sn(it.Row, it.Column - 1), it, sn(it.Row, it.Column + 1), Application.WeekNum(sn(it.Row, 3), 21))
    Next
    
    Blad1.Cells(40, 1).Resize(.Count, 7) = Application.Index(.items, 0, 0)
  End With
End Sub
of

Code:
Sub M_snb()
  sn = Sheet1.UsedRange
  
  With CreateObject("scripting.dictionary")
    For Each it In Sheet1.UsedRange.Offset(, 3).SpecialCells(2, 1).Areas
        For Each it1 In it.Columns(1).Cells
           .Item(.Count) = Array(CLng(sn(it1.Row, 3)), sn(it1.Row, 2), sn(it1.Row, 4), sn(it1.Row, it1.Column - 1), it1, sn(it1.Row, it1.Column + 1), Application.WeekNum(sn(it1.Row, 3), 21))
        Next
    Next
    
    Blad1.Cells(40, 1).Resize(.Count, 7) = Application.Index(.items, 0, 0)
  End With
End Sub


NB. Het ISOweeknummer in VBA, zonder gebruik te maken van Excelfunkties is:

Code:
ISOweeknummer=Datepart("ww",Datum-weekday(datum,2)+4,2,2)

Voor de uitleg zie: http://www.snb-vba.eu/VBA_ISO_weeknummer.html
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan