2017-01-04 7 views
1

私は既存の関数を持っていますが、これはうまくいきますが、フィールドを削除する条件を追加したいと思います。空白のフィールドと重複を削除するためのVBA SSRSコード

Public Shared Function RemoveDuplicates(ByVal items As Object()) As String() 
    System.Array.Sort(items) 
    Dim k As Integer = 0 
    For i As Integer = 0 To items.Length - 1 
     If i > 0 AndAlso items(i).Equals(items(i - 1)) Then 
      Continue For 
     End If 
     items(k) = items(i) 
     k += 1 
    Next 
    Dim unique As [String]() = New [String](k - 1) {} 
    System.Array.Copy(items, 0, unique, 0, k) 
    Return unique 
End Function 

かいつまんで、私は次のようになります。Lookupset

基本的に
=Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Value &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Value, "DataSet1")), "/") 

私は取得しています結果内にこれを使用しています: /パートナー /蘭

20代ください助けて!

+0

あなたのIF文に 'AND items(i)!=" "'を追加できませんか? – StevenWhite

+0

パブリック共有関数RemoveDuplicates(ByValアイテムをObject())As String() System.Array.Sort(items) Dim k As Integer = 0 i Integer = 0 To items.Length - 1 i> 0 AndAlso項目(I).Equals(項目(I - 1))!そして項目(I)= "" その後 終了を続行 項目(K)=項目(I) Kの場合+ = 1 次 最終機能 これは私のためにエラーが発生しました。 。 – a415

+0

ああ、VBAでは、不等式演算子は '<>'です。しかし、それをもう一度見て、私たちはそれが「OR」条件であることを望む。つまり、空白の場合はスキップします。 – StevenWhite

答えて

0

(1,1)を使用して機能を交換しましたエラー。重複したデータセットを作成し、空白の値をすべて削除して、.Remove(1,1)を付けずにLookupを実行しました。それは私のためのトリックをしたようだった。

= Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet4")), "/") 

これはトリックでした。

0

IIf()関数で関数をラップすると、remove(1,1)エラーを防止できます。この方法では、文字列に2文字以上ある場合にのみ、文字列から2文字目を削除します。

だからあなたの関数が

IIf(Len(Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), "/")) >= 2, Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), "/").Remove(1,1), Join(Code.RemoveDuplicates(LookupSet(Fields!Fund_Family.Val‌​ue &Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Valu‌​e & Fields!Portfolio_Company_Name.Value,Fields!Security_Name.Val‌​ue, "DataSet1")), "/")) 

この読みやすくするためになるだろう、私が述べ.Removeを防止するためにCustomFunction()

IIf(Len(CustomFunction()) >= 2, CustomFunction().Remove(1,1), CustomFunction()) 
+0

それは私にとってもうまくいきませんでした。それは私にルックアップがないエラーを与える。 – a415

関連する問題