2014-01-14 4 views
-3

Я пытаюсь создать строку с использованием VBA, которая включает все видимые значения после фильтрации в ячейках B8-B1129, разделенных точкой с запятой. Может ли кто-нибудь помочь мне в этом?Добавление нескольких значений из отфильтрованного списка в строку, которая затем будет использоваться для создания списка адресов электронной почты

+4

У вас пытался какой-то код? –

+0

Ознакомьтесь с http://stackoverflow.com/questions/8934184/excel-vba-build-a-comma-delimited-string, 's = join (Application.WorksheetFunction.Transpose ([b8: b41129]),"; ") ' – Blackhawk

+0

... или любые другие попытки/исследования (VBA не требуется для создания такой строки)? – pnuts

ответ

0

Если фильтр уже применяется, вы можете использовать следующий код (результат сохраняется в ячейке C2):

Sub test() 
    Dim rng As Range 
    Dim res As String 
    Dim c As Range 

    On Error Resume Next 
    'change "Sheet1" to your cheet name' 
    With ThisWorkbook.Sheets("Sheet1") 
     Set rng = .Range("B8:B1129").Rows.SpecialCells(xlCellTypeVisible) 

     For Each c In rng 
      If Not ISEmpty(c) Then res = res & c.Value & ", " 
     Next 
     res = Left(res, Len(res) - 2) 

     .Range("C2") = res 
    End With 

End Sub 

или вы можете применить автофильтра непосредственно из VBA:

Sub test() 
    Dim rng As Range 
    Dim res As String 
    Dim c As Range 

    On Error Resume Next 

    'change "Sheet1" to your cheet name' 
    With ThisWorkbook.Sheets("Sheet1") 
     .AutoFilterMode = False 
     .Range("B1").AutoFilter Field:=1, Criteria1:="=*searchText*" 

     Set rng = .Range("B8:B1129").Rows.SpecialCells(xlCellTypeVisible) 

     For Each c In rng 
      If Not ISEmpty(c) Then res = res & c.Value & ", " 
     Next 
     res = Left(res, Len(res) - 2) 

     .Range("C2") = res 
    End With 

End Sub 

 Смежные вопросы

  • Нет связанных вопросов^_^