2014-03-25 18 views
2

我有一些特定「服務」(例如鳥類調查)是否已針對特定站點執行的數據,其中「是」或「否」每項服務。按行「連接如果」的VBA用戶定義函數

E.G.

  • 列A包含站點名稱,說A,B,C,d和E與A2等

  • B列含有「伯德在A1的標題是 「網站名稱」,然後 「A」調查「,然後對B2-B6選擇」是「或」否「。

  • 同上C,D和E欄中的其他服務可以分別說「蝙蝠調查」,「LVI」和「土地註冊處」。

  • 在F我想連接包含「是」的每一行的服務名稱。例如。可以說B2,C2,D2和E2的值是「是」,「是」,「否」和「是」,我希望F2包含鳥類調查,蝙蝠調查。

據我瞭解有在Excel中沒有本機功能,可以做到這一點,所以我一直在試圖建立在VBA用戶定義的函數。我已經試過兩種方法

    基於餵養兩個範圍(列名和行的「是/否」的)到UDF,然後將這些組合成一個陣列
  • 一個應用某種查找條件

  • 和另一個從一個是/否範圍返回列字母,然後才根據列字母從列名選擇。

雖然我還沒有得到任何工作。請注意,最後我需要創建一個適用於不同數量服務的UDF,它們不會像本例中那樣被預先定義。

有什麼建議嗎?

非常感謝提前。

+1

有助於將您嘗試的代碼添加到您的問題 - 即使它不起作用。 –

+0

有幾個問題......(1)給出你的例子「EG可以說B2,C2,D2和E2的值是」是「,」是「,」否「和」是「,我希望F2包含鳥調查,蝙蝠調查「。 - 是否應該說「鳥類調查,蝙蝠調查,土地註冊處」? (2)你是否被限制爲「是」/「否」,或者它是(1/0)還是(True/False)? –

+0

Woops,對不起,對,你說得對,它的確應該說「鳥類調查,蝙蝠調查,土地登記」。也可以根據您的建議更改爲不同的二進制條件,(1/0)或(True/False)。 – vbastrangledpython

回答

7

基於你在找什麼,我很早以前就發現了這個功能,它的工作魅力:

Function ConcatenateIf(CriteriaRange As Range, Condition As Variant, _ 
     ConcatenateRange As Range, Optional Separator As String = ",") As Variant 
    Dim i As Long 
    Dim strResult As String 
    On Error GoTo ErrHandler 
    If CriteriaRange.Count <> ConcatenateRange.Count Then 
     ConcatenateIf = CVErr(xlErrRef) 
     Exit Function 
    End If 
    For i = 1 To CriteriaRange.Count 
     If CriteriaRange.Cells(i).Value = Condition Then 
      strResult = strResult & Separator & ConcatenateRange.Cells(i).Value 
     End If 
    Next i 
    If strResult <> "" Then 
     strResult = Mid(strResult, Len(Separator) + 1) 
    End If 
    ConcatenateIf = strResult 
    Exit Function 
ErrHandler: 
    ConcatenateIf = CVErr(xlErrValue) 
End Function 

鑑於你的問題,它會被用來如下:

=ConcatenateIf(B2:E2,"yes",$B$1:$E$1,", ") 

初始積分爲this link

希望這樣做的竅門!

+0

這是完美的工作,非常感謝! – vbastrangledpython

+1

不錯的答案,祝賀5k :) –

相關問題