VBA - Remove rows from XLSX where particular text can be found within a cell











up vote
0
down vote

favorite












I'm super new to VBA and hoping I could get some help please ... I'm looking for a succinct way to remove rows from a sheet via Macro and the VBA samples I've tried I cant get to work. I'm hoping it's something simple :)



The macro would remove a row that DOES NOT contain a specific values (from a specific column) from within an array. I sort of had it working, and full disclosure, I've borrowed code from other examples. The latest sample I'm working with just deletes everything, the other sample I was working with deleted Acro32.exe, but kept everything else. So not yet arrived at a solution.



Background: I have a CSV output from an application auditing tool, which spits out tonnes of app data from various computers. That CSV data will be copied into my master 'reporting' spreadsheet. I am only interested in reviewing and keeping data about specific applications, namely Chrome.exe, Firefox.exe, Acro32.exe and Winword.exe. The application name is always found in Column F. So, any cell contents found in Column F, that DOES NOT contain a value in an array, that entire row needs to be deleted. Ideally :) and the remaining rows will only include apps I'm interested in as defined in the array.



Any thoughts would be appreciated.



Thanks



Public Function GetLastRow(ByVal rngToCheck As Range) As Long

Dim rngLast As Range

Set rngLast = rngToCheck.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious)

If rngLast Is Nothing Then
GetLastRow = rngToCheck.Row
Else
GetLastRow = rngLast.Row
End If

End Function

Sub Apps_Formatting()

Dim varList As Variant
Dim lngLastRow As Long, lngCounter As Long
Dim rngToCheck As Range, rngFound As Range
Dim rngToDelete As Range, rngDifferences As Range
Dim blnFound As Boolean

Application.ScreenUpdating = False

With ActiveSheet
lngLastRow = GetLastRow(.Cells)

'we don't want to delete our header row
Set rngToCheck = .Range("A2:A" & lngLastRow)
End With

If lngLastRow > 1 Then

With rngToCheck

'any Cell in Column F that contains one of these values are KEPT
'and if not found in cell, then the entire row is deleted.

varList = VBA.Array("Chrome.exe", "Firefox.exe", "Acro32.exe")

For lngCounter = LBound(varList) To UBound(varList)

Set rngFound = .Find( _
what:=varList(lngCounter), _
Lookat:=xlWhole, _
searchorder:=xlByRows, _
searchdirection:=xlNext, _
MatchCase:=True)

'check if we found a value we want to keep
If Not rngFound Is Nothing Then

blnFound = True

'if there are no cells with a different value then
'we will get an error
On Error Resume Next
Set rngDifferences = .ColumnDifferences(Comparison:=rngFound)
On Error GoTo 0

If Not rngDifferences Is Nothing Then
If rngToDelete Is Nothing Then
Set rngToDelete = rngDifferences
Else
Set rngToDelete = Application.Intersect(rngToDelete, rngDifferences)
End If
End If

End If

Next lngCounter
End With

If rngToDelete Is Nothing Then
If Not blnFound Then rngToCheck.EntireRow.Delete
Else
rngToDelete.EntireRow.Delete
End If
End If

Application.ScreenUpdating = True

End Sub









