Szia!
Egy lehetőség, logikai szinten leírva:
Az első előfordulást beteszed a munkalap következő sorába. A következő előfordulásnál megkeresed, hol van a munkalapon, megnézed a másik változó értéke milyen, ha nagyobb, akkor kicseréled a sort az újra, ha nem, akkor hagyod békében.
Ezt csinálod végig a fájlon.
Előny, hogy akkor is használható, ha a csv fájlban nem sorban vannak az ID-k.
A munkalapon kereshetsz a Range.Find metódussal vagy kereső függvényekkel egyaránt.
A beolvasásnál a kinput változóban a teljes sor kerül. Ebből neked kell meghatározni, hol az id és a számodra szükséges változó adata. Ha tudod, hogy hanyadik oszlopban van, akkor pl. használhatod a Split függvényt, amelyik a megadott határoló (pl. pontosvessző - ; - ) szerint egy tömbbe transzformálja a szöveget. A tömb indexe 0-val indul. Innen már meg tudod kapni a keresett adatokat.
Egy példa:
Sub beolvaso()
Dim utja As String, fnev As String, kinput As String, fc As Byte, cl As Range, bejott, holvan As Range
utja = "C:\Users\user\Documents"
fnev = "\xxx.csv"
fc = FreeFile()
Open utja & fnev For Input As #fc
Set cl = ActiveSheet.Cells(1, 1) 'az aktív munkalap első cellájába kerül az első adat
'ha nem ide szeretnéd, akkor változtasd meg a Cells paramétereit
Do While Not EOF(fc)
Line Input #fc, kinput
bejott = Split(kinput, ";") 'egy tömbbe transzformáljuk a bejött adatot
'megkeressük az azonosítót az első oszlopban. Ha nem ide tetted, akkor írd át az oszlop számát
'ha nem az input első adata az ID akkor bejott(0) paraméterét írd át a megfelelő oszlopra
Set holvan = ActiveSheet.Columns(1).Find(what:=bejott(0), LookIn:=xlValues, lookat:=xlWhole)
If holvan Is Nothing Then 'ha még nincs, akkor bejegyezzük az első szabad sorba
'cl.Value = kinput 'ez a sor egy cellába tenné a teljes inputot
Range(cl, cl.Offset(0, UBound(bejott))).Value = bejott ' így viszont külön cellába kerülnek az értékek
Set cl = cl.Offset(1, 0) 'ez lesz a következő üres sor első cellája
Else
If holvan.Offset(0, 2).Value < bejott(2) Then 'ha a változó nem a második az adatok között, akkor
'mindkét 2-est írd át megfelelőre - az offset és a tömb paramétere is 0-tól indul.
Range(holvan, holvan.Offset(0, UBound(bejott))).Value = bejott 'kicseréljük az újra
End If
'MsgBox kinput
End If
Loop
Close #fc
MsgBox "Az input kész!"
End Sub
Remélem, sikerül.
Üdv.