+ Reply to Thread
Results 1 to 12 of 12

display unique list in dropdown in each subsequent cell

Hybrid View

  1. #1
    Forum Contributor
    Join Date
    03-11-2011
    Location
    Nepal
    MS-Off Ver
    MS Excel 2024
    Posts
    1,384

    display unique list in dropdown in each subsequent cell

    Hi,

    I am looking to get a list of unique data without any duplicates to be displayed in dropdown in G column and in gets update with new data in subsequent cells as well in previous cells.But the data so displayed in G column should be unique to F column.For eg.

    if I type in F12 = Ram Kapoor,then it will search all the Ram Kapoor corresponding list of data in G column and display in dropdown without any duplicates in G12.
    But if in F12,if the data is new type and does not exist then it will allow one to do entry in G column that will be updated in next cells and previous G column cells.

    Hope I could be able to make it understand.

    Code is included from http://www.excelforum.com/showthread.php?t=1148579

    Hope modification in it will ease.
    Attached Files Attached Files

  2. #2
    Forum Expert
    Join Date
    08-16-2015
    Location
    Antwerpen, Belgium
    MS-Off Ver
    2007-2016
    Posts
    2,380

    Re: display unique list in dropdown in each subsequent cell

    With helper sheet called unique, you can hide
    With dynamic named range on this sheet

    and this code

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 6 And Target.Count = 1 Then
        If Target <> vbNullString Then
            If Application.CountIf(Sheets("unique").Range("A:A"), Target) = 0 Then
                Sheets("unique").Range("A" & Rows.Count).End(xlUp).Offset(1) = Target.Value
            End If
        End If
    End If
    End Sub
    Kind regards
    Leo
    Attached Files Attached Files

  3. #3
    Forum Contributor
    Join Date
    03-11-2011
    Location
    Nepal
    MS-Off Ver
    MS Excel 2024
    Posts
    1,384

    Re: display unique list in dropdown in each subsequent cell

    Thanx for the kind reply.

    But this is not what is expected.

    Let me explain more in detail -

    Condition 1
    If I type data in F12,as "Ram Kapoor",the corresponding lists available from G4:G11 column to "Ram Kapoor" of F column are-

    Complan
    Horlicks
    Horlicks

    So,in G12 it must display unique value excluding duplicates in dropdown as

    Complan
    Horlicks (1 duplicate removed)

    This must gets updated automatically.

    Condition 2
    Also,if a user don't want to select either of these options then it will allow to type a new data in G12 and gets updated in next list.

    Condition 3
    If a data is completely new in F12 (as no data exists from F4:F12),then it will allow an user to type a new data in G12 and gets updated for dropdown in the next list.

    Condition 4
    If any of the G column data is modified then it must make changes in dropdown in next time displaying the list.

    Hope this would clarify further.
    Last edited by paradise2sr; 12-30-2016 at 12:05 AM.

  4. #4
    Forum Expert
    Join Date
    08-16-2015
    Location
    Antwerpen, Belgium
    MS-Off Ver
    2007-2016
    Posts
    2,380

    Re: display unique list in dropdown in each subsequent cell

    also little cange on dynamic named range
    Attached Files Attached Files

  5. #5
    Forum Expert
    Join Date
    08-16-2015
    Location
    Antwerpen, Belgium
    MS-Off Ver
    2007-2016
    Posts
    2,380

    Re: display unique list in dropdown in each subsequent cell

    Maybe

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 6 And Target.Count = 1 Then
        If Target <> vbNullString Then
            If Application.CountIf(Sheets("unique").Range("A:A"), Target) = 0 Then
                Sheets("unique").Range("A" & Rows.Count).End(xlUp).Offset(1) = Target.Value
            End If
            With Target.Offset(, 1).Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=unique"
            End With
        End If
    End If
    If Target.Column = 7 And Target.Count = 1 Then
        If Target <> vbNullString Then
            If Application.CountIf(Sheets("unique").Range("A:A"), Target) = 0 Then
                Sheets("unique").Range("A" & Rows.Count).End(xlUp).Offset(1) = Target.Value
            End If
        End If
    End If
    End Sub
    Kind regards
    Leo

  6. #6
    Forum Contributor
    Join Date
    03-11-2011
    Location
    Nepal
    MS-Off Ver
    MS Excel 2024
    Posts
    1,384

    Re: display unique list in dropdown in each subsequent cell

    No,you have misunderstood what I mean to say.Kindly refer post 1 attachment once again & post 3 detail explanation.
    Last edited by paradise2sr; 12-30-2016 at 07:32 AM.

  7. #7
    Forum Expert
    Join Date
    01-23-2013
    Location
    USA
    MS-Off Ver
    Microsoft 365 aka Office 365
    Posts
    3,863

    Re: display unique list in dropdown in each subsequent cell

    Hi paradise2sr,

    Try the following code included in the attached modified copy of your file. This works on Sheet1 only.

    In the Sheet 1 Code module:
    Private Sub Worksheet_Change(ByVal Target As Range)
    
      'Disable Excel Events and Screen Updating
      Application.EnableEvents = False
      Application.ScreenUpdating = False
    
      'Update the 'Data Validation Lists if a change is made in Column 'F'
      If Not Intersect(Target, Range("F4:F" & Rows.Count)) Is Nothing Then
        Call CreateDataValidationList
      End If
      
      'Allow User to Enter a 'New Name' if there is a Change in Column 'G'
      If Not Intersect(Target, Range("G4:G" & Rows.Count)) Is Nothing Then
        Call NewNameInColumnGDataEntry(ByVal Target)
      End If
      
      'Enable Excel Events and Screen Updating
      Application.EnableEvents = True
      Application.ScreenUpdating = True
    
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
      'Save the Current Value (in Column 'G' only
      If Not Intersect(Target, Range("G4:G" & Rows.Count)) Is Nothing Then
        
        If Target.Count > 1 Then
          MsgBox "More than one cell was selected." & vbCrLf & _
                 "Unable to save Current Value."
        Else
          sGblCurrentNameInColumnG = Target.Value
        End If
        
      End If
    
    End Sub
    In ordinary code module ModDataValidation:
    Option Explicit
    
    Public sGblCurrentNameInColumnG As String
    
    Sub CreateDataValidationList()
      'This creates a 'Data Validation' list for each cell in Column 'G', based on the cells in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
    
      Dim myDictionary As Object
      
      Dim i As Long
      Dim iColorRGB As Long
      Dim iColumn As Long
      Dim iFirstDataRow As Long
      Dim iLastDataRow As Long
      Dim iRow As Long
      
      Dim bHaveAtLeastOneValue As Boolean
      
      Dim sItemValue As String
      Dim sDataValidationList As String
      Dim sRange As String
      Dim sValueF As String
      Dim sValueG As String
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Initialization
      ''''''''''''''''''''''''''''''''''''''''''''''''
      
      'Get the First and Last 'Absolute' Data Rows from Global Values
      iFirstDataRow = 4
      iLastDataRow = ActiveSheet.Columns("F").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
      
      'Delete Data Validation in the Entire Column 'G'
      ActiveSheet.Range("G:G").Validation.Delete
      
      'Create the Scripting Dictionary
      'KEY:  Name in Column 'F'
      'ITEM: Unique Names in Column 'G' Comma Delimited - e.g ' Moe , Larry , Curly Joe ')
      '      NOTE: Each Name has a leading and trailing SPACE for Search Purposes
      
      Set myDictionary = CreateObject("Scripting.Dictionary")
      myDictionary.CompareMode = vbTextCompare 'case insensitive (vbTextCompare = 1)
      
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Put Unique Items in the Dictionary
      'Add Unique Column 'G' Names as items
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
        sValueG = Trim(ActiveSheet.Cells(iRow, "G").Value)
        
        'Add a Leading and Trailing Space to the Column 'G' value
        'If the value is BLANK (or all spaces) set the value to a SINGLE SPACE
        If Len(Trim(sValueG)) > 0 Then
          sValueG = " " & sValueG & " "
        Else
          sValueG = " "
        End If
        
        'If the 'Value' is NOT in the Dictionary, add the Value and the Value in Column 'G' to the Dictionary
        'If the 'Value' in Column 'G' is BLANK (or all spaces), add a 'SINGLE SPACE'
        'Otherwise, add the value in Column 'G' as an Item, if it is not already in the entry
        If myDictionary.exists(sValueF) = False Then
          myDictionary.Add sValueF, sValueG
        Else
          sItemValue = myDictionary.Item(sValueF)
          If sItemValue Like "*" & sValueG & "*" Then
            'Do nothing, the item is already in the dictionary
          ElseIf sItemValue = " " Then
            'The existing item is a 'SINGLE SPACE' - replace the 'SINGLE SPACE' with the value
            myDictionary.Item(sValueF) = sValueG
          Else
            'The Item is UNIQUE,  add a Comma, and the Item to the Dictionary
            myDictionary.Item(sValueF) = sItemValue & "," & sValueG
          End If
        End If
      Next iRow
      
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'True'  to     output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'False' to NOT output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    #Const NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = False
    #If NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = True Then
      For i = 0 To myDictionary.Count - 1
        Debug.Print i, myDictionary.keys()(i), myDictionary.items()(i)
      Next i
    #End If
      
     
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Create the 'Data Validation' List for each Cell in Column 'G'
      'and put 'Data Validation' in that cell
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
      
        'Get the List of 'Unique Names' associated with the name in Column 'F'
        'Prepend 'New Name' to the list
        'Remove Leading/Trailing Spaces and combinations of multiple spaces in the list
        sDataValidationList = myDictionary.Item(sValueF)
        sDataValidationList = "New Name," & sDataValidationList
        sDataValidationList = Application.WorksheetFunction.Trim(sDataValidationList)
        
        'Add the Data Validation Value
        With ActiveSheet.Cells(iRow, "G").Validation
          .Delete
          .Add Type:=xlValidateList, _
               AlertStyle:=xlValidAlertStop, _
               Operator:=xlBetween, _
               Formula1:=sDataValidationList
          .IgnoreBlank = True
          .InCellDropdown = True
          .InputTitle = ""
          .ErrorTitle = ""
          .InputMessage = ""
          .ErrorMessage = ""
          .ShowInput = True
          .ShowError = True
        End With
        
      
      Next iRow
      
      'Clear the Dictionary
      myDictionary.RemoveAll
      
      'Clear object pointers
      Set myDictionary = Nothing
      
    End Sub
    
    Sub NewNameInColumnGDataEntry(ByVal Target As Range)
      'This performs 'Data Entry' for a New Name in Column 'G'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
      
      Dim sValue As String
      
      'Get the 'New Value' in the Cell in Column 'G'
      sValue = Trim(Target.Value)
      
      If sValue = "New Name" Then
      
        sValue = ""
        sValue = InputBox("Enter the 'New Name' for this Cell.  Enter a SPACE CHARACTER to delete the current name. ", _
                          "New Name Data Entry")
                          
        If Len(sValue) = 0 Then
          'Restore the Previous value in Column 'G'
          Target.Value = sGblCurrentNameInColumnG
        Else
          sValue = Trim(sValue)
          Target.Value = sValue
          
        End If
      
      End If
    
      'Update the 'Data Validation List'
      Call CreateDataValidationList
    
    End Sub
    Lewis
    Attached Files Attached Files

  8. #8
    Forum Contributor
    Join Date
    03-11-2011
    Location
    Nepal
    MS-Off Ver
    MS Excel 2024
    Posts
    1,384

    Re: display unique list in dropdown in each subsequent cell

    Thanx LJMetzger

    Fantastic,it is displaying as expected.Few more things I would like to request in addition to above your post Post 7.

    1.I want in more than one specific sheet.
    2.Can the data be in alphabetical order rather than displaying randomly in dropdown as my data is very large.
    3.In actual I am operating more than 4000 rows and will go on increasing,the above code gets slow to perform,however you code are no doubt fantastic.In this case how to speedup.

    I thank you for the pain you have taken for me to solve my issue.
    Last edited by paradise2sr; 12-30-2016 at 10:44 PM.

  9. #9
    Forum Expert
    Join Date
    01-23-2013
    Location
    USA
    MS-Off Ver
    Microsoft 365 aka Office 365
    Posts
    3,863

    Re: display unique list in dropdown in each subsequent cell

    Hi,

    I implemented all your requests. There are now 3 main routines to do the processing:
    a. CreateDataValidationForOneNameController() - This process a one cell change in Column 'F'. It actually has to do two passes. The first pass puts the 'Data Validation' in Column 'G' for the 'New Name' in the Cell in Column 'F'. The second pass puts 'Data Validation in Column 'G' for the name in Column 'F' that was just deleted (it it still exists in other cells in Column 'F').
    b. NewNameInColumnGDataEntry() - This puts the 'Data Validation' in Column 'G' for the 'Name' in the Cell in Column 'F'.
    c. CreateTheEntireDataValidationList() - This is similar to the routine in the previous version, and calculates 'Data Validation' for every non-blank cell in Column F. This still takes a long time. It is only activated when more than one cell changes value (e.g. when a cut and paste is done).

    In the Sheet Code module (for each sheet you want to run the software):
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
      Dim bNeedToUpdateTheEntireList As Boolean
    
      'Disable Excel Events and Screen Updating
      Application.EnableEvents = False
      Application.ScreenUpdating = False
    
      'Update the 'Data Validation Lists if a change is made in Column 'F'
      If Not Intersect(Target, Range("F4:F" & Rows.Count)) Is Nothing Then
        If Target.Count > 1 Then
          'We need to update the Entire 'Data Validation List' because more than one name was changed
          'Set a flag instead of calling the routine, so the routine is only executed once
          bNeedToUpdateTheEntireList = True
        Else
          'Update 'Data Validation' for only the Name that changed
            Call CreateDataValidationForOneNameController(Target)
        End If
      End If
      
      'Allow User to Enter a 'New Name' if there is a Change in Column 'G'
      If Not Intersect(Target, Range("G4:G" & Rows.Count)) Is Nothing Then
        If Target.Count > 1 Then
          'We need to update the Entire 'Data Validation List' because more than one name was changed
          'Set a flag instead of calling the routine, so the routine is only executed once
          bNeedToUpdateTheEntireList = True
        Else
          Call NewNameInColumnGDataEntry(Target)
        End If
      End If
      
      'Update the Entire 'Data Validation List' because more than one name was changed
      If bNeedToUpdateTheEntireList = True Then
        Call CreateTheEntireDataValidationList
      End If
    
    MYEXIT:
      'Enable Excel Events and Screen Updating
      Application.EnableEvents = True
      Application.ScreenUpdating = True
    
    End Sub
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
      'Save the Current Value (in Column 'F' only) - only if 1 Cell was selected
      If Not Intersect(Target, Range("F4:F" & Rows.Count)) Is Nothing Then
        
        If Target.Count = 1 Then
          sGblCurrentNameInColumnF = Target.Value
        End If
    
      End If
      
      'Save the Current Value (in Column 'G' only)  - only if 1 Cell was selected
      If Not Intersect(Target, Range("G4:G" & Rows.Count)) Is Nothing Then
        If Target.Count = 1 Then
          sGblCurrentNameInColumnG = Target.Value
        End If
        
      End If
    
    End Sub
    Lewis

    Code is too long for one post - will be continued in next post.

  10. #10
    Forum Expert
    Join Date
    01-23-2013
    Location
    USA
    MS-Off Ver
    Microsoft 365 aka Office 365
    Posts
    3,863

    Re: display unique list in dropdown in each subsequent cell

    Code from previous post - continued

    In ordinary code module ModDataValidation:
    Option Explicit
    
    Public sGblCurrentNameInColumnF As String
    Public sGblCurrentNameInColumnG As String
    
    Sub CreateDataValidationForOneNameController(ByRef Target As Range)
      'This controls 'Data Validation' when one cell changes in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
    
      Dim sOldValueF As String
      Dim sValueF As String
      
      'Get the New Value in Column 'F'
      'Get the Old Value in Column 'F'
      sValueF = Target.Value
      sOldValueF = sGblCurrentNameInColumnF
      
      Call CreateDataValidationListForOneName(sValueF)
      Call CreateDataValidationListForOneName(sOldValueF)
      
    End Sub
    
    Sub CreateDataValidationListForOneName(sValueF As String)
      'This process a Change in One Cell in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
      '
      'NOTE: When a value changes in Column 'F', it also means an old value no longer exists
    
      Dim myRange As Range
      Dim r As Range
      
      Dim i As Long
      Dim iLastIndex As Long
      
      Dim a() As String
      Dim sAddress As String
      Dim sDataValidationList As String
      Dim sFirstAddress As String
      Dim sListOfAddresses As String
      Dim sValueG As String
      Dim sValueGList As String
      
      
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      'Create a List of All Users in Column 'G' associated with with the Input Name in Column 'F'
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
      'Create the 'Search Range'
      Set myRange = ActiveSheet.Range("F3:F" & Rows.Count)
      
      'Find the first occurence of the string
      Set r = Nothing
      Set r = myRange.Find( _
                What:=sValueF, _
                After:=ActiveSheet.Range("F3"), _
                LookIn:=xlValues, _
                LookAt:=xlWhole, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlNext, _
                MatchCase:=False, _
                SearchFormat:=False)
      
    
      If Not r Is Nothing Then
      
        'Save the found address as the 'First Address'
        sFirstAddress = r.Address(False, False)  '(False, False) removes '$' signs from the address
       
        'Process the first match, then search for additional values
        'If found add them to the array to be returned
        While sAddress <> sFirstAddress
          
          'Create a List of Addresses separated by COMMAs that contain the Name in Column 'F'
          If Len(sAddress) = 0 Then
            sAddress = sFirstAddress    'Special Processing for first match
            sListOfAddresses = sFirstAddress
          Else
            sListOfAddresses = sListOfAddresses & "," & sAddress
          End If
          
          
          'Get the Column 'G' Value (remove leading/trailing spaces
          sValueG = Trim(r.Offset(0, 1).Value)
          
          'Add a Leading and Trailing Space to the Column 'G' value
          'If the value is BLANK (or all spaces) set the value to a SINGLE SPACE
          If Len(Trim(sValueG)) > 0 Then
            sValueG = " " & sValueG & " "
          Else
            sValueG = " "
          End If
          
          If sValueGList Like "*" & sValueG & "*" Then
            'Do nothing, the Column 'G' Value is already in the dictionary
          ElseIf sValueGList = " " Or Len(sValueGList) = 0 Then
            'The existing List is a 'SINGLE SPACE' - replace the 'SINGLE SPACE' with the value
            sValueGList = sValueG
          Else
            'The Item is UNIQUE,  add a Comma, and the Item to the Column 'G' List
            sValueGList = sValueGList & "," & sValueG
          End If
          
          
          'Find the next match
          Set r = myRange.FindNext(After:=r)
          sAddress = r.Address(False, False)
        
        Wend
        
      
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Alphabetize the List and Prepend 'New Name' to the List
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        
        'Remove Leading/Trailing Spaces and combinations of multiple spaces in the list
        'Replace all 'COMMA SPACE' combinations with a COMMA
        'Replace all 'SPACE COMMA' combinations with a COMMA
        sValueGList = Application.WorksheetFunction.Trim(sValueGList)
        sValueGList = Replace(sValueGList, ", ", ",")  'Replace all 'COMMA SPACE' combinations with a COMMA
        sValueGList = Replace(sValueGList, " ,", ",")  'Replace all 'SPACE COMMA  combinations with a COMMA
        
        'Extract all the names into an array
        'Sort the Array
        iLastIndex = LjmParseString(sValueGList, a)
        If iLastIndex >= 0 Then
          Call LjmBubbleSortString(a)
        End If
        
        'Add the Names to the 'Data Validation List' one at a time
        For i = 0 To iLastIndex
          sValueG = a(i)
          sDataValidationList = sDataValidationList & "," & sValueG
        Next i
        
        
        
        'Prepend 'New Name' to the list
        sDataValidationList = "New Name," & sDataValidationList
        
      
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Update 'Data Validation' for this user
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
        'Create the Range of items in the List
        'The Range is For Column 'F' and we Need the Range to be for Column 'G'
        '  so the range has to be moved one column to the right
        Set myRange = ActiveSheet.Range(sListOfAddresses)
        Set myRange = myRange.Offset(, 1)
        'Debug.Print myRange.Address
      
        'Add the Data Validation Value for all cells in Column 'G' that
        'have the same Name in Column 'F'
        With myRange.Validation
          .Delete
          .Add Type:=xlValidateList, _
               AlertStyle:=xlValidAlertStop, _
               Operator:=xlBetween, _
               Formula1:=sDataValidationList
          .IgnoreBlank = True
          .InCellDropdown = True
          .InputTitle = ""
          .ErrorTitle = ""
          .InputMessage = ""
          .ErrorMessage = ""
          .ShowInput = True
          .ShowError = True
        End With
      
      
      End If
      
      
      
      'Clear object pointers
      Set myRange = Nothing
      Set r = Nothing
    
    End Sub
    
    
    Sub CreateTheEntireDataValidationList()
      'This creates a 'Data Validation' list for each cell in Column 'G', based on the cells in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
    
      Dim myDictionary As Object
      
      Dim i As Long
      Dim iFirstDataRow As Long
      Dim iLastDataRow As Long
      Dim iLastIndex As Long
      Dim iRow As Long
      
      Dim a() As String
      Dim sItemValue As String
      Dim sDataValidationList As String
      Dim sValue As String
      Dim sValueF As String
      Dim sValueG As String
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Initialization
      ''''''''''''''''''''''''''''''''''''''''''''''''
      
      'Get the First and Last 'Absolute' Data Rows from Global Values
      iFirstDataRow = 4
      iLastDataRow = ActiveSheet.Columns("F").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
      
      'Delete Data Validation in the Entire Column 'G'
      ActiveSheet.Range("G:G").Validation.Delete
      
      'Create the Scripting Dictionary
      'KEY:  Name in Column 'F'
      'ITEM: Unique Names in Column 'G' Comma Delimited - e.g ' Moe , Larry , Curly Joe ')
      '      NOTE: Each Name has a leading and trailing SPACE for Search Purposes
      
      Set myDictionary = CreateObject("Scripting.Dictionary")
      myDictionary.CompareMode = vbTextCompare 'case insensitive (vbTextCompare = 1)
      
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Put Unique Items in the Dictionary
      'Add Unique Column 'G' Names as items
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
        sValueG = Trim(ActiveSheet.Cells(iRow, "G").Value)
        
        'Add a Leading and Trailing Space to the Column 'G' value
        'If the value is BLANK (or all spaces) set the value to a SINGLE SPACE
        If Len(Trim(sValueG)) > 0 Then
          sValueG = " " & sValueG & " "
        Else
          sValueG = " "
        End If
        
        'If the 'Value' is NOT in the Dictionary, add the Value and the Value in Column 'G' to the Dictionary
        'If the 'Value' in Column 'G' is BLANK (or all spaces), add a 'SINGLE SPACE'
        'Otherwise, add the value in Column 'G' as an Item, if it is not already in the entry
        If myDictionary.exists(sValueF) = False Then
          myDictionary.Add sValueF, sValueG
        Else
          sItemValue = myDictionary.Item(sValueF)
          If sItemValue Like "*" & sValueG & "*" Then
            'Do nothing, the item is already in the dictionary
          ElseIf sItemValue = " " Then
            'The existing item is a 'SINGLE SPACE' - replace the 'SINGLE SPACE' with the value
            myDictionary.Item(sValueF) = sValueG
          Else
            'The Item is UNIQUE,  add a Comma, and the Item to the Dictionary
            myDictionary.Item(sValueF) = sItemValue & "," & sValueG
          End If
        End If
      Next iRow
      
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'True'  to     output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'False' to NOT output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    #Const NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = False
    #If NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = True Then
      For i = 0 To myDictionary.Count - 1
        Debug.Print i, myDictionary.keys()(i), myDictionary.items()(i)
      Next i
    #End If
      
     
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Create the 'Data Validation' List for each Cell in Column 'G'
      'and put 'Data Validation' in that cell
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
      
        'Process only if the value in Column 'F' is NOT BLANK
    If Len(sValueF) > 0 Then
        'Get the List of 'Unique Names' associated with the name in Column 'F'
        'Remove Leading/Trailing Spaces and combinations of multiple spaces in the list
        'Replace all 'COMMA SPACE' combinations with a COMMA
        'Replace all 'SPACE COMMA' combinations with a COMMA
        sDataValidationList = myDictionary.Item(sValueF)
        sDataValidationList = Application.WorksheetFunction.Trim(sDataValidationList)
        sDataValidationList = Replace(sDataValidationList, ", ", ",")  'Replace all 'COMMA SPACE' combinations with a COMMA
        sDataValidationList = Replace(sDataValidationList, " ,", ",")  'Replace all 'SPACE COMMA  combinations with a COMMA
        
        'Extract all the names into an array
        'Sort the Array
        iLastIndex = LjmParseString(sDataValidationList, a)
        If iLastIndex >= 0 Then
          Call LjmBubbleSortString(a)
        End If
        
        'Prepend 'New Name' to the list
        sDataValidationList = "New Name"
        
        'Add the Names to the 'Data Validation List' one at a time
        For i = 0 To iLastIndex
          sValue = a(i)
          sDataValidationList = sDataValidationList & "," & sValue
        Next i
        
        'Add the Data Validation Value
        With ActiveSheet.Cells(iRow, "G").Validation
          .Delete
          .Add Type:=xlValidateList, _
               AlertStyle:=xlValidAlertStop, _
               Operator:=xlBetween, _
               Formula1:=sDataValidationList
          .IgnoreBlank = True
          .InCellDropdown = True
          .InputTitle = ""
          .ErrorTitle = ""
          .InputMessage = ""
          .ErrorMessage = ""
          .ShowInput = True
          .ShowError = True
        End With
      
    End If
    
      Next iRow
      
      'Clear the Dictionary
      myDictionary.RemoveAll
      
      'Clear object pointers
      Set myDictionary = Nothing
      
    End Sub
    
    Sub NewNameInColumnGDataEntry(ByVal Target As Range)
      'This performs 'Data Entry' for a New Name in Column 'G'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
      
      Dim sValueF As String
      Dim sValueG As String
      
      'Do not process if more than one cell is changed
      'this should never occur because other routines protect against this occurrence
      If Target.Count > 1 Then
        MsgBox "Unable to Process a 'New Name' because more than one cell changed value."
        Exit Sub
      End If
      
      'Get the 'New Value' in the Cell in Column 'G'
      sValueG = Trim(Target.Value)
      
      'Get the Value in Column 'F'
      sValueF = Trim(Target.Offset(0, -1).Value)
      
      'Do NOT process if Column 'F' is BLANK
      If Len(sValueF) = 0 Then
        Exit Sub
      End If
      
      
      If sValueG = "New Name" Then
      
        sValueG = ""
        sValueG = InputBox("Enter the 'New Name' for this Cell.  Enter a SPACE CHARACTER to delete the current name. ", _
                          "New Name Data Entry")
                          
        If Len(sValueG) = 0 Then
          'Restore the Previous (Original) value in Column 'G'
          Target.Value = sGblCurrentNameInColumnG
        Else
          'Put the value just entered by the User in Column 'G'
          sValueG = Trim(sValueG)
          Target.Value = sValueG
          
          'Update the 'Data Validation List' for the name in Column 'F'
          'NOTE: Target.Offset(0, -1) is the Range Object for one cell to the left (i.e. Column 'F')
          Call CreateDataValidationForOneNameController(Target.Offset(0, -1))
          
        End If
      
      End If
    
    
    End Sub
    
    Sub LjmBubbleSortString(ByRef myArray() As String)
      'This sorts a string array in ascending order using a 'Bubble Sort' algorithm
         
      Dim iFirst As Integer
      Dim iLast As Integer
      Dim i As Integer
      Dim j As Integer
      Dim sTemp As String
         
      'Get the start and end indices
      iFirst = LBound(myArray)
      iLast = UBound(myArray)
        
      'Sort
      For i = iFirst To iLast - 1
        For j = i + 1 To iLast
          If myArray(i) > myArray(j) Then
            sTemp = myArray(j)
            myArray(j) = myArray(i)
            myArray(i) = sTemp
          End If
       Next j
     Next i
         
    End Sub
    
    Function LjmParseString(InputString As String, ByRef sArray() As String) As Long
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '
    ' This parses a comma delimited string into an array of tokens.
    ' Leading and trailing spaces are stripped from the string in the process.
    '
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
      Dim i As Integer
      Dim LastNonEmpty As Long
      Dim iSplitIndex As Long
    
     'Initialization
      LastNonEmpty = -1
      
      'Split the string into tokens
      sArray = Split(InputString, ",")
      iSplitIndex = UBound(sArray)
    
     'Remove the null tokens
      For i = 0 To iSplitIndex
    
        If sArray(i) <> "" Then
           'Get rid of all the whitespace
            LastNonEmpty = LastNonEmpty + 1
            sArray(LastNonEmpty) = sArray(i)
        End If
      Next i
    
    
     'Return the number of indices
      LjmParseString = LastNonEmpty
      
    End Function

  11. #11
    Forum Expert
    Join Date
    01-23-2013
    Location
    USA
    MS-Off Ver
    Microsoft 365 aka Office 365
    Posts
    3,863

    Re: display unique list in dropdown in each subsequent cell

    Code from previous post - continued

    In ordinary code module ModDataValidation:
    Option Explicit
    
    Public sGblCurrentNameInColumnF As String
    Public sGblCurrentNameInColumnG As String
    
    Sub CreateDataValidationForOneNameController(ByRef Target As Range)
      'This controls 'Data Validation' when one cell changes in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
    
      Dim sOldValueF As String
      Dim sValueF As String
      
      'Get the New Value in Column 'F'
      'Get the Old Value in Column 'F'
      sValueF = Target.Value
      sOldValueF = sGblCurrentNameInColumnF
      
      Call CreateDataValidationListForOneName(sValueF)
      Call CreateDataValidationListForOneName(sOldValueF)
      
    End Sub
    
    Sub CreateDataValidationListForOneName(sValueF As String)
      'This process a Change in One Cell in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
      '
      'NOTE: When a value changes in Column 'F', it also means an old value no longer exists
    
      Dim myRange As Range
      Dim r As Range
      
      Dim i As Long
      Dim iLastIndex As Long
      
      Dim a() As String
      Dim sAddress As String
      Dim sDataValidationList As String
      Dim sFirstAddress As String
      Dim sListOfAddresses As String
      Dim sValueG As String
      Dim sValueGList As String
      
      
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      'Create a List of All Users in Column 'G' associated with with the Input Name in Column 'F'
      '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
      'Create the 'Search Range'
      Set myRange = ActiveSheet.Range("F3:F" & Rows.Count)
      
      'Find the first occurence of the string
      Set r = Nothing
      Set r = myRange.Find( _
                What:=sValueF, _
                After:=ActiveSheet.Range("F3"), _
                LookIn:=xlValues, _
                LookAt:=xlWhole, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlNext, _
                MatchCase:=False, _
                SearchFormat:=False)
      
    
      If Not r Is Nothing Then
      
        'Save the found address as the 'First Address'
        sFirstAddress = r.Address(False, False)  '(False, False) removes '$' signs from the address
       
        'Process the first match, then search for additional values
        'If found add them to the array to be returned
        While sAddress <> sFirstAddress
          
          'Create a List of Addresses separated by COMMAs that contain the Name in Column 'F'
          If Len(sAddress) = 0 Then
            sAddress = sFirstAddress    'Special Processing for first match
            sListOfAddresses = sFirstAddress
          Else
            sListOfAddresses = sListOfAddresses & "," & sAddress
          End If
          
          
          'Get the Column 'G' Value (remove leading/trailing spaces
          sValueG = Trim(r.Offset(0, 1).Value)
          
          'Add a Leading and Trailing Space to the Column 'G' value
          'If the value is BLANK (or all spaces) set the value to a SINGLE SPACE
          If Len(Trim(sValueG)) > 0 Then
            sValueG = " " & sValueG & " "
          Else
            sValueG = " "
          End If
          
          If sValueGList Like "*" & sValueG & "*" Then
            'Do nothing, the Column 'G' Value is already in the dictionary
          ElseIf sValueGList = " " Or Len(sValueGList) = 0 Then
            'The existing List is a 'SINGLE SPACE' - replace the 'SINGLE SPACE' with the value
            sValueGList = sValueG
          Else
            'The Item is UNIQUE,  add a Comma, and the Item to the Column 'G' List
            sValueGList = sValueGList & "," & sValueG
          End If
          
          
          'Find the next match
          Set r = myRange.FindNext(After:=r)
          sAddress = r.Address(False, False)
        
        Wend
        
      
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Alphabetize the List and Prepend 'New Name' to the List
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        
        'Remove Leading/Trailing Spaces and combinations of multiple spaces in the list
        'Replace all 'COMMA SPACE' combinations with a COMMA
        'Replace all 'SPACE COMMA' combinations with a COMMA
        sValueGList = Application.WorksheetFunction.Trim(sValueGList)
        sValueGList = Replace(sValueGList, ", ", ",")  'Replace all 'COMMA SPACE' combinations with a COMMA
        sValueGList = Replace(sValueGList, " ,", ",")  'Replace all 'SPACE COMMA  combinations with a COMMA
        
        'Extract all the names into an array
        'Sort the Array
        iLastIndex = LjmParseString(sValueGList, a)
        If iLastIndex >= 0 Then
          Call LjmBubbleSortString(a)
        End If
        
        'Add the Names to the 'Data Validation List' one at a time
        For i = 0 To iLastIndex
          sValueG = a(i)
          sDataValidationList = sDataValidationList & "," & sValueG
        Next i
        
        
        
        'Prepend 'New Name' to the list
        sDataValidationList = "New Name," & sDataValidationList
        
      
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Update 'Data Validation' for this user
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
      
        'Create the Range of items in the List
        'The Range is For Column 'F' and we Need the Range to be for Column 'G'
        '  so the range has to be moved one column to the right
        Set myRange = ActiveSheet.Range(sListOfAddresses)
        Set myRange = myRange.Offset(, 1)
        'Debug.Print myRange.Address
      
        'Add the Data Validation Value for all cells in Column 'G' that
        'have the same Name in Column 'F'
        With myRange.Validation
          .Delete
          .Add Type:=xlValidateList, _
               AlertStyle:=xlValidAlertStop, _
               Operator:=xlBetween, _
               Formula1:=sDataValidationList
          .IgnoreBlank = True
          .InCellDropdown = True
          .InputTitle = ""
          .ErrorTitle = ""
          .InputMessage = ""
          .ErrorMessage = ""
          .ShowInput = True
          .ShowError = True
        End With
      
      
      End If
      
      
      
      'Clear object pointers
      Set myRange = Nothing
      Set r = Nothing
    
    End Sub
    
    
    Sub CreateTheEntireDataValidationList()
      'This creates a 'Data Validation' list for each cell in Column 'G', based on the cells in Column 'F'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
    
      Dim myDictionary As Object
      
      Dim i As Long
      Dim iFirstDataRow As Long
      Dim iLastDataRow As Long
      Dim iLastIndex As Long
      Dim iRow As Long
      
      Dim a() As String
      Dim sItemValue As String
      Dim sDataValidationList As String
      Dim sValue As String
      Dim sValueF As String
      Dim sValueG As String
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Initialization
      ''''''''''''''''''''''''''''''''''''''''''''''''
      
      'Get the First and Last 'Absolute' Data Rows from Global Values
      iFirstDataRow = 4
      iLastDataRow = ActiveSheet.Columns("F").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
      
      'Delete Data Validation in the Entire Column 'G'
      ActiveSheet.Range("G:G").Validation.Delete
      
      'Create the Scripting Dictionary
      'KEY:  Name in Column 'F'
      'ITEM: Unique Names in Column 'G' Comma Delimited - e.g ' Moe , Larry , Curly Joe ')
      '      NOTE: Each Name has a leading and trailing SPACE for Search Purposes
      
      Set myDictionary = CreateObject("Scripting.Dictionary")
      myDictionary.CompareMode = vbTextCompare 'case insensitive (vbTextCompare = 1)
      
      
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Put Unique Items in the Dictionary
      'Add Unique Column 'G' Names as items
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
        sValueG = Trim(ActiveSheet.Cells(iRow, "G").Value)
        
        'Add a Leading and Trailing Space to the Column 'G' value
        'If the value is BLANK (or all spaces) set the value to a SINGLE SPACE
        If Len(Trim(sValueG)) > 0 Then
          sValueG = " " & sValueG & " "
        Else
          sValueG = " "
        End If
        
        'If the 'Value' is NOT in the Dictionary, add the Value and the Value in Column 'G' to the Dictionary
        'If the 'Value' in Column 'G' is BLANK (or all spaces), add a 'SINGLE SPACE'
        'Otherwise, add the value in Column 'G' as an Item, if it is not already in the entry
        If myDictionary.exists(sValueF) = False Then
          myDictionary.Add sValueF, sValueG
        Else
          sItemValue = myDictionary.Item(sValueF)
          If sItemValue Like "*" & sValueG & "*" Then
            'Do nothing, the item is already in the dictionary
          ElseIf sItemValue = " " Then
            'The existing item is a 'SINGLE SPACE' - replace the 'SINGLE SPACE' with the value
            myDictionary.Item(sValueF) = sValueG
          Else
            'The Item is UNIQUE,  add a Comma, and the Item to the Dictionary
            myDictionary.Item(sValueF) = sItemValue & "," & sValueG
          End If
        End If
      Next iRow
      
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'True'  to     output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    'Set the CONDITIONAL COMPILATION CONSTANT below to 'False' to NOT output Dictionary Debug Values to the Immediate Window (CTRL G in debugger)
    #Const NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = False
    #If NEED_SHEET10_DICTIONARY_DEBUG_OUTPUT = True Then
      For i = 0 To myDictionary.Count - 1
        Debug.Print i, myDictionary.keys()(i), myDictionary.items()(i)
      Next i
    #End If
      
     
      ''''''''''''''''''''''''''''''''''''''''''''''''
      'Create the 'Data Validation' List for each Cell in Column 'G'
      'and put 'Data Validation' in that cell
      ''''''''''''''''''''''''''''''''''''''''''''''''
      For iRow = iFirstDataRow To iLastDataRow
      
        'Get the Next 'Value' (without leading/trailing spaces) in both column 'F' and column 'G'
        sValueF = Trim(ActiveSheet.Cells(iRow, "F").Value)
      
        'Process only if the value in Column 'F' is NOT BLANK
    If Len(sValueF) > 0 Then
        'Get the List of 'Unique Names' associated with the name in Column 'F'
        'Remove Leading/Trailing Spaces and combinations of multiple spaces in the list
        'Replace all 'COMMA SPACE' combinations with a COMMA
        'Replace all 'SPACE COMMA' combinations with a COMMA
        sDataValidationList = myDictionary.Item(sValueF)
        sDataValidationList = Application.WorksheetFunction.Trim(sDataValidationList)
        sDataValidationList = Replace(sDataValidationList, ", ", ",")  'Replace all 'COMMA SPACE' combinations with a COMMA
        sDataValidationList = Replace(sDataValidationList, " ,", ",")  'Replace all 'SPACE COMMA  combinations with a COMMA
        
        'Extract all the names into an array
        'Sort the Array
        iLastIndex = LjmParseString(sDataValidationList, a)
        If iLastIndex >= 0 Then
          Call LjmBubbleSortString(a)
        End If
        
        'Prepend 'New Name' to the list
        sDataValidationList = "New Name"
        
        'Add the Names to the 'Data Validation List' one at a time
        For i = 0 To iLastIndex
          sValue = a(i)
          sDataValidationList = sDataValidationList & "," & sValue
        Next i
        
        'Add the Data Validation Value
        With ActiveSheet.Cells(iRow, "G").Validation
          .Delete
          .Add Type:=xlValidateList, _
               AlertStyle:=xlValidAlertStop, _
               Operator:=xlBetween, _
               Formula1:=sDataValidationList
          .IgnoreBlank = True
          .InCellDropdown = True
          .InputTitle = ""
          .ErrorTitle = ""
          .InputMessage = ""
          .ErrorMessage = ""
          .ShowInput = True
          .ShowError = True
        End With
      
    End If
    
      Next iRow
      
      'Clear the Dictionary
      myDictionary.RemoveAll
      
      'Clear object pointers
      Set myDictionary = Nothing
      
    End Sub
    
    Sub NewNameInColumnGDataEntry(ByVal Target As Range)
      'This performs 'Data Entry' for a New Name in Column 'G'
      '
      'It is the calling routine's responsibility to DISABLE Excel Events
      
      Dim sValueF As String
      Dim sValueG As String
      
      'Do not process if more than one cell is changed
      'this should never occur because other routines protect against this occurrence
      If Target.Count > 1 Then
        MsgBox "Unable to Process a 'New Name' because more than one cell changed value."
        Exit Sub
      End If
      
      'Get the 'New Value' in the Cell in Column 'G'
      sValueG = Trim(Target.Value)
      
      'Get the Value in Column 'F'
      sValueF = Trim(Target.Offset(0, -1).Value)
      
      'Do NOT process if Column 'F' is BLANK
      If Len(sValueF) = 0 Then
        Exit Sub
      End If
      
      
      If sValueG = "New Name" Then
      
        sValueG = ""
        sValueG = InputBox("Enter the 'New Name' for this Cell.  Enter a SPACE CHARACTER to delete the current name. ", _
                          "New Name Data Entry")
                          
        If Len(sValueG) = 0 Then
          'Restore the Previous (Original) value in Column 'G'
          Target.Value = sGblCurrentNameInColumnG
        Else
          'Put the value just entered by the User in Column 'G'
          sValueG = Trim(sValueG)
          Target.Value = sValueG
          
          'Update the 'Data Validation List' for the name in Column 'F'
          'NOTE: Target.Offset(0, -1) is the Range Object for one cell to the left (i.e. Column 'F')
          Call CreateDataValidationForOneNameController(Target.Offset(0, -1))
          
        End If
      
      End If
    
    
    End Sub
    
    Sub LjmBubbleSortString(ByRef myArray() As String)
      'This sorts a string array in ascending order using a 'Bubble Sort' algorithm
         
      Dim iFirst As Integer
      Dim iLast As Integer
      Dim i As Integer
      Dim j As Integer
      Dim sTemp As String
         
      'Get the start and end indices
      iFirst = LBound(myArray)
      iLast = UBound(myArray)
        
      'Sort
      For i = iFirst To iLast - 1
        For j = i + 1 To iLast
          If myArray(i) > myArray(j) Then
            sTemp = myArray(j)
            myArray(j) = myArray(i)
            myArray(i) = sTemp
          End If
       Next j
     Next i
         
    End Sub
    
    Function LjmParseString(InputString As String, ByRef sArray() As String) As Long
    ' This parses a comma delimited string into an array of tokens.
    ' Leading and trailing spaces are stripped from the string in the process.
    
      Dim i As Integer
      Dim LastNonEmpty As Long
      Dim iSplitIndex As Long
    
     'Initialization
      LastNonEmpty = -1
      
      'Split the string into tokens
      sArray = Split(InputString, ",")
      iSplitIndex = UBound(sArray)
    
     'Remove the null tokens
      For i = 0 To iSplitIndex
    
        If sArray(i) <> "" Then
           'Get rid of all the whitespace
            LastNonEmpty = LastNonEmpty + 1
            sArray(LastNonEmpty) = sArray(i)
        End If
      Next i
    
    
     'Return the number of indices
      LjmParseString = LastNonEmpty
      
    End Function

  12. #12
    Forum Contributor
    Join Date
    03-11-2011
    Location
    Nepal
    MS-Off Ver
    MS Excel 2024
    Posts
    1,384

    Re: display unique list in dropdown in each subsequent cell

    That's awesome and fantastic !

    For a long time I was looking for this type of issue and ultimately you have solved it.

    Thanx a lot and I am really grateful to you for the pain you have taken to resolve my issue.

+ Reply to Thread

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Replies: 7
    Last Post: 11-21-2016, 04:40 PM
  2. Replies: 7
    Last Post: 12-23-2015, 07:43 AM
  3. Create dropdown list in Excel that will only list unique entries
    By MissAudrey in forum Excel Formulas & Functions
    Replies: 11
    Last Post: 01-22-2015, 04:56 PM
  4. [SOLVED] Display a dropdown list or populate a cell with single value based on other cells' values
    By filla_dilla in forum Excel Formulas & Functions
    Replies: 4
    Last Post: 09-12-2014, 09:47 AM
  5. Display Cell Data from a cell after selecting option from dropdown list.
    By RoyalleSky in forum Excel Formulas & Functions
    Replies: 0
    Last Post: 02-20-2014, 06:04 AM
  6. Display dropdown list in cell if condition is met
    By markiz in forum Excel Formulas & Functions
    Replies: 8
    Last Post: 03-19-2013, 03:12 AM
  7. Need help moving multiple lines of data in single cell to unique subsequent rows
    By brettmburns in forum Excel Programming / VBA / Macros
    Replies: 2
    Last Post: 12-21-2012, 03:04 PM

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