Rather than build a discontinuous range (with way more columns than a listbox)
For Each oCell In rng1
If oCell.Value = "y" Then
With oCell.EntireRow
.AddItem .Range("A1").Value
ListBox1.List(ListBox1.ListCount - 1, 1) = .Range("B1").Value
ListBox1.List(ListBox1.ListCount - 1, 2) = .Range("C1").Value
ListBox1.List(ListBox1.ListCount - 1, 3) = .Range("D1").Value
End With
End If
Next oCell
The stopping at the first "n" is because the range you are building is discontinuous and only the first Area of that range is getting to the listbox.