+ Reply to Thread
Results 1 to 4 of 4

Macro to combine data based on IF,THENs?

Hybrid View

  1. #1
    Registered User
    Join Date
    08-11-2005
    Posts
    24

    Macro to combine data based on IF,THENs?

    I was going to export my data to FileMaker to try to do this with a series of IF statements and Concatenations, but for efficiency I'd really like to use a VBA macro.

    Current data set, Sheet1:

    A (title)/B (page start)/C (page end)/D (answer key)
    cats/1/2/answers
    dogs/3/3/
    bears/4/6/answers
    frogs/7/7/answers

    I want to combine the contents of an entire row into one cell. Ideally, after running a macro, the above data would like this on Sheet2:

    1 cats, pp. 1-2, answer key
    2 cats, pp. 1-2
    3 dogs, p. 3
    4 bears, pp. 4-6, answer key
    5 bears, pp. 4-6
    6 frogs, p. 7, answer key
    7 frogs, p. 7

    Explanation:
    If a title has an answer key (i.e., if column D is *not* blank), then it gets listed twice, the first listing should have the words "answer key", and the second listing should not (see rows 1 and 2 above).

    If the page range is greater than one page (i.e., if 'page start' does *not* equal 'page end'), then format pages like this: "pp. 3-4";

    but if the page range is only one page (i.e., 'page start' = 'page end'), then format pages this way: "p. 5".

    Can anyone help me with a macro? Thank you!
    Last edited by marlea; 09-13-2005 at 12:11 PM.

  2. #2
    Forum Contributor
    Join Date
    11-16-2004
    Posts
    282
    This macro should work for you:
    Sub createList()
    ' Declare variables...
    Dim pgStart, pgEnd, newRow, counter As Integer
    Dim myTitle, ansKey, pgRng, newString, string2 As String
    
    ' Select Sheet1 first cell w/data (A2)...
    ThisWorkbook.Sheets(1).Activate
    ActiveSheet.Range("A2").Select
    ' Initialize counter
    counter = 0
    ' Loop through all rows of data and populate Sheet2...
    Do Until IsEmpty(ActiveCell)
        ' Count data rows to process
        counter = counter + 1
        ' Get title...
        myTitle = ActiveCell.Value
        ' Get page start...
        pgStart = ActiveCell.Offset(0, 1).Value
        ' Get page end...
        pgEnd = ActiveCell.Offset(0, 2).Value
        ' Get answer key...
        ansKey = ActiveCell.Offset(0, 3).Value
        ' Determine page range and format accordingly...
        If pgEnd > pgStart Then
            pgRng = "pp. " & pgStart & "-" & pgEnd
        Else
            pgRng = "p. " & pgStart
        End If
    ' Concatenate data and populate Sheet2...
        newString = myTitle & ", " & pgRng & ", " & ansKey
        'Determine first empty row in Sheet2 to populate
        If counter = 1 Then
            newRow = ThisWorkbook.Sheets(2).UsedRange.Rows.Count
        Else
            newRow = ThisWorkbook.Sheets(2).UsedRange.Rows.Count + 1
        End If
        ' Populate Sheet2 accordingly (2 records if answer key present)...
        If ansKey <> "" Then
            newString = myTitle & ", " & pgRng & ", " & "answer key"
            string2 = myTitle & ", " & pgRng
            ThisWorkbook.Sheets(2).Cells(newRow, 1).Value = newString
            ThisWorkbook.Sheets(2).Cells(newRow + 1, 1).Value = string2
        Else
            ThisWorkbook.Sheets(2).Cells(newRow, 1).Value = newString
        End If
        ' Go to next row of data...
        ActiveCell.Offset(1, 0).Select
    Loop
    ' Switch to Sheet 2 to show results...
    ThisWorkbook.Sheets(2).Activate
    ActiveSheet.Range("A1").Select
    End Sub
    Hope this helps,
    theDude

  3. #3
    Registered User
    Join Date
    08-11-2005
    Posts
    24
    theDude-

    Thank you so much!! This is fantastic! You've saved me a lot of work in FileMaker. And thanks for including all the comments--they're a great learning tool.

    One little thing I noticed after running the macro is that rows with nothing in the "Answer Key" column get returned with an ending comma; e.g.:

    apples, p. 1,

    If I study the code for a while (long while), I think I should be able to remedy that...but in the meantime, if you're able to help (once again), that'd be great.

    Thanks again!



    Quote Originally Posted by theDude
    This macro should work for you:

    Hope this helps,
    theDude

  4. #4
    Registered User
    Join Date
    08-11-2005
    Posts
    24
    Yay, I think my change works:

    ' Concatenate data and populate Sheet2...
    If ansKey = "" Then
    newString = myTitle & ", " & pgRng
    Else
    newString = myTitle & ", " & pgRng & ", " & ansKey
    End If

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1