You could even put it inside of it's own Sub:
vbnet Code:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
CalcTotals(ListView1, ListView2)
End Sub
Private Enum ReturnValue
Positive
Negative
End Enum
Private Sub CalcTotals(InputListView As ListView, OutputListView As ListView)
Dim ListGroups As IEnumerable(Of IGrouping(Of String, ListViewItem)) _
= InputListView.Items.Cast(Of ListViewItem).GroupBy(Function(Obj) String.Format("{0},{1}", Obj.Text, Obj.SubItems(2).Text))
Dim LVIs As ListViewItem() = (From G As IGrouping(Of String, ListViewItem) In ListGroups
Let Arr As String() = G.Key.Split(","c)
Let Total As Integer = ReturnTotal(G, ReturnValue.Positive) - ReturnTotal(G, ReturnValue.Negative)
Select New ListViewItem(New String() {Arr(0), CStr(Total), Arr(1)})).ToArray
OutputListView.Items.AddRange(LVIs)
End Sub
Private Function ReturnTotal(IG As IGrouping(Of String, ListViewItem), ReturnVal As ReturnValue) As Integer
Dim ItemIsPositive As Func(Of ListViewItem, Boolean) = Function(LVI) LVI.ForeColor = Color.Green
Dim ItemIsNegative As Func(Of ListViewItem, Boolean) = Function(LVI) LVI.ForeColor = Color.Red
Dim intVals As IEnumerable(Of Integer) = If(ReturnVal = ReturnValue.Positive, IG.Where(ItemIsPositive), IG.Where(ItemIsNegative)).Select(Function(LVI) Integer.Parse(LVI.SubItems(1).Text))
Return If(intVals.Count > 1, intVals.Aggregate(Function(a, b) a + b), intVals(0))
End Function
Cheers 
~Ace