Requirement:
The user has two worksheets in a workbook.
Master Sheet
| C | D | E |
| Apple | 100 | No |
| Banana | 85 | Yes |
| Lemon | 11 | Yes |
| Kiwi | 165 | No |
Update Sheet
| C | D | E |
| Apple | 34 | Yes |
| Kiwi | 165 | Yes |
The user wants to update the record in Master sheet from the Update sheet, so after the update the records in Master sheet will look like this
Master Sheet
| C | D | E |
| Apple | 34 | Yes |
| Banana | 85 | Yes |
| Lemon | 11 | Yes |
| Kiwi | 165 | Yes |
Example, a comparison will be done based on column C in both Master and Update sheet, if a match is found, it will overwrite the entire row in Master sheet. The user had written a portion of the code, and the user seems to be stuck in how to overwrite the entire row.
Sub fruitUpdate()
Dim rangeUpdt, rangeMstr As Range
Dim ws1, ws2 As Worksheet
Set ws1 = Worksheets("Master")
Set ws2 = Worksheets("Fruit Update")
On Error Resume Next
With ws1
Set rangeMstr = .Range("C4", .Range("C" & Rows.Count).End(xlUp)) 'records start at C4
End With
With ws2
Set rangeUpdt = .Range("C10", .Range("C" & Rows.Count).End(xlUp)) 'records start at C10
End With
If rangeMstr = rangeUpdt Then 'overwrite, copy to masterlist (here's the part that I stuck)
End If
End Sub
Solution:
Sub FruitUpdate2()
Dim rangeUpdt, rangeMstr As Range
Dim ws1, ws2 As Worksheet
Dim c As Range
Dim res As Variant
Set ws1 = Worksheets("Master")
Set ws2 = Worksheets("Fruit Update")
With ws1
Set rangeMstr = .Range("C4", .Range("C" & Rows.Count).End(xlUp)) 'records start at C4
End With
With ws2
Set rangeUpdt = .Range("C10", .Range("C" & Rows.Count).End(xlUp)) 'records start at C10
End With
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' Ideally Both Ranges should start in Row 2 ....'''''''''''''''''''''''''''''''''''''''''
''' otherwise you have to adjust for the Offset ... in this case + 9 ''''''''''''''''''''''
For Each c In rangeMstr
res = Application.Match(c, rangeUpdt, 0)
If Not IsError(res) Then
c.Offset(0, 1) = ws2.Range("D" & res + 9)
c.Offset(0, 2) = ws2.Range("E" & res + 9)
End If
Next c
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End Sub
Obtained from the OzGrid Help Forum.
Solution provided by Carim.
Click here to visit our Free 24/7 Excel/VBA Help Forum where there are thousands of posts you can get information from, or you can join the Forum and post your own questions.