+ Reply to Thread
Results 1 to 5 of 5

LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER

Hybrid View

  1. #1
    sam.fares@cmcsg.com
    Guest

    LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER


    Hello:

    In my spreadsheet I have many members that i am designing. each member
    has a name that starts with a "J". For example J1, J2, J3....... i
    might do several checks on each member, therfore the marks will be
    placed in one of the sheets named "QDSsheet" starting in cell "A3" as
    follows:
    I wont know how many checks per mark. meaning i might have 4 J1's 0R
    100 J1's, and the same goes for other marks. right now my code is set
    up ok using "FOR... NEXT" provided the marks are in numeric
    sequential order( J1....., J2.....,J3,.....,J4,.....,it will recognize
    how many J1 is there or how many J2 is there so it loops by increment
    of one. I would like you to tell me how to write the code so that it
    loops through all the marks regardless of the order and what the number
    or string after the J as shown below. Thanks!

    Marks
    J1
    J1
    J1
    J1
    J10
    J10
    J11
    J12
    J12A
    J18
    J18
    J18
    J17A
    J17A
    J17A
    J17B
    J15C


  2. #2
    Tom Ogilvy
    Guest

    RE: LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER

    written assuming the J's are in column 1.

    Sub LoopJs()
    Dim jlist As New Collection
    Dim rng As Range, cnt As Long
    Dim sAddr As String, s As String
    Dim itm As Variant
    Set rng = Columns(1).Find(What:="J*", _
    After:=Range("A65536").End(xlUp)(2), _
    LookIn:=xlFormulas, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchCase:=False)
    If Not rng Is Nothing Then
    sAddr = rng.Address
    Do
    On Error Resume Next
    jlist.Add rng.Value, rng.Text
    On Error GoTo 0
    Set rng = Columns(1).FindNext(rng)
    Loop While rng.Address <> sAddr
    s = ""
    For Each itm In jlist
    cnt = Application.CountIf(Columns(1), itm)
    s = s & itm & ": " & cnt & vbNewLine
    Next
    MsgBox s
    Else
    MsgBox "No J's found"
    End If
    End Sub

    Modify to fit your layout and achieve your required results.

    --
    Regards,
    Tom Ogilvy


    "sam.fares@cmcsg.com" wrote:

    >
    > Hello:
    >
    > In my spreadsheet I have many members that i am designing. each member
    > has a name that starts with a "J". For example J1, J2, J3....... i
    > might do several checks on each member, therfore the marks will be
    > placed in one of the sheets named "QDSsheet" starting in cell "A3" as
    > follows:
    > I wont know how many checks per mark. meaning i might have 4 J1's 0R
    > 100 J1's, and the same goes for other marks. right now my code is set
    > up ok using "FOR... NEXT" provided the marks are in numeric
    > sequential order( J1....., J2.....,J3,.....,J4,.....,it will recognize
    > how many J1 is there or how many J2 is there so it loops by increment
    > of one. I would like you to tell me how to write the code so that it
    > loops through all the marks regardless of the order and what the number
    > or string after the J as shown below. Thanks!
    >
    > Marks
    > J1
    > J1
    > J1
    > J1
    > J10
    > J10
    > J11
    > J12
    > J12A
    > J18
    > J18
    > J18
    > J17A
    > J17A
    > J17A
    > J17B
    > J15C
    >
    >


  3. #3
    sam.fares@cmcsg.com
    Guest

    Re: LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER

    Thanks Tom for your quick reponse, I will try it and let you know.


  4. #4
    sam.fares@cmcsg.com
    Guest

    Re: LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER

    hello Tom Ogilvy or any one that could help me fix the procedure:

    Attached is my code. as you can see i am determining the number of J
    marks in coulmn which they all start at cell A3 in sheetQDS. the number
    of marks =Nu, as you can see i am looping from 1 to Nu. but the problem
    with this code, it works fine if all my marks are J1....J2....J3 so
    that there is no gaps in the numbering system and the number after the
    J is an integer. it does not work if i have J1A, OR J5C. how could i
    fix it to do that regrdless whether there is a gap or not or wheteher
    it is a J1 OR J1S? Thanks for any assitance!

    'get the number of marks
    lastrow = shtQDS.Range("A3").End(xlDown).Row
    Set rng = shtQDS.Range("A3:A" & lastrow)
    v = rng
    On Error Resume Next
    For M = LBound(v) To UBound(v)
    nodupes.Add v(M, 1), CStr(v(M, 1))
    Next
    On Error GoTo 0
    numUnique = nodupes.Count
    If shtWOOD.Cells(1, 2).Value = "ALL" Then
    'Nu = shtQDS.Range("BC1").Value
    Nu = numUnique
    End If
    For Z = 1 To Nu Step 1
    strMark = "J" & Z
    Application.ScreenUpdating = False
    'Error check
    'If strMark = "" Then
    ' MsgBox "No mark chosen. Analysis cancelled."
    'GoTo CancelAnalysis
    'End If

    'Clear old data
    shtEM.Range("B2:B9").clearcontents
    shtEM.Range("B10:C13").clearcontents
    shtPA.Range("B33:AO44").clearcontents
    shtPA.Range("B66:AO75").clearcontents
    'shtSummary.Range("A3:H1000").clearcontents
    shtResults.Range("A3:AR65536").clearcontents
    shtNPCJ.Range("B10:C13").clearcontents
    intResultRow = 3

    'Set initial values
    i = 3
    intLines = 0
    intLoadCase = 1
    boolCancel = False

    Application.ScreenUpdating = False
    Worksheets.Add after:=Worksheets(Worksheets.Count)
    NewSheet = ActiveSheet.Name
    With Worksheets(NewSheet)
    .Move after:=Worksheets(Worksheets.Count)
    .Name = strMark
    .Activate
    Columns("A:A").ColumnWidth = 51.14
    Columns("B:AR").Select
    Selection.ColumnWidth = 13
    ActiveWindow.Zoom = 75
    End With

    'Find out how many load cases we're dealing with
    Mark:
    Do
    If shtQDS.Cells(i, 1).Value = strMark Then
    If shtQDS.Cells(i, 4).Value > intLoadCases Then intLoadCases =
    shtQDS.Cells(i, 4).Value
    End If
    i = i + 1
    Loop Until IsEmpty(shtQDS.Cells(i, 1))

    i = 3

    FindNext:

    'Find valid row
    Do
    If shtQDS.Cells(i, 1).Value = strMark And shtQDS.Cells(i, 4).Value
    = intLoadCase Then
    GoTo GetValues
    Else
    i = i + 1
    End If

    Loop Until IsEmpty(shtQDS.Cells(i, 1))

    'After no more valid rows for that load case, run optimization routine
    Optimize

    'Determine if any more load cases exist
    If intLoadCase < intLoadCases Then
    intLoadCase = intLoadCase + 1
    i = 3
    GoTo FindNext
    End If

    For R = 2 + Z To Nu + 3 Step 1
    Sheets("Summary").Cells(R, 1).Value = strMark
    Sheets("Summary").Cells(R, 2).Value = intQty
    Sheets("Summary").Cells(R, 3).Value = dblLength
    Sheets("Summary").Cells(R, 4).Value = intETCA
    Sheets("Summary").Cells(R, 5).Value = intEBCA
    Sheets("Summary").Cells(R, 6).Value =
    Sheets(strMark).Range("D2").Value
    Sheets("Summary").Cells(R, 7).Value =
    Sheets(strMark).Range("E2").Value


    Exit For

    Next
    Next


  5. #5
    Tom Ogilvy
    Guest

    Re: LOOPING BUT THE MARKS ARE NOT IN SEQUENTIAL ORDER

    The J Values are stored in Nodupes, so instead of building the J value by
    doing

    "J" & Z

    just use the value in the collection

    Instead of

    > For Z = 1 To Nu Step 1
    > strMark = "J" & Z



    Dim itm as Variant

    i = 0
    for each itm in Nodupes
    i = i + 1 ' in case you need to use i in your loop
    strMark = itm


    ' code to process

    Next itm


    --
    Regards,
    Tom Ogilvy
    <sam.fares@cmcsg.com> wrote in message
    news:1146152823.706538.238130@i40g2000cwc.googlegroups.com...
    > hello Tom Ogilvy or any one that could help me fix the procedure:
    >
    > Attached is my code. as you can see i am determining the number of J
    > marks in coulmn which they all start at cell A3 in sheetQDS. the number
    > of marks =Nu, as you can see i am looping from 1 to Nu. but the problem
    > with this code, it works fine if all my marks are J1....J2....J3 so
    > that there is no gaps in the numbering system and the number after the
    > J is an integer. it does not work if i have J1A, OR J5C. how could i
    > fix it to do that regrdless whether there is a gap or not or wheteher
    > it is a J1 OR J1S? Thanks for any assitance!
    >
    > 'get the number of marks
    > lastrow = shtQDS.Range("A3").End(xlDown).Row
    > Set rng = shtQDS.Range("A3:A" & lastrow)
    > v = rng
    > On Error Resume Next
    > For M = LBound(v) To UBound(v)
    > nodupes.Add v(M, 1), CStr(v(M, 1))
    > Next
    > On Error GoTo 0
    > numUnique = nodupes.Count
    > If shtWOOD.Cells(1, 2).Value = "ALL" Then
    > 'Nu = shtQDS.Range("BC1").Value
    > Nu = numUnique
    > End If
    > For Z = 1 To Nu Step 1
    > strMark = "J" & Z
    > Application.ScreenUpdating = False
    > 'Error check
    > 'If strMark = "" Then
    > ' MsgBox "No mark chosen. Analysis cancelled."
    > 'GoTo CancelAnalysis
    > 'End If
    >
    > 'Clear old data
    > shtEM.Range("B2:B9").clearcontents
    > shtEM.Range("B10:C13").clearcontents
    > shtPA.Range("B33:AO44").clearcontents
    > shtPA.Range("B66:AO75").clearcontents
    > 'shtSummary.Range("A3:H1000").clearcontents
    > shtResults.Range("A3:AR65536").clearcontents
    > shtNPCJ.Range("B10:C13").clearcontents
    > intResultRow = 3
    >
    > 'Set initial values
    > i = 3
    > intLines = 0
    > intLoadCase = 1
    > boolCancel = False
    >
    > Application.ScreenUpdating = False
    > Worksheets.Add after:=Worksheets(Worksheets.Count)
    > NewSheet = ActiveSheet.Name
    > With Worksheets(NewSheet)
    > .Move after:=Worksheets(Worksheets.Count)
    > .Name = strMark
    > .Activate
    > Columns("A:A").ColumnWidth = 51.14
    > Columns("B:AR").Select
    > Selection.ColumnWidth = 13
    > ActiveWindow.Zoom = 75
    > End With
    >
    > 'Find out how many load cases we're dealing with
    > Mark:
    > Do
    > If shtQDS.Cells(i, 1).Value = strMark Then
    > If shtQDS.Cells(i, 4).Value > intLoadCases Then intLoadCases =
    > shtQDS.Cells(i, 4).Value
    > End If
    > i = i + 1
    > Loop Until IsEmpty(shtQDS.Cells(i, 1))
    >
    > i = 3
    >
    > FindNext:
    >
    > 'Find valid row
    > Do
    > If shtQDS.Cells(i, 1).Value = strMark And shtQDS.Cells(i, 4).Value
    > = intLoadCase Then
    > GoTo GetValues
    > Else
    > i = i + 1
    > End If
    >
    > Loop Until IsEmpty(shtQDS.Cells(i, 1))
    >
    > 'After no more valid rows for that load case, run optimization routine
    > Optimize
    >
    > 'Determine if any more load cases exist
    > If intLoadCase < intLoadCases Then
    > intLoadCase = intLoadCase + 1
    > i = 3
    > GoTo FindNext
    > End If
    >
    > For R = 2 + Z To Nu + 3 Step 1
    > Sheets("Summary").Cells(R, 1).Value = strMark
    > Sheets("Summary").Cells(R, 2).Value = intQty
    > Sheets("Summary").Cells(R, 3).Value = dblLength
    > Sheets("Summary").Cells(R, 4).Value = intETCA
    > Sheets("Summary").Cells(R, 5).Value = intEBCA
    > Sheets("Summary").Cells(R, 6).Value =
    > Sheets(strMark).Range("D2").Value
    > Sheets("Summary").Cells(R, 7).Value =
    > Sheets(strMark).Range("E2").Value
    >
    >
    > Exit For
    >
    > Next
    > Next
    >




+ 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