2017-11-05 18 views
0

2つの範囲を結合し、コンマ区切りリストとして用語の完全なリストを結合しようとしています。VBA:範囲を結合して文字列に結合する

両方の範囲は用語リストです。つまり、ManualTagsはA1:A5で、tag1, tag2, tag3などです。ダイナミックタグは同じ種類のリストですが、別の言葉はB1:B10にあります。

だから私はこのようにそれを呼びたい:SEARCHFORTAGS(A1:A5, B1:B10)

これは動作します:

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ") 
End Function 

とリターンを:"tag1, tag2, tag3, etc"

しかし、私は最初にして、タグの2種類を組み合わせてみてくださいそれを結合する、それは失敗する。私はここで間違っているつもりです#VALUE!

を返し

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    joinedTags = Union(ManualTags, DynamicTags) 
    SEARCHFORTAGS = Join(Application.Transpose(joinedTags.Value), ", ") 
End Function 

+0

'Transpose'は、セルの垂直範囲を水平範囲に変換します。逆もまた同様です。 10行×1列の範囲で5行×1列の範囲の「連合」を実行すると、「垂直」範囲**または**「水平」範囲がないため、そうではありません。あなたのように行く。 – YowE3K

答えて

1

Transposeメソッドがエラー1004「WorksheetFunctionクラスのTransposeプロパティを取得できません」が複数領域の範囲を渡すときに失敗します。

複数の範囲の範囲は、Unionメソッドによって生成されます。渡された各範囲限り、

お使いの場合には
Dim unionArea As Excel.Range 
For Each unionArea In joinedTags.Areas 
    Debug.Print unionArea.Address 
Next 

は、この機能は動作します:あなたのラインjoinedTags = Union(ManualTags, DynamicTags)の下に追加された次のコードは、エリアのコレクションを反復処理し、デバッグウィンドウ内の各項目のアドレスを表示します。引数は単一領域であり、列が1つだけです。

Function SEARCHFORTAGS(ManualTags As Range, DynamicTags As Range) 
    SEARCHFORTAGS = Join(Application.Transpose(ManualTags.Value), ", ") & ", " & Join(Application.Transpose(DynamicTags.Value), ", ") 
End Function 
関連する問題