Data define and search function request?

J

joecrabtree

All,

I have posted this already, but still have had no joy... and takers??

Thanks....

I have a workbook with three (3) worksheets in it. The first one is
called 'codes' the second one is called 'data', and the third one is
called 'output'.

In 'codes' there is a list of codes that appear in the data set for
example:

CODES:
ABC
BGD
JDJ
KDK
DID

In the sheet 'data' the data is in the following format:

DATE CODE QUANTITY VALUE
01/01/09 ABC 10 1000
01/01/09 ABC 1 100
01/01/09 KDK 4 44
02/01/09 JDJ 2 13
02/01/09 JDJ 33 22

What I would like to be able to do is as follows:

1) The user is asked to input a date range for example
01/01/09-01/01/09
2) The program then searchs the data for everything in that date range
in the 'data' sheet that corresponds to the codes defined in the
'codes' sheet and returns the summed values. For example when the user
enters in 01/01/09-01/01/09 the value returned would be:

CODE QUANTITY VALUE
ABC 11 1100

3) This data would be displayed in the 'output' worksheet.
4) If the User entered the date range 01/01/09-02/01/09 then the
following values would be returned:

DATE CODE QUANTITY VALUE
01/01/09 ABC 11 1100
01/01/09 KDK 4 44
02/01/09 JDJ 35 35

If anyone could help it would be much appreciated,

Regards

Joseph Crabtree
 
J

JP

Did you try Pivot Tables? You can aggregate your data by days/weeks/
months and look at sums, counts, averages, etc.

HTH
--JP
 
J

Joel

Sub GetOutput()

Do
StartDate = InputBox("Enter Start Date : ")
Loop While Not IsDate(StartDate)
StartDate = DateValue(StartDate)

Do
EndDate = InputBox("Enter End Date : ")
Loop While Not IsDate(EndDate)
EndDate = DateValue(EndDate)

If StartDate > EndDate Then
MsgBox ("Exiting Macro - End Date is before Start Date")
Exit Sub
End If

With Sheets("Output")
If .Range("A1") = "" Then
.Range("A1") = Date
.Range("B1") = Code
.Range("C1") = Quantity
.Range("D1") = Value
OutputRow = 2
Else
LastRow = .Range("A" & Rows.Count).End(xlUp).Row
OutputRow = LastRow + 1
End If
End With


With Sheets("Codes")
CodeRow = 1
Do While .Range("A" & CodeRow) <> ""
Code = .Range("A" & CodeRow)

With Sheets("Data")
Set c = .Columns("B").Find(what:=Code, _
LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
FirstAddr = c.Address
Do
Date = c.Offset(0, -1)
If Date >= StartDate And Date <= EndDate Then
.Range("A" & c.Row & ":D" & c.Row).Copy _
Destination:=Sheets("Output").Range("A" & OutputRow)
OutputRow = OutputRow + 1
End If
Set c = .Columns("B").FindNext(after:=c)
Loop While Not c Is Nothing And c.Address <> FirstAddr
End If

End With
CodeRow = CodeRow + 1
Loop
End With
End Sub
 
J

joecrabtree

Sorry I don't understand adodb - is there an easy way to get this
work?

Thanks

Joe Crabtree
 
J

joecrabtree

Sub GetOutput()

Do
   StartDate = InputBox("Enter Start Date : ")
Loop While Not IsDate(StartDate)
StartDate = DateValue(StartDate)

Do
   EndDate = InputBox("Enter End Date : ")
Loop While Not IsDate(EndDate)
EndDate = DateValue(EndDate)

If StartDate > EndDate Then
   MsgBox ("Exiting Macro - End Date is before Start Date")
   Exit Sub
End If

With Sheets("Output")
   If .Range("A1") = "" Then
      .Range("A1") = Date
      .Range("B1") = Code
      .Range("C1") = Quantity
      .Range("D1") = Value
      OutputRow = 2
   Else
      LastRow = .Range("A" & Rows.Count).End(xlUp).Row
      OutputRow = LastRow + 1
   End If
End With

With Sheets("Codes")
   CodeRow = 1
   Do While .Range("A" & CodeRow) <> ""
      Code = .Range("A" & CodeRow)

      With Sheets("Data")
         Set c = .Columns("B").Find(what:=Code, _
            LookIn:=xlValues, lookat:=xlWhole)
         If Not c Is Nothing Then
            FirstAddr = c.Address
            Do
               Date = c.Offset(0, -1)
               If Date >= StartDate And Date <= EndDate Then
                  .Range("A" & c.Row & ":D" & c.Row).Copy _
                    Destination:=Sheets("Output").Range("A" & OutputRow)
                  OutputRow = OutputRow + 1
               End If
               Set c = .Columns("B").FindNext(after:=c)
            Loop While Not c Is Nothing And c.Address <> FirstAddr
         End If

      End With
      CodeRow = CodeRow + 1
   Loop
End With
End Sub

This works great thanks. However I was looking to sum the ouput sheet.
For example:

DATE CODE QUANTITY VALUE
01/01/09 ABC 11 1100
01/01/09 KDK 4 44
02/01/09 JDJ 35 35

would be the output of:

DATE CODE QUANTITY VALUE
01/01/09 ABC 10 1000
01/01/09 ABC 1 100
01/01/09 KDK 4 44
02/01/09 JDJ 2 13
02/01/09 JDJ 33 22

with a date range of.
01/01/09-02/01/09

Any ideas on how i can make this work? At the moment it just 'extracts
and copies' the data.

Thanks allot for your help in advance.

Regards

Joseph Crabtree
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top