I want to insert rows from an excel table into a 'results' sheet if the values in column A of the table match a value specified by the user on the results sheet.
Firstly I would like to ask if there is a more efficient way to do this than what I have embarked on, and if not I would appreciate some help with my attempt.
I was planning on the following
- sorting the data table by column A so that if new items have been added they appear in alphabetical order
- Using WorksheetFunction.CountIf to determine the number of rows matching the criteria & setting this as a variable
- Using WorksheetFunction.Match to find the first matching Row & setting this value as a variable
using established variables to copy the relevant values over to the results tab
Sub CheckPrevious() Dim RowCount As Integer Dim FirstRow As Integer Dim Rng As Range Dim MatchRng As Range Dim MatchItem As Variant Rng = Sheets("Database").Range("A1:P200") MatchRng = Sheets("Database").Range("A1:A200") MatchItem = Sheets("Menu").Range("C9") RowCount = WorksheetFunction.CountIf(Worksheets("Database").Range("A:A"), _ Worksheets("Menu").Range("C9").Value) FirstRow = WorksheetFunction.Match(MatchRng, MatchItem, 0) Sheets("Pricing").Range("A2:E6").ClearContents Worksheets("Database").AutoFilter.Sort.SortFields.Clear Worksheets("Database").AutoFilter.Sort.SortFields.Add Key:= _ Range("A1:A7"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ xlSortNormal With ActiveWorkbook.Worksheets("Database").AutoFilter.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With If RowCount > 1 Then Sheets("Pricing").Range("A2").Value = Worksheets("Database").Range("A" & FirstRow).Value Sheets("Pricing").Range("B2").Value = Worksheets("Database").Range("B" & FirstRow).Value Sheets("Pricing").Range("C2").Value = Worksheets("Database").Range("C" & FirstRow).Value Sheets("Pricing").Range("D2").Value = Worksheets("Database").Range("D" & FirstRow).Value Sheets("Pricing").Range("E2").Value = Worksheets("Database").Range("E" & FirstRow).Value FirstRow = FirstRow + 1 End If If RowCount > 2 Then Sheets("Pricing").Range("A3").Value = Worksheets("Database").Range("A" & FirstRow).Value Sheets("Pricing").Range("B3").Value = Worksheets("Database").Range("B" & FirstRow).Value Sheets("Pricing").Range("C3").Value = Worksheets("Database").Range("C" & FirstRow).Value Sheets("Pricing").Range("D3").Value = Worksheets("Database").Range("D" & FirstRow).Value Sheets("Pricing").Range("E3").Value = Worksheets("Database").Range("E" & FirstRow).Value FirstRow = FirstRow + 1 End If If RowCount > 3 Then Sheets("Pricing").Range("A4").Value = Worksheets("Database").Range("A" & FirstRow).Value Sheets("Pricing").Range("B4").Value = Worksheets("Database").Range("B" & FirstRow).Value Sheets("Pricing").Range("C4").Value = Worksheets("Database").Range("C" & FirstRow).Value Sheets("Pricing").Range("D4").Value = Worksheets("Database").Range("D" & FirstRow).Value Sheets("Pricing").Range("E4").Value = Worksheets("Database").Range("E" & FirstRow).Value FirstRow = FirstRow + 1 End If If RowCount > 4 Then Sheets("Pricing").Range("A5").Value = Worksheets("Database").Range("A" & FirstRow).Value Sheets("Pricing").Range("B5").Value = Worksheets("Database").Range("B" & FirstRow).Value Sheets("Pricing").Range("C5").Value = Worksheets("Database").Range("C" & FirstRow).Value Sheets("Pricing").Range("D5").Value = Worksheets("Database").Range("D" & FirstRow).Value Sheets("Pricing").Range("E5").Value = Worksheets("Database").Range("E" & FirstRow).Value FirstRow = FirstRow + 1 End If End Sub
Am currently getting a type mismatch error on my WorksheetFunction.Match
Thanks in advance for any help!