share|improve this question




























    up vote
    0
    down vote

    favorite












    I'm super new to VBA and hoping I could get some help please ... I'm looking for a succinct way to remove rows from a sheet via Macro and the VBA samples I've tried I cant get to work. I'm hoping it's something simple :)



    The macro would remove a row that DOES NOT contain a specific values (from a specific column) from within an array. I sort of had it working, and full disclosure, I've borrowed code from other examples. The latest sample I'm working with just deletes everything, the other sample I was working with deleted Acro32.exe, but kept everything else. So not yet arrived at a solution.



    Background: I have a CSV output from an application auditing tool, which spits out tonnes of app data from various computers. That CSV data will be copied into my master 'reporting' spreadsheet. I am only interested in reviewing and keeping data about specific applications, namely Chrome.exe, Firefox.exe, Acro32.exe and Winword.exe. The application name is always found in Column F. So, any cell contents found in Column F, that DOES NOT contain a value in an array, that entire row needs to be deleted. Ideally :) and the remaining rows will only include apps I'm interested in as defined in the array.



    Any thoughts would be appreciated.



    Thanks



    Public Function GetLastRow(ByVal rngToCheck As Range) As Long

    Dim rngLast As Range

    Set rngLast = rngToCheck.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious)

    If rngLast Is Nothing Then
    GetLastRow = rngToCheck.Row
    Else
    GetLastRow = rngLast.Row
    End If

    End Function

    Sub Apps_Formatting()

    Dim varList As Variant
    Dim lngLastRow As Long, lngCounter As Long
    Dim rngToCheck As Range, rngFound As Range
    Dim rngToDelete As Range, rngDifferences As Range
    Dim blnFound As Boolean

    Application.ScreenUpdating = False

    With ActiveSheet
    lngLastRow = GetLastRow(.Cells)

    'we don't want to delete our header row
    Set rngToCheck = .Range("A2:A" & lngLastRow)
    End With

    If lngLastRow > 1 Then

    With rngToCheck

    'any Cell in Column F that contains one of these values are KEPT
    'and if not found in cell, then the entire row is deleted.

    varList = VBA.Array("Chrome.exe", "Firefox.exe", "Acro32.exe")

    For lngCounter = LBound(varList) To UBound(varList)

    Set rngFound = .Find( _
    what:=varList(lngCounter), _
    Lookat:=xlWhole, _
    searchorder:=xlByRows, _
    searchdirection:=xlNext, _
    MatchCase:=True)

    'check if we found a value we want to keep
    If Not rngFound Is Nothing Then

    blnFound = True

    'if there are no cells with a different value then
    'we will get an error
    On Error Resume Next
    Set rngDifferences = .ColumnDifferences(Comparison:=rngFound)
    On Error GoTo 0

    If Not rngDifferences Is Nothing Then
    If rngToDelete Is Nothing Then
    Set rngToDelete = rngDifferences
    Else
    Set rngToDelete = Application.Intersect(rngToDelete, rngDifferences)
    End If
    End If

    End If

    Next lngCounter
    End With

    If rngToDelete Is Nothing Then
    If Not blnFound Then rngToCheck.EntireRow.Delete
    Else
    rngToDelete.EntireRow.Delete
    End If
    End If

    Application.ScreenUpdating = True

    End Sub









    share|improve this question


























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I'm super new to VBA and hoping I could get some help please ... I'm looking for a succinct way to remove rows from a sheet via Macro and the VBA samples I've tried I cant get to work. I'm hoping it's something simple :)



      The macro would remove a row that DOES NOT contain a specific values (from a specific column) from within an array. I sort of had it working, and full disclosure, I've borrowed code from other examples. The latest sample I'm working with just deletes everything, the other sample I was working with deleted Acro32.exe, but kept everything else. So not yet arrived at a solution.



      Background: I have a CSV output from an application auditing tool, which spits out tonnes of app data from various computers. That CSV data will be copied into my master 'reporting' spreadsheet. I am only interested in reviewing and keeping data about specific applications, namely Chrome.exe, Firefox.exe, Acro32.exe and Winword.exe. The application name is always found in Column F. So, any cell contents found in Column F, that DOES NOT contain a value in an array, that entire row needs to be deleted. Ideally :) and the remaining rows will only include apps I'm interested in as defined in the array.



      Any thoughts would be appreciated.



      Thanks



      Public Function GetLastRow(ByVal rngToCheck As Range) As Long

      Dim rngLast As Range

      Set rngLast = rngToCheck.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious)

      If rngLast Is Nothing Then
      GetLastRow = rngToCheck.Row
      Else
      GetLastRow = rngLast.Row
      End If

      End Function

      Sub Apps_Formatting()

      Dim varList As Variant
      Dim lngLastRow As Long, lngCounter As Long
      Dim rngToCheck As Range, rngFound As Range
      Dim rngToDelete As Range, rngDifferences As Range
      Dim blnFound As Boolean

      Application.ScreenUpdating = False

      With ActiveSheet
      lngLastRow = GetLastRow(.Cells)

      'we don't want to delete our header row
      Set rngToCheck = .Range("A2:A" & lngLastRow)
      End With

      If lngLastRow > 1 Then

      With rngToCheck

      'any Cell in Column F that contains one of these values are KEPT
      'and if not found in cell, then the entire row is deleted.

      varList = VBA.Array("Chrome.exe", "Firefox.exe", "Acro32.exe")

      For lngCounter = LBound(varList) To UBound(varList)

      Set rngFound = .Find( _
      what:=varList(lngCounter), _
      Lookat:=xlWhole, _
      searchorder:=xlByRows, _
      searchdirection:=xlNext, _
      MatchCase:=True)

      'check if we found a value we want to keep
      If Not rngFound Is Nothing Then

      blnFound = True

      'if there are no cells with a different value then
      'we will get an error
      On Error Resume Next
      Set rngDifferences = .ColumnDifferences(Comparison:=rngFound)
      On Error GoTo 0

      If Not rngDifferences Is Nothing Then
      If rngToDelete Is Nothing Then
      Set rngToDelete = rngDifferences
      Else
      Set rngToDelete = Application.Intersect(rngToDelete, rngDifferences)
      End If
      End If

      End If

      Next lngCounter
      End With

      If rngToDelete Is Nothing Then
      If Not blnFound Then rngToCheck.EntireRow.Delete
      Else
      rngToDelete.EntireRow.Delete
      End If
      End If

      Application.ScreenUpdating = True

      End Sub









      share|improve this question















      I'm super new to VBA and hoping I could get some help please ... I'm looking for a succinct way to remove rows from a sheet via Macro and the VBA samples I've tried I cant get to work. I'm hoping it's something simple :)



      The macro would remove a row that DOES NOT contain a specific values (from a specific column) from within an array. I sort of had it working, and full disclosure, I've borrowed code from other examples. The latest sample I'm working with just deletes everything, the other sample I was working with deleted Acro32.exe, but kept everything else. So not yet arrived at a solution.



      Background: I have a CSV output from an application auditing tool, which spits out tonnes of app data from various computers. That CSV data will be copied into my master 'reporting' spreadsheet. I am only interested in reviewing and keeping data about specific applications, namely Chrome.exe, Firefox.exe, Acro32.exe and Winword.exe. The application name is always found in Column F. So, any cell contents found in Column F, that DOES NOT contain a value in an array, that entire row needs to be deleted. Ideally :) and the remaining rows will only include apps I'm interested in as defined in the array.



      Any thoughts would be appreciated.



      Thanks



      Public Function GetLastRow(ByVal rngToCheck As Range) As Long

      Dim rngLast As Range

      Set rngLast = rngToCheck.Find(what:="*", searchorder:=xlByRows, searchdirection:=xlPrevious)

      If rngLast Is Nothing Then
      GetLastRow = rngToCheck.Row
      Else
      GetLastRow = rngLast.Row
      End If

      End Function

      Sub Apps_Formatting()

      Dim varList As Variant
      Dim lngLastRow As Long, lngCounter As Long
      Dim rngToCheck As Range, rngFound As Range
      Dim rngToDelete As Range, rngDifferences As Range
      Dim blnFound As Boolean

      Application.ScreenUpdating = False

      With ActiveSheet
      lngLastRow = GetLastRow(.Cells)

      'we don't want to delete our header row
      Set rngToCheck = .Range("A2:A" & lngLastRow)
      End With

      If lngLastRow > 1 Then

      With rngToCheck

      'any Cell in Column F that contains one of these values are KEPT
      'and if not found in cell, then the entire row is deleted.

      varList = VBA.Array("Chrome.exe", "Firefox.exe", "Acro32.exe")

      For lngCounter = LBound(varList) To UBound(varList)

      Set rngFound = .Find( _
      what:=varList(lngCounter), _
      Lookat:=xlWhole, _
      searchorder:=xlByRows, _
      searchdirection:=xlNext, _
      MatchCase:=True)

      'check if we found a value we want to keep
      If Not rngFound Is Nothing Then

      blnFound = True

      'if there are no cells with a different value then
      'we will get an error
      On Error Resume Next
      Set rngDifferences = .ColumnDifferences(Comparison:=rngFound)
      On Error GoTo 0

      If Not rngDifferences Is Nothing Then
      If rngToDelete Is Nothing Then
      Set rngToDelete = rngDifferences
      Else
      Set rngToDelete = Application.Intersect(rngToDelete, rngDifferences)
      End If
      End If

      End If

      Next lngCounter
      End With

      If rngToDelete Is Nothing Then
      If Not blnFound Then rngToCheck.EntireRow.Delete
      Else
      rngToDelete.EntireRow.Delete
      End If
      End If

      Application.ScreenUpdating = True

      End Sub






      excel vba






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 12 at 10:49









      Nick

      22.3k81535




      22.3k81535










      asked Nov 12 at 10:34









      nova

      1




      1
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          To follow up on this thread, should someone else benefit, the code below was provided and worked really well.



          Sub a1077712b()
          'https://www.mrexcel.com/forum/excel-questions/1077712-vba-remove-rows-xlsx-where-particular-text-can-found-within-cell.html
          Dim i As Long, r As Range
          Dim va As Variant, arr As Variant, flag As Boolean
          arr = Array("Chrome.exe", "Firefox.exe", "Acro32.exe", "Winword.exe")
          Set r = Range("F2", Cells(Rows.count, "F").End(xlUp))
          va = r

          For i = 1 To UBound(va, 1)
          flag = False
          For Each x In arr
          If InStr(1, va(i, 1), x, 1) > 0 Then flag = True: Exit For
          Next
          If flag = False Then va(i, 1) = ""
          Next

          r = va
          r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

          End Sub





          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%2f53260313%2fvba-remove-rows-from-xlsx-where-particular-text-can-be-found-within-a-cell%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            To follow up on this thread, should someone else benefit, the code below was provided and worked really well.



            Sub a1077712b()
            'https://www.mrexcel.com/forum/excel-questions/1077712-vba-remove-rows-xlsx-where-particular-text-can-found-within-cell.html
            Dim i As Long, r As Range
            Dim va As Variant, arr As Variant, flag As Boolean
            arr = Array("Chrome.exe", "Firefox.exe", "Acro32.exe", "Winword.exe")
            Set r = Range("F2", Cells(Rows.count, "F").End(xlUp))
            va = r

            For i = 1 To UBound(va, 1)
            flag = False
            For Each x In arr
            If InStr(1, va(i, 1), x, 1) > 0 Then flag = True: Exit For
            Next
            If flag = False Then va(i, 1) = ""
            Next

            r = va
            r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

            End Sub





            share|improve this answer

























              up vote
              0
              down vote













              To follow up on this thread, should someone else benefit, the code below was provided and worked really well.



              Sub a1077712b()
              'https://www.mrexcel.com/forum/excel-questions/1077712-vba-remove-rows-xlsx-where-particular-text-can-found-within-cell.html
              Dim i As Long, r As Range
              Dim va As Variant, arr As Variant, flag As Boolean
              arr = Array("Chrome.exe", "Firefox.exe", "Acro32.exe", "Winword.exe")
              Set r = Range("F2", Cells(Rows.count, "F").End(xlUp))
              va = r

              For i = 1 To UBound(va, 1)
              flag = False
              For Each x In arr
              If InStr(1, va(i, 1), x, 1) > 0 Then flag = True: Exit For
              Next
              If flag = False Then va(i, 1) = ""
              Next

              r = va
              r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

              End Sub





              share|improve this answer























                up vote
                0
                down vote










                up vote
                0
                down vote









                To follow up on this thread, should someone else benefit, the code below was provided and worked really well.



                Sub a1077712b()
                'https://www.mrexcel.com/forum/excel-questions/1077712-vba-remove-rows-xlsx-where-particular-text-can-found-within-cell.html
                Dim i As Long, r As Range
                Dim va As Variant, arr As Variant, flag As Boolean
                arr = Array("Chrome.exe", "Firefox.exe", "Acro32.exe", "Winword.exe")
                Set r = Range("F2", Cells(Rows.count, "F").End(xlUp))
                va = r

                For i = 1 To UBound(va, 1)
                flag = False
                For Each x In arr
                If InStr(1, va(i, 1), x, 1) > 0 Then flag = True: Exit For
                Next
                If flag = False Then va(i, 1) = ""
                Next

                r = va
                r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

                End Sub





                share|improve this answer












                To follow up on this thread, should someone else benefit, the code below was provided and worked really well.



                Sub a1077712b()
                'https://www.mrexcel.com/forum/excel-questions/1077712-vba-remove-rows-xlsx-where-particular-text-can-found-within-cell.html
                Dim i As Long, r As Range
                Dim va As Variant, arr As Variant, flag As Boolean
                arr = Array("Chrome.exe", "Firefox.exe", "Acro32.exe", "Winword.exe")
                Set r = Range("F2", Cells(Rows.count, "F").End(xlUp))
                va = r

                For i = 1 To UBound(va, 1)
                flag = False
                For Each x In arr
                If InStr(1, va(i, 1), x, 1) > 0 Then flag = True: Exit For
                Next
                If flag = False Then va(i, 1) = ""
                Next

                r = va
                r.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

                End Sub






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 15 at 11:09









                nova

                1




                1






























                    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.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • 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%2f53260313%2fvba-remove-rows-from-xlsx-where-particular-text-can-be-found-within-a-cell%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

                    List item for chat from Array inside array React Native

                    Thiostrepton

                    Caerphilly