Se il tuo codice funziona ok, è una bella soddisfazione per te, però tieni conto che per un volume di numeri grande è assolutamente inefficiente, soprattutto per il fatto che il file2 lo apri e lo scansioni per ogni numero di file1
La soluzione di Euscar è buona, ma come ha detto anche lui non è validissima per numeri alti poichè crea un array sovradimensionato.
Eccoti come farei io, usando un Dictionary, probabilmente anche questa non è la soluzione migliore, ma non ci ho pensato più di tanto.
Il file2.txt viene letto una volta sola e viene creato un Dictionary (o chiamata anche Map)
Ovviamente poi il file risultato lo puoi formattare come vuoi tu, io ho fatto solo un esempio
Dim dict = New Dictionary(Of Integer, Integer)
' faccio la scansione di file2.txt e mi creo una mappa
For Each trova As String In System.IO.File.ReadAllLines("c:\Archivio\file2.txt")
Dim num = Integer.Parse(trova.Replace(";", ""))
If dict.ContainsKey(num) Then
dict(num) += 1
Else
dict.Add(num, 1)
End If
Next
' ora, in base a file1.txt estraggo solo i dati che mi interessano
Dim sb = New System.Text.StringBuilder
For Each trovanumero As String In System.IO.File.ReadAllLines("c:\Archivio\file1.txt")
Dim num = Integer.Parse(trovanumero.Replace(";", ""))
If dict.ContainsKey(num) Then
sb.Append(num.ToString).Append("=").AppendLine(dict(num).ToString)
Else
sb.Append(num.ToString).Append("=").AppendLine("0")
End If
Next
My.Computer.FileSystem.WriteAllText("c:\Archivio\risultato.txt", sb.ToString, True)