1: Ваш диапазон должен быть: Range("B6:B" & .Rows.Count)
2: Вы должны ограничить строки используемой областью Range("B6:B" & .UsedRange.Rows.Count)
3: чтобы выбрать только отфильтрованные ячейки, вам нужноadd .SpecialCells(xlCellTypeVisible)
Примерно так:
recipients = Join(Application.Transpose(.Range("B6:B" & .UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Value), ";")
4: вероятно, лучше использовать итерации в коде, а не использовать Transpose / Join: в противном случае вы можете получить ошибку, когда только1 адрес электронной почты отфильтрован, или электронные письма не видны.