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

lege rijen invoegen en interpoleren

Status
Niet open voor verdere reacties.

juniper

Gebruiker
Lid geworden
21 nov 2006
Berichten
18
hallo

in het bijgevoegde bestand zit een gegevensreeks met metingen om het kwartier. Als je goed kijkt ontbreken vanaf de 21ste van elke maand tot het einde waarnemingen tussen 23u en 0u15. Ik zou graag geïnterpoleerde waarden (gebaseerd op die van 23u en 0u15) toevoegen voor 23u15, 23u30, 23u45 en 00u.

Hoe pak ik dit best aan?

Merci!
 

Bijlagen

Juniper

doe dit (in volgorde):

1. maak de getallen in kolom B op als getallen (vervang punt door komma, scheidingsteken voor duizendtallen eventueel wegdoen, enz.)

2. voer deze macro uit:

Code:
Sub col()
Dim c As Range, i As Integer
For Each c In Range("A2", Range("A2").End(xlDown))
    If Hour(c) = 23 And Minute(c) = 0 And Hour(c.Offset(1)) = 0 And Minute(c.Offset(1)) = 15 Then
        c.Offset(1).Resize(4).EntireRow.Insert shift:=xlDown
        For i = 1 To 4
            c.Offset(i) = c + i * TimeValue("00:15:00")
            c.Offset(i, 1) = c.Offset(, 1) + i * (c.Offset(5, 1) - c.Offset(, 1)) / 5
        Next
    End If
Next
End Sub

Werkt het?

Wigi
 
ik krijg een foutmelding die zegt dat de macro niet wordt teruggevonden. De foutopsporing zegt dat het in het volgende zinnetje zit:

Application.Run "voorbeeld.xls!interpolatie"

iets met naamgeving misschien? ik heb een macro aangemaakt en die col() genoemd. kan het zijn dat de die interpolatie in iets anders moet veranderd worden?
 
ik krijg een foutmelding die zegt dat de macro niet wordt teruggevonden. De foutopsporing zegt dat het in het volgende zinnetje zit:

Application.Run "voorbeeld.xls!interpolatie"

iets met naamgeving misschien? ik heb een macro aangemaakt en die col() genoemd. kan het zijn dat de die interpolatie in iets anders moet veranderd worden?

Je moet gewoon het bestandje openen, en dan mijn code plakken in een nieuwe module (of bestaande module). Doe in VBA Insert > Module en plak de code en run de macro "col" via F5.

Wigi
 
het werkt!! alleszins toch op het voorbeeld bestand. Voor het echte, dat wat langer is, krijg ik een foutmelding dat de typen niet met elkaar overeenkomen, en de fout zit in dit regeltje:

c.Offset(i) = c + i * TimeValue("00:15:00")

Ik heb de celeigenschappen al het zelfde gemaakt als in het voorbeeld bestand, heb je soms nog ergens iets veranderd?
 
vlak na rij 82. Hier zijn al 3 lege rijen ingevoegd, maar de waarden ervoor worden niet berekend. De celeigenschappen van die lege rijen zijn wel dezelfde als van deze met de data.
 
vlak na rij 82. Hier zijn al 3 lege rijen ingevoegd, maar de waarden ervoor worden niet berekend. De celeigenschappen van die lege rijen zijn wel dezelfde als van deze met de data.

Hang het goede bestand dan eens hier bij, met ongeveer de eerste 100 rijen.

Dan kan ik zelf nagaan wat er scheelt.

Wigi
 
Mijn macro werkt als de tijden in je kolom A normaal zijn, hier is het eigenlijk tekst. Kopieer je ze van ergens anders of zo?

Ik zal proberen er iets op te vinden.

Wigi
 
Dit

Code:
Sub col()
Dim c As Range, i As Integer, rngToDo As Range
Application.ScreenUpdating = False
Set rngToDo = Range("A2", Range("A2").End(xlDown))
Set rngToDo = rngToDo.Resize(rngToDo.Count - 1)

For Each c In rngToDo
    c = DateValue(c) + TimeValue(c)
    If TimeValue(c) = "23:00:00" And TimeValue(c.Offset(1)) = "0:15:00" Then
        c.Offset(1).Resize(4).EntireRow.Insert shift:=xlDown
        For i = 1 To 4
            c.Offset(i) = c + i * TimeValue("00:15:00")
            c.Offset(i, 1) = c.Offset(, 1) + i * (c.Offset(5, 1) - c.Offset(, 1)) / 5
        Next
    End If
Next
With Range("A2").End(xlDown)
    .Value = DateValue(.Value) + TimeValue(.Value)
End With
Application.ScreenUpdating = True
End Sub

doet het volgens mij wel.

Wigi
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan