Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.

?
Lv 7
? asked in Computers & InternetSoftware · 9 years ago

excel problem - converting a long column of data into sections?

I have a set of raw data for solar panel output for a whole month. It contains one column with date/time in 15 minute intervals, and the next with output in kWh.

Like this:

01/02/2012 00:00:00 | 0.009

I need to reformat this so that each day of the month starts in a new column - like this

Time | Day 1| Day 2| Day 3 |

00:00:00 | 0.009 | 0.007 | 0.010 |

00:00:15 | 0.001 | 0.002 | 0.012 |

etc.

Can anyone suggest how I could automate this process, either with a simple spreadsheet, a macro. or vba?

Update:

sorry, copied incorrectly yes its

00:00, ....

00:15, ....

..

23.45, ....

1 Answer

Relevance
  • 9 years ago
    Favorite Answer

    Edit: Sorry for the delay.... here is a way to do as you wish. The following example will create a table in columns M:AR, with the time increments in column M and the daily values for each in columns N:AR. It assumes the raw data is in columns A and B.

    Copy the following event handler to the clipboard (highlight the entire code, right click inside the highlighted area, and 'Copy'.

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _

    Cancel As Boolean)

    Dim i, j, k, n, LastRow, LastRowM

    LastRow = Range("A" & Rows.Count).End(xlUp).Row

    Range("M:AR").ClearContents

    Range("M1").Value = "Time"

    Range("M2:M97").NumberFormat = "h:mm;@"

    Range("M1:AR1").HorizontalAlignment = xlCenter

    For i = 1 To LastRow

    If Application.CountIf(Range("M:M"), TimeValue(Cells(i, "A").Value)) = 0 Then

    ActiveSheet.Range("M" & Rows.Count).End(xlUp).Offset(1).Value = _

    TimeValue(Cells(i, "A").Value)

    End If

    Next

    LastRowM = Range("M" & Rows.Count).End(xlUp).Row

    For i = 2 To LastRowM

    For j = 1 To LastRow

    If TimeValue(Cells(j, "A").Value) = Cells(i, "M").Value Then

    Range("IV" & i).End(xlToLeft).Offset(0, 1).Value = Cells(i - 1, "B").Value

    End If

    Next j

    Next i

    n = 1

    For k = 14 To 44

    Cells(1, k).Value = "Day " & n

    n = n + 1

    Next

    End Sub

    Select the worksheet containing the data and right click the sheet tab at the bottom.

    Select 'View Code'.

    Paste the code into the white editing area to the right (right click inside the area and 'Paste').

    Close the VBE (red button w/white 'x').

    To evaluate the data and create the table, simply double click any cell. If you wish to recreate the table at any time, in the event of new/changed data, simply double click any cell again. A new, clean, table will be created.

    Advise by email if you have difficulty implementing, or you need to relocate the table to a different area of the worksheet.

Still have questions? Get your answers by asking now.