VBA: Search and select last found string in a column containing duplicate entries












0















I am trying to search a column that has duplicate entries of information. I want to select the last found occurence of the string in the column. How can I do this?



If possible, please show me how this can be done with the Selection.Find method.



Columns("A:A").Select

Selection.Find(What:="foobar", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate









share|improve this question



























    0















    I am trying to search a column that has duplicate entries of information. I want to select the last found occurence of the string in the column. How can I do this?



    If possible, please show me how this can be done with the Selection.Find method.



    Columns("A:A").Select

    Selection.Find(What:="foobar", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate









    share|improve this question

























      0












      0








      0








      I am trying to search a column that has duplicate entries of information. I want to select the last found occurence of the string in the column. How can I do this?



      If possible, please show me how this can be done with the Selection.Find method.



      Columns("A:A").Select

      Selection.Find(What:="foobar", After:=ActiveCell, LookIn:=xlFormulas, _
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      MatchCase:=False, SearchFormat:=False).Activate









      share|improve this question














      I am trying to search a column that has duplicate entries of information. I want to select the last found occurence of the string in the column. How can I do this?



      If possible, please show me how this can be done with the Selection.Find method.



      Columns("A:A").Select

      Selection.Find(What:="foobar", After:=ActiveCell, LookIn:=xlFormulas, _
      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
      MatchCase:=False, SearchFormat:=False).Activate






      excel vba excel-vba excel-2016






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 13 '18 at 18:21









      ElectroMotiveHorseElectroMotiveHorse

      567




      567
























          2 Answers
          2






          active

          oldest

          votes


















          0














          Sub FindAndSelectAll()
          Dim str As String, cll As Range, c As Range
          Dim rSearch As Range

          Set rSearch = Range("A1").CurrentRegion

          With rSearch
          For Each cll In rSearch
          Set c = .Find(cll.Value2, _
          LookIn:=xlValues, _
          searchdirection:=xlPrevious)

          If Not c Is Nothing And cll.Row < c.Row Then
          Range(c.Address).Interior.Color = 65535
          End If

          Next
          End With

          End Sub


          enter image description here






          share|improve this answer































            0














            I found the answer I was looking for. By setting the SearchDirection property to xlPrevious, it will find the last value in the range. Then the cell can be focused on by using the .Select method. However, if the value that is being searched is a substring of other values within the column, it may select the wrong cell. This is solved by using a while loop that checks the value of the cell it finds, and keeps searching the previous value if it is not the string we are looking for.



            Sub FindLast()
            Dim fc As Range
            Dim my_var As String
            Dim cell_check As Variant
            my_var = "String 1"

            Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
            SearchDirection:=xlPrevious)
            fc.Select
            cell_check = ActiveCell.Value

            While cell_check <> my_var
            Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
            fc.Select
            cell_check = ActiveCell.Value
            Wend

            End Sub


            I found the solution by reading the documentation on Microsofts website.
            https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287286%2fvba-search-and-select-last-found-string-in-a-column-containing-duplicate-entrie%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0














              Sub FindAndSelectAll()
              Dim str As String, cll As Range, c As Range
              Dim rSearch As Range

              Set rSearch = Range("A1").CurrentRegion

              With rSearch
              For Each cll In rSearch
              Set c = .Find(cll.Value2, _
              LookIn:=xlValues, _
              searchdirection:=xlPrevious)

              If Not c Is Nothing And cll.Row < c.Row Then
              Range(c.Address).Interior.Color = 65535
              End If

              Next
              End With

              End Sub


              enter image description here






              share|improve this answer




























                0














                Sub FindAndSelectAll()
                Dim str As String, cll As Range, c As Range
                Dim rSearch As Range

                Set rSearch = Range("A1").CurrentRegion

                With rSearch
                For Each cll In rSearch
                Set c = .Find(cll.Value2, _
                LookIn:=xlValues, _
                searchdirection:=xlPrevious)

                If Not c Is Nothing And cll.Row < c.Row Then
                Range(c.Address).Interior.Color = 65535
                End If

                Next
                End With

                End Sub


                enter image description here






                share|improve this answer


























                  0












                  0








                  0







                  Sub FindAndSelectAll()
                  Dim str As String, cll As Range, c As Range
                  Dim rSearch As Range

                  Set rSearch = Range("A1").CurrentRegion

                  With rSearch
                  For Each cll In rSearch
                  Set c = .Find(cll.Value2, _
                  LookIn:=xlValues, _
                  searchdirection:=xlPrevious)

                  If Not c Is Nothing And cll.Row < c.Row Then
                  Range(c.Address).Interior.Color = 65535
                  End If

                  Next
                  End With

                  End Sub


                  enter image description here






                  share|improve this answer













                  Sub FindAndSelectAll()
                  Dim str As String, cll As Range, c As Range
                  Dim rSearch As Range

                  Set rSearch = Range("A1").CurrentRegion

                  With rSearch
                  For Each cll In rSearch
                  Set c = .Find(cll.Value2, _
                  LookIn:=xlValues, _
                  searchdirection:=xlPrevious)

                  If Not c Is Nothing And cll.Row < c.Row Then
                  Range(c.Address).Interior.Color = 65535
                  End If

                  Next
                  End With

                  End Sub


                  enter image description here







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 14 '18 at 4:34









                  Michal RosaMichal Rosa

                  1,3291814




                  1,3291814

























                      0














                      I found the answer I was looking for. By setting the SearchDirection property to xlPrevious, it will find the last value in the range. Then the cell can be focused on by using the .Select method. However, if the value that is being searched is a substring of other values within the column, it may select the wrong cell. This is solved by using a while loop that checks the value of the cell it finds, and keeps searching the previous value if it is not the string we are looking for.



                      Sub FindLast()
                      Dim fc As Range
                      Dim my_var As String
                      Dim cell_check As Variant
                      my_var = "String 1"

                      Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
                      SearchDirection:=xlPrevious)
                      fc.Select
                      cell_check = ActiveCell.Value

                      While cell_check <> my_var
                      Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
                      fc.Select
                      cell_check = ActiveCell.Value
                      Wend

                      End Sub


                      I found the solution by reading the documentation on Microsofts website.
                      https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious






                      share|improve this answer




























                        0














                        I found the answer I was looking for. By setting the SearchDirection property to xlPrevious, it will find the last value in the range. Then the cell can be focused on by using the .Select method. However, if the value that is being searched is a substring of other values within the column, it may select the wrong cell. This is solved by using a while loop that checks the value of the cell it finds, and keeps searching the previous value if it is not the string we are looking for.



                        Sub FindLast()
                        Dim fc As Range
                        Dim my_var As String
                        Dim cell_check As Variant
                        my_var = "String 1"

                        Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
                        SearchDirection:=xlPrevious)
                        fc.Select
                        cell_check = ActiveCell.Value

                        While cell_check <> my_var
                        Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
                        fc.Select
                        cell_check = ActiveCell.Value
                        Wend

                        End Sub


                        I found the solution by reading the documentation on Microsofts website.
                        https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious






                        share|improve this answer


























                          0












                          0








                          0







                          I found the answer I was looking for. By setting the SearchDirection property to xlPrevious, it will find the last value in the range. Then the cell can be focused on by using the .Select method. However, if the value that is being searched is a substring of other values within the column, it may select the wrong cell. This is solved by using a while loop that checks the value of the cell it finds, and keeps searching the previous value if it is not the string we are looking for.



                          Sub FindLast()
                          Dim fc As Range
                          Dim my_var As String
                          Dim cell_check As Variant
                          my_var = "String 1"

                          Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
                          SearchDirection:=xlPrevious)
                          fc.Select
                          cell_check = ActiveCell.Value

                          While cell_check <> my_var
                          Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
                          fc.Select
                          cell_check = ActiveCell.Value
                          Wend

                          End Sub


                          I found the solution by reading the documentation on Microsofts website.
                          https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious






                          share|improve this answer













                          I found the answer I was looking for. By setting the SearchDirection property to xlPrevious, it will find the last value in the range. Then the cell can be focused on by using the .Select method. However, if the value that is being searched is a substring of other values within the column, it may select the wrong cell. This is solved by using a while loop that checks the value of the cell it finds, and keeps searching the previous value if it is not the string we are looking for.



                          Sub FindLast()
                          Dim fc As Range
                          Dim my_var As String
                          Dim cell_check As Variant
                          my_var = "String 1"

                          Set fc = Worksheets("Sheet1").Columns("A").Find(what:=my_var, _
                          SearchDirection:=xlPrevious)
                          fc.Select
                          cell_check = ActiveCell.Value

                          While cell_check <> my_var
                          Set fc = Worksheets("Sheet1").Columns("A").FindPrevious(after:=fc)
                          fc.Select
                          cell_check = ActiveCell.Value
                          Wend

                          End Sub


                          I found the solution by reading the documentation on Microsofts website.
                          https://docs.microsoft.com/en-us/office/vba/api/excel.range.findprevious







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 17 '18 at 4:40









                          ElectroMotiveHorseElectroMotiveHorse

                          567




                          567






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287286%2fvba-search-and-select-last-found-string-in-a-column-containing-duplicate-entrie%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Xamarin.iOS Cant Deploy on Iphone

                              Glorious Revolution

                              Dulmage-Mendelsohn matrix decomposition in Python