Here is Excel VBA code to clean up your data.
It takes the data from Sheet1, and pastes it to Sheet2 in the cleaned up format. You may need to change the sheet name references.
Code:
Sub MyCopy()
Dim srcWS As Worksheet
Dim destWS As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Dim myRow As Long
Dim myCol As Long
Dim destRow As Long
Application.ScreenUpdating = False
' Set source and destination worksheets
Set srcWS = Sheets("Sheet1")
Set destWS = Sheets("Sheet2")
' Pre-populate headers on destination sheet
destWS.Range("A1") = "ITEMNO"
destWS.Range("B1") = "PRODUCT"
destWS.Range("C1") = "DATE"
destWS.Range("D1") = "PRICE"
destRow = 1
' Find last row/column with data on source sheet
lastRow = srcWS.Cells(Rows.Count, "A").End(xlUp).Row
lastCol = srcWS.Cells(1, Columns.Count).End(xlToLeft).Column
' Loop through all columns starting in column 2
For myCol = 2 To lastCol
' Loop through all rows starting in row 3
For myRow = 3 To lastRow
' Check to see if there is a price, if so copy to destination sheet
If srcWS.Cells(myRow, myCol) > 0 Then
destRow = destRow + 1
destWS.Cells(destRow, "A") = srcWS.Cells(1, myCol)
destWS.Cells(destRow, "B") = srcWS.Cells(2, myCol)
destWS.Cells(destRow, "C") = srcWS.Cells(myRow, "A")
destWS.Cells(destRow, "D") = srcWS.Cells(myRow, myCol)
End If
Next myRow
Next myCol
' Format date column on destination sheet
destWS.Columns("C:C").NumberFormat = "m/d/yyyy"
Application.ScreenUpdating = True
End Sub