2012-03-05 7 views
3

VBAでコレクションに参加するにはどうすればよいですか? VB.netで私は通常(...、「区切り)を参加使って、配列に参加するが、私はVBAで、この使用して収集を行う方法を見つけ出す傾ける。VBA集計に対応する作品

Dim oColl As New Collection 
Dim r As Range 

Set r = ThisWorkbook.Sheets("Work1").Range("D13:D263") 

For Each cell In r 
    If IsEmpty(cell) Then 

    Else 
     oColl.Add ("a = ''" + cell.Text + "'' ") 
    End If 
Next 

私は今にすべてのコレクションの値に参加する必要があります1つの文字列

+0

は、あなたのコレクションのサンプルを投稿することができます – brettdj

+0

私は例のコレクション – karlstackoverflow

答えて

0

は、私は単純に文字列のプレースホルダを宣言し、コレクション内の項目のそれぞれの中で、私は、出力単一の文字列プレースホルダの結果を、文字列に追加し、自分の質問を解決しました。

5

あなたが持っているがあなたのコードをスピードアップできるあなたの質問を解決してください。

  1. 各セルは、
  2. むしろ試験よりも非ブランクで動作するようにSpecialCellsを用いて以下のコードは一緒に最終的な文字列をマージするJoinを使用バリアント配列はなく、範囲ループ

を使用します。あなたは文字列操作("a = ''" + cell.Text + "'' "部分)を持っていなかったなら、あなたは単にspecialcellsは、ステップ1

SpecialCellsコレクションと単一細胞内の複数の領域を処理するように更新(文句を言わない仕事は「varinats

から及ぶ参加することができ
Sub Diff() 
Dim rng1 As Range 
Dim rng2 As Range 
Dim varTest 
Dim strOut As String 
Dim lngrow As Long 
On Error Resume Next 
With Range("D13:D263") 
    Set rng1 = .SpecialCells(xlCellTypeConstants) 
    If Not rng1 Is Nothing Then 
     Set rng1 = Union(rng1, .SpecialCells(xlCellTypeFormulas)) 
    Else 
     Set rng1 = .SpecialCells(xlCellTypeFormulas) 
    End If 
End With 
On Error GoTo 0 
If rng1 Is Nothing Then Exit Sub 
For Each rng2 In rng1.Areas 
    If rng2.Cells.Count > 1 Then 
     varTest = Application.Transpose(rng2) 
     For lngrow = 1 To UBound(varTest) 
      varTest(lngrow) = "a = ''" & varTest(lngrow) & "'' " 
     Next 
     strOut = strOut & Join(varTest, ",") 
    Else 
     strOut = strOut & "a = ''" & rng2.Value & "'' " 
    End If 
Next 
MsgBox strOut 
End Sub 
+2

+1食品投書regardiを追加しました'SpecialCells'と' Union' –

+0

+1特殊なセルの使用のための+1が、私はコードが常に動作するとは思わない、あなたはapplication.Transpose非連続配列を空白があればrng1は非連続。 – SWa

+0

@kyle good pick-up。私はこれと潜在的な単一細胞の問題を更新しました。あなたが実際にそれをアップアップしましたか?まだ1になっていますか? :) – brettdj

2

別の方法:?。

joinedString = "a='" & Replace(Join(Application.Transpose(Sheet1.Range("D13:D263").Value), "',a='"), ",a=''", "") 
+0

+1は巧みに私の努力を過剰にしてしまった。おそらく最後に余分な価値を調整してください。名声 – brettdj

関連する問題