Page 43 of 55 FirstFirst ... 33414243444553 ... LastLast
Results 421 to 430 of 541

Thread: Appendix Thread. App Index Rws() Clms() Majic code line Codings for other Threads, Tables etc.)

  1. #421
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    Links relavent to the last 9 posts

    Code:
    ' https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5458446
    ' _  First i wanted to filter column G from workbook 1 to "Filter 2" and transfer only filter 2 data to workbook 2.
    ' _  Then transferring like i wanted to transfer column C (source) to column B (destination) , column D to D, Column L to Column G, etc.
    ' _  I wanted to sum from column P to colum AA and transfer those sum to destination at column H
    ' _ Then copy from column AB to AH and paste in I to O in destination
    
    Sub Transfer_maras_1()

    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15278
    https://excelfox.com/forum/showthrea...ll=1#post15279

    Macro
    https://excelfox.com/forum/showthrea...ll=1#post15277

    Files
    Transfer data_marasAlan_1.xlsm : https://app.box.com/s/p8kf5vo8jesql3n47sd1bzgm57qdpwdv
    Workbook2_1.xlsx : https://app.box.com/s/3d9gmeb2nlyr4gg9q802kk5mjgze8cl5





    _.________________________________________________ _________________________________________________




    Code:
    Sub Transfer_marasAlan_2() '

    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15276
    https://excelfox.com/forum/showthrea...ll=1#post15273


    Macro
    https://excelfox.com/forum/showthrea...ll=1#post15272

    Files
    Transfer data_marasAlan_2.xlsm : https://app.box.com/s/749a78z2ku4m1s1tg3fvgs1z1ud4s325
    Workbook2_2.xlsx : https://app.box.com/s/13yh30a77spsluauck3nif309pic8fuz
















    _.___________________________________________

    Code:
    Sub Transfer_marasAlan_3()  '   https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5460624
    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15269
    https://excelfox.com/forum/showthrea...ll=1#post15270

    Macro
    https://excelfox.com/forum/showthrea...ge42#post15271

    Files
    https://excelfox.com/forum/showthrea...ge42#post15233
    Transfer data_marasAlan_3.xlsm : https://app.box.com/s/p8kf5vo8jesql3n47sd1bzgm57qdpwdv
    Workbook2_3.xlsx : https://app.box.com/s/y3rwvhfk3bo1rp9t7cgbk8yz3krymh23

  2. #422
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result








    15283

  3. #423
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result

  4. #424
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result

  5. #425
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result

  6. #426
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result

  7. #427
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    In support of this post
    https://excelfox.com/forum/showthrea...5230#post15230

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    F
    G
    H
    1
    TEST-1
    2
    Name of the Student : Rizwana
    3
    Reg. No. : 256
    4
    Class X
    Worksheet: Test

    If the value of D3 and D4 of Test Sheet is matches with column C & D of Result sheet then, display a message "You are already submitted the test paper and you have secured (D3 and D4 of Test sheet match with column E of Result Sheet) marks".

    _____ Workbook: Test Paper.xlsb ( Using Excel 2007 32 bit )
    Row\Col
    A
    B
    C
    D
    E
    1
    TEST-1 RESULT ANALYSIS
    2
    Sl. No.
    Name of the Student
    Reg. No.
    Class
    Obtained Marks
    3
    01
    Rukhsar banu
    256
    X
    2
    4
    02
    Abdulkhadar
    123
    X
    3
    5
    03
    Rizwana
    256
    X
    4
    6
    04
    Rizwana
    256
    X
    4
    7
    05
    Rizwana
    256
    X
    4
    Worksheet: Result

  8. #428
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    macro for last two posts

    Code:
    Option Explicit
    Sub Transfer_marasAlan_3()  '   https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5460624
    Dim a(), cls_v() As String, Rws(), aSum(), arrOut__(), JagdDikIt()
    Dim Rng As Range, Rng_v As Range, cel As Range
    Dim Wrbk As Workbook, Rw As Long
    Dim Pth As String
     Let Pth = ThisWorkbook.Path & Application.PathSeparator  '       Const pth = "C:\Users\L026936\Desktop\Excel\"      '<---- use own path
    Const Wnm = "Workbook2_3.xlsx"                             'your workbook name
    '    Application.ScreenUpdating = False
    Rem 1 the main data range from source
        With ThisWorkbook.Sheets("Sheet1")
         Set Rng = .Range("a1:ai" & 36 & "")    '   main data range    hard coded to 36  for testing and  demonstration         .UsedRange.Rows.Count)
         Let a() = Rng.Value                    '   all data values in the source.  This will end up in the tyopical    arrOut()=AppIndex( a(), Rws(),  Clms() )
         Set Rng_v = Rng.Columns(2).SpecialCells(xlCellTypeVisible)  '  this gives us the range we see , (it is likely as a collection of areas) in the ID column
            If Rng_v.Count > 1 Then
       Rem 2 Make the sums column array, aSum() , and while we are looping we will collect the seen row indicies, Rws()
    '       ' ddddddddddddddddddddddd Dictionaray bit ------
            '  Dictionaray    -   The only reason to use this is that its a convenient way to get a unique list thing, or a unique set of things.
            Dim Dik As Object: Set Dik = CreateObject("Scripting.Dictionary")   '      https://excelmacromastery.com/vba-dictionary/
            'Dim d As Scripting.Dictionary: Set d = New Scripting.Dictionary
            Dim aTp() As Variant: ReDim aTp(1 To 3) ' This is a temporary array used to fill the dictionary  Items   it must be dynamic and variant type  - see note +++ below
                For Each cel In Rng_v  '   we effectivelly are going down all the seen rows
                    If cel.Row > 1 And cel.Value <> "" Then
                     Let Rw = cel.Row
                        If Not Dik.exists(a(Rw, 2)) Then ' -Case we don't yet have any dictionaray item with this ID  key
                         Let aTp(1) = Rw                                          '  row number
                         Let aTp(2) = a(Rw, 35)                                   '  grangtotal for this row
                         Let aTp(3) = .Evaluate("=Sum(o" & Rw & ": z" & Rw & ")") ' Our  column Sums
                         Dik.Add Key:=a(Rw, 2), Item:=aTp() '   The key becomes the ID  ,      The Item is a three element array of      the row number     the columns sum for this row    the gradtotal for this row                              shothand way to do this line is  d(a(r, 2)) = atp
                        Else '                           ' -Case we already have a dictionary item with this key
                         Let aTp() = Dik.Item(a(Rw, 2)) ' we are returning an item that is an array, so the recieving array variable must be dynamic.  the returned element type3s are  Variant   +++
                            If a(Rw, 35) > aTp(2) Then  '  If the grand total for this row and  ID  is  greater than a previous, then ....
                                Let aTp(1) = Rw                                        '   we are replacing ..
                                Let aTp(2) = a(Rw, 35)                                 '    .. the item with the relavent  ..
                                Let aTp(3) = .Evaluate("=Sum(o" & Rw & ": z" & Rw & ")") '    .. info from this row
                                Dik(a(Rw, 2)) = aTp()  '  shorthand version for   Dik.Add  Key:=a(Rw, 2), Item:=aTp()
                            End If
                        End If ' end of making or replacing  a dictiuonary item
                    Else
                    End If
                Next
            ' at this point we have a dictionary that has one  Item  for each  ID
            ' in this last  Dik  bit we use the first and third part  of the 3 element items  in  a pseudo   arrOut()=AppIndex( arrUnjaggedJaged(), Rws() , Clms() )    '    https://www.ozgrid.com/forum/index.php?thread/1227920-slicing-a-2d-array/&postID=1239241#post1239241
                If Dik.Count Then
                    'Let JagdDikIt() = Application.Transpose(Dik.items()) '    we can treat an unjagged jagged array  that is a 1 D array of 1 D arrays as if it was a  2 D array  ...   https://eileenslounge.com/viewtopic.php?p=266691#p266691
                    Let JagdDikIt() = Dik.items()
                    'Let Rws() = Application.Index(JagdDikIt(), 1, Evaluate("row(1:" & UBound(JagdDikIt(), 2) & ")"))                                          '   Application.Transpose(Application.Transpose(Application.Index(v, 1, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    Let Rws() = Application.Index(JagdDikIt(), Evaluate("row(1:" & UBound(JagdDikIt()) + 1 & ")"), 1)                                        '   Application.Transpose(Application.Transpose(Application.Index(v, 1, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    'Let aSum() = Application.Index(JagdDikIt(), 3, Evaluate("row(1:" & UBound(JagdDikIt(), 2) & ")"))                         'Application.Transpose(Application.Transpose(Application.Index(v, 3, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    Let aSum() = Application.Index(JagdDikIt(), Evaluate("row(1:" & UBound(JagdDikIt()) + 1 & ")"), 3)                       'Application.Transpose(Application.Transpose(Application.Index(v, 3, Evaluate("row(1:" & UBound(v, 2) & ")"))))
    '       ' ddddddddddddddddddddddddd -----------------------------
                Else
                End If
            Else ' case only a header row to be seen
            End If
        End With
        If Rng_v.Count = 1 Or Dik.Count = 0 Then
            MsgBox "No rows to transfer."
            Exit Sub
        End If
        On Error Resume Next   '   https://eileenslounge.com/viewtopic.php?f=30&t=35861&start=20
         Set Wrbk = Workbooks(Wnm)
            If Wrbk Is Nothing Then
             Workbooks.Open Filename:=Pth & Wnm
            Else
             Workbooks(Wnm).Activate
            End If
        On Error GoTo 0
        With ActiveWorkbook
            With .Sheets("Sheet1")
            Dim vTemp As Variant ' just for demo purposes
             Let vTemp = .UsedRange.Rows(1)
             ' { empty ,  Unique ID  , Gap ,Name  ,  Title ,  Platform  ,  Salary , Gap, Total ,  copy1  , copy2 ,  copy3 ,  copy4  , copy5 ,  copy6 ,  copy7 ,  copy2 ,  copy3 ,  copy4 ,  copy5  , copy6 ,  copy7 ,  Formula7   , Formula8 ,   Formula9  }
             Let vTemp = Rng.Rows(1)
             ' { Number , ID , Name ,   Title ,  Platform ,   Filter  ,  ,  ,   ,    ,Salary ,   ,    ,   ,Add1  ,  Add2 ,   Add3  ,  Add4  ,  Add5 ,   Add6 ,   Add7  ,  Add8 ,   Add9 ,   Add10 ,  Add11 ,  Add12 ,  copy1 ,  copy2 ,  copy3 ,  copy4 ,  copy5  , copy6 ,  copy7  , Total ,  grandtotal  }
             Let vTemp = Application.Match(.UsedRange.Rows(1), Rng.Rows(1), 0) '  This gives a 1 D array and each element has either the position of the header in the destination workbook, or an error if it did not find it
             '  { 2 ,  error  , 3  , 4 ,  5 ,  11  , error  , 34 ,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33 , 28 , error ,error ,error ,error ,error ,error ,error ,error ,error ,   }
             ' So the above line tells us where there is an error in a match with the header names
             Let vTemp = Application.IfError(vTemp, "x") ' Instead of the vbError , a text of  "x"  is put into the array
             '  { 2 ,  x   , 3  , 4 ,  5 ,  11  , x , 34  ,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33 , x ,x ,x ,x ,x ,x ,x ,x ,x ,  }
             Let vTemp = Filter(vTemp, "x", False, 0) ' take out the  "x"s
             '  { 2    , 3  , 4 ,  5 ,  11   , 34,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33  }
             Let cls_v() = Filter(Application.IfError(Application.Match(.UsedRange.Rows(1), Rng.Rows(1), 0), "x"), "x", False, 0)
             '  { 2   , 3  , 4 ,  5 ,  11  ,   27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33  }
                With .Range("B2")  '   .UsedRange.Offset(1)
                 ' .Resize(, 15).ClearContents
                 Let arrOut__() = Application.Index(a(), Rws(), cls_v())
                 .Resize(UBound(Rws()), 1) = arrOut__()
                 Let Rws() = Evaluate("row(1:" & UBound(Rws()) & ")") '  Using the variable  Rws()  for a sequential indicie list  1; 2; 3 ... etc for all rows in the  arrOut__()
                 .Offset(, 2).Cells(1).Resize(UBound(Rws()), 4).Value = Application.Index(arrOut__(), Rws(), Array(2, 3, 4, 5))  '  columns   D - G
                 .Offset(, 7).Cells(1).Resize(UBound(Rws())) = aSum()  '  columm I
                 .Offset(, 8).Cells(1).Resize(UBound(Rws()), 7).Value = Application.Index(arrOut__(), Rws(), Array(6, 7, 8, 9, 10, 11, 12))  ' Column J to P
                End With
            End With
    '        .Save
        End With
    '    Set Rng = Nothing
    '    Set Rng_v = Nothing
    '    Set cel = Nothing
        Set Dik = Nothing
    End Sub

  9. #429
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    Links relavent to the last 9 posts

    Code:
    ' https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5458446
    ' _  First i wanted to filter column G from workbook 1 to "Filter 2" and transfer only filter 2 data to workbook 2.
    ' _  Then transferring like i wanted to transfer column C (source) to column B (destination) , column D to D, Column L to Column G, etc.
    ' _  I wanted to sum from column P to colum AA and transfer those sum to destination at column H
    ' _ Then copy from column AB to AH and paste in I to O in destination
    
    Sub Transfer_maras_1()

    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15278
    https://excelfox.com/forum/showthrea...ll=1#post15279

    Macro
    https://excelfox.com/forum/showthrea...ll=1#post15277

    Files
    Transfer data_marasAlan_1.xlsm : https://app.box.com/s/p8kf5vo8jesql3n47sd1bzgm57qdpwdv
    Workbook2_1.xlsx : https://app.box.com/s/3d9gmeb2nlyr4gg9q802kk5mjgze8cl5





    _.________________________________________________ _________________________________________________




    Code:
    Sub Transfer_marasAlan_2() '

    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15276
    https://excelfox.com/forum/showthrea...ll=1#post15273


    Macro
    https://excelfox.com/forum/showthrea...ll=1#post15272

    Files
    Transfer data_marasAlan_2.xlsm : https://app.box.com/s/749a78z2ku4m1s1tg3fvgs1z1ud4s325
    Workbook2_2.xlsx : https://app.box.com/s/13yh30a77spsluauck3nif309pic8fuz
















    _.___________________________________________

    Code:
    Sub Transfer_marasAlan_3()  '   https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5460624
    Here is a before and after…
    https://excelfox.com/forum/showthrea...ll=1#post15269
    https://excelfox.com/forum/showthrea...ll=1#post15270

    Macro
    https://excelfox.com/forum/showthrea...ge42#post15271

    Files
    https://excelfox.com/forum/showthrea...ge42#post15233
    Transfer data_marasAlan_3.xlsm : https://app.box.com/s/p8kf5vo8jesql3n47sd1bzgm57qdpwdv
    Workbook2_3.xlsx : https://app.box.com/s/y3rwvhfk3bo1rp9t7cgbk8yz3krymh23

  10. #430
    Fuhrer, Vierte Reich DocAElstein's Avatar
    Join Date
    Aug 2014
    Posts
    9,408
    Rep Power
    10
    macro for last two posts

    Code:
    Option Explicit
    Sub Transfer_marasAlan_3()  '   https://www.excelforum.com/excel-programming-vba-macros/1338596-transferring-data.html#post5460624
    Dim a(), cls_v() As String, Rws(), aSum(), arrOut__(), JagdDikIt()
    Dim Rng As Range, Rng_v As Range, cel As Range
    Dim Wrbk As Workbook, Rw As Long
    Dim Pth As String
     Let Pth = ThisWorkbook.Path & Application.PathSeparator  '       Const pth = "C:\Users\L026936\Desktop\Excel\"      '<---- use own path
    Const Wnm = "Workbook2_3.xlsx"                             'your workbook name
    '    Application.ScreenUpdating = False
    Rem 1 the main data range from source
        With ThisWorkbook.Sheets("Sheet1")
         Set Rng = .Range("a1:ai" & 36 & "")    '   main data range    hard coded to 36  for testing and  demonstration         .UsedRange.Rows.Count)
         Let a() = Rng.Value                    '   all data values in the source.  This will end up in the tyopical    arrOut()=AppIndex( a(), Rws(),  Clms() )
         Set Rng_v = Rng.Columns(2).SpecialCells(xlCellTypeVisible)  '  this gives us the range we see , (it is likely as a collection of areas) in the ID column
            If Rng_v.Count > 1 Then
       Rem 2 Make the sums column array, aSum() , and while we are looping we will collect the seen row indicies, Rws()
    '       ' ddddddddddddddddddddddd Dictionaray bit ------
            '  Dictionaray    -   The only reason to use this is that its a convenient way to get a unique list thing, or a unique set of things.
            Dim Dik As Object: Set Dik = CreateObject("Scripting.Dictionary")   '      https://excelmacromastery.com/vba-dictionary/
            'Dim d As Scripting.Dictionary: Set d = New Scripting.Dictionary
            Dim aTp() As Variant: ReDim aTp(1 To 3) ' This is a temporary array used to fill the dictionary  Items   it must be dynamic and variant type  - see note +++ below
                For Each cel In Rng_v  '   we effectivelly are going down all the seen rows
                    If cel.Row > 1 And cel.Value <> "" Then
                     Let Rw = cel.Row
                        If Not Dik.exists(a(Rw, 2)) Then ' -Case we don't yet have any dictionaray item with this ID  key
                         Let aTp(1) = Rw                                          '  row number
                         Let aTp(2) = a(Rw, 35)                                   '  grangtotal for this row
                         Let aTp(3) = .Evaluate("=Sum(o" & Rw & ": z" & Rw & ")") ' Our  column Sums
                         Dik.Add Key:=a(Rw, 2), Item:=aTp() '   The key becomes the ID  ,      The Item is a three element array of      the row number     the columns sum for this row    the gradtotal for this row                              shothand way to do this line is  d(a(r, 2)) = atp
                        Else '                           ' -Case we already have a dictionary item with this key
                         Let aTp() = Dik.Item(a(Rw, 2)) ' we are returning an item that is an array, so the recieving array variable must be dynamic.  the returned element type3s are  Variant   +++
                            If a(Rw, 35) > aTp(2) Then  '  If the grand total for this row and  ID  is  greater than a previous, then ....
                                Let aTp(1) = Rw                                        '   we are replacing ..
                                Let aTp(2) = a(Rw, 35)                                 '    .. the item with the relavent  ..
                                Let aTp(3) = .Evaluate("=Sum(o" & Rw & ": z" & Rw & ")") '    .. info from this row
                                Dik(a(Rw, 2)) = aTp()  '  shorthand version for   Dik.Add  Key:=a(Rw, 2), Item:=aTp()
                            End If
                        End If ' end of making or replacing  a dictiuonary item
                    Else
                    End If
                Next
            ' at this point we have a dictionary that has one  Item  for each  ID
            ' in this last  Dik  bit we use the first and third part  of the 3 element items  in  a pseudo   arrOut()=AppIndex( arrUnjaggedJaged(), Rws() , Clms() )    '    https://www.ozgrid.com/forum/index.php?thread/1227920-slicing-a-2d-array/&postID=1239241#post1239241
                If Dik.Count Then
                    'Let JagdDikIt() = Application.Transpose(Dik.items()) '    we can treat an unjagged jagged array  that is a 1 D array of 1 D arrays as if it was a  2 D array  ...   https://eileenslounge.com/viewtopic.php?p=266691#p266691
                    Let JagdDikIt() = Dik.items()
                    'Let Rws() = Application.Index(JagdDikIt(), 1, Evaluate("row(1:" & UBound(JagdDikIt(), 2) & ")"))                                          '   Application.Transpose(Application.Transpose(Application.Index(v, 1, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    Let Rws() = Application.Index(JagdDikIt(), Evaluate("row(1:" & UBound(JagdDikIt()) + 1 & ")"), 1)                                        '   Application.Transpose(Application.Transpose(Application.Index(v, 1, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    'Let aSum() = Application.Index(JagdDikIt(), 3, Evaluate("row(1:" & UBound(JagdDikIt(), 2) & ")"))                         'Application.Transpose(Application.Transpose(Application.Index(v, 3, Evaluate("row(1:" & UBound(v, 2) & ")"))))
                    Let aSum() = Application.Index(JagdDikIt(), Evaluate("row(1:" & UBound(JagdDikIt()) + 1 & ")"), 3)                       'Application.Transpose(Application.Transpose(Application.Index(v, 3, Evaluate("row(1:" & UBound(v, 2) & ")"))))
    '       ' ddddddddddddddddddddddddd -----------------------------
                Else
                End If
            Else ' case only a header row to be seen
            End If
        End With
        If Rng_v.Count = 1 Or Dik.Count = 0 Then
            MsgBox "No rows to transfer."
            Exit Sub
        End If
        On Error Resume Next   '   https://eileenslounge.com/viewtopic.php?f=30&t=35861&start=20
         Set Wrbk = Workbooks(Wnm)
            If Wrbk Is Nothing Then
             Workbooks.Open Filename:=Pth & Wnm
            Else
             Workbooks(Wnm).Activate
            End If
        On Error GoTo 0
        With ActiveWorkbook
            With .Sheets("Sheet1")
            Dim vTemp As Variant ' just for demo purposes
             Let vTemp = .UsedRange.Rows(1)
             ' { empty ,  Unique ID  , Gap ,Name  ,  Title ,  Platform  ,  Salary , Gap, Total ,  copy1  , copy2 ,  copy3 ,  copy4  , copy5 ,  copy6 ,  copy7 ,  copy2 ,  copy3 ,  copy4 ,  copy5  , copy6 ,  copy7 ,  Formula7   , Formula8 ,   Formula9  }
             Let vTemp = Rng.Rows(1)
             ' { Number , ID , Name ,   Title ,  Platform ,   Filter  ,  ,  ,   ,    ,Salary ,   ,    ,   ,Add1  ,  Add2 ,   Add3  ,  Add4  ,  Add5 ,   Add6 ,   Add7  ,  Add8 ,   Add9 ,   Add10 ,  Add11 ,  Add12 ,  copy1 ,  copy2 ,  copy3 ,  copy4 ,  copy5  , copy6 ,  copy7  , Total ,  grandtotal  }
             Let vTemp = Application.Match(.UsedRange.Rows(1), Rng.Rows(1), 0) '  This gives a 1 D array and each element has either the position of the header in the destination workbook, or an error if it did not find it
             '  { 2 ,  error  , 3  , 4 ,  5 ,  11  , error  , 34 ,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33 , 28 , error ,error ,error ,error ,error ,error ,error ,error ,error ,   }
             ' So the above line tells us where there is an error in a match with the header names
             Let vTemp = Application.IfError(vTemp, "x") ' Instead of the vbError , a text of  "x"  is put into the array
             '  { 2 ,  x   , 3  , 4 ,  5 ,  11  , x , 34  ,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33 , x ,x ,x ,x ,x ,x ,x ,x ,x ,  }
             Let vTemp = Filter(vTemp, "x", False, 0) ' take out the  "x"s
             '  { 2    , 3  , 4 ,  5 ,  11   , 34,  27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33  }
             Let cls_v() = Filter(Application.IfError(Application.Match(.UsedRange.Rows(1), Rng.Rows(1), 0), "x"), "x", False, 0)
             '  { 2   , 3  , 4 ,  5 ,  11  ,   27 ,  28 ,  29  , 30 ,  31 ,  32 ,  33  }
                With .Range("B2")  '   .UsedRange.Offset(1)
                 ' .Resize(, 15).ClearContents
                 Let arrOut__() = Application.Index(a(), Rws(), cls_v())
                 .Resize(UBound(Rws()), 1) = arrOut__()
                 Let Rws() = Evaluate("row(1:" & UBound(Rws()) & ")") '  Using the variable  Rws()  for a sequential indicie list  1; 2; 3 ... etc for all rows in the  arrOut__()
                 .Offset(, 2).Cells(1).Resize(UBound(Rws()), 4).Value = Application.Index(arrOut__(), Rws(), Array(2, 3, 4, 5))  '  columns   D - G
                 .Offset(, 7).Cells(1).Resize(UBound(Rws())) = aSum()  '  columm I
                 .Offset(, 8).Cells(1).Resize(UBound(Rws()), 7).Value = Application.Index(arrOut__(), Rws(), Array(6, 7, 8, 9, 10, 11, 12))  ' Column J to P
                End With
            End With
    '        .Save
        End With
    '    Set Rng = Nothing
    '    Set Rng_v = Nothing
    '    Set cel = Nothing
        Set Dik = Nothing
    End Sub

Similar Threads

  1. Replies: 185
    Last Post: 05-22-2024, 10:02 PM
  2. Replies: 3
    Last Post: 03-07-2022, 05:12 AM
  3. HTML (Again!) arrOut()=Index(arrIn(),Rws(),Clms()
    By DocAElstein in forum Test Area
    Replies: 1
    Last Post: 08-23-2014, 02:27 AM

Posting Permissions

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