Вам нужно изменить диапазон, который вы копируете, поэтому вместо копирования полной строки вам нужно просто скопировать нужные столбцы
Не могли бы вы попробовать с этими строками?
Sheets(sheetToSearch).Range("a" & LSearchRow, "h" & LSearchRow).Copy
'Paste row into Sheet2 in next row
Sheets(sheetTarget).Range("a" & LCopyToRow).PasteSpecial Paste:=xlPasteValues
Sheets(sheetTarget).Range("a" & LCopyToRow).PasteSpecial Paste:=xlFormats
Дляизбегая перезаписи "A3" при изменении "ID", не могли бы вы попробовать заменить начало "sub" этим?
Sub matchandcopy()
Dim LCopyToRow As Integer
Dim sheetTarget As String: sheetTarget = "sheet1"
Dim sheetToSearch As String: sheetToSearch = "LIST2"
Dim targetValue As String: targetValue = Sheets(sheetTarget).Range("A1").Value 'Value in sheet2!A1 to be searched in sheet1
Dim columnToSearch As String: columnToSearch = "A"
Dim iniRowToSearch As Integer: iniRowToSearch = 2
Dim LSearchRow As Long 'As far as it is not clear the number of rows you will be considering, better relying on the long type
Dim maxRowToSearch As Long: maxRowToSearch = 2000 'There are lots of rows, so better setting a max. limit
LCopyToRow = Sheets(sheetTarget).Range("a1").End(xlDown).Row + 1
If LCopyToRow > 100000 Then LCopyToRow = 3
If (Not IsEmpty(targetValue)) Then 'here goes the rest of the sub with no changes ....