2016-09-05 8 views
0

私はExcelファイルを持っており、リストボックスにすべての列見出しを項目として追加しています。今、私が達成したいのは、リストボックスで複数の項目を選択したときに、対応する列をコピーして別のワークブックに貼り付けることです。VBA MACRO - Excelで列を動的に選択するListBoxを使用して

私は今すぐこのコードを持っています。リストボックスから選択した最初の列のみをコピーして貼り付けることができます。誰かが私を助けてくれることを願っている

Private Sub CommandButton1_Click() ' generate result 

Dim wkb As Workbook 
Dim rng As Range 
Dim cl As Object 
Dim strMatch As String 
Dim Size As Integer 
Dim lRow As Long, lCol As Long 
Dim rng1 As Range 
Dim rng2 As Range 
Dim rng3 As Range 

Set rng1 = Cells.Find("*", [a1], xlFormulas, , xlByRows, xlPrevious) 
Set rng2 = Cells.Find("*", [a1], xlFormulas, , xlByColumns, xlPrevious) 
Set rng3 = Range([a1], Cells(rng1.Row, rng2.Column)) 

strMatch = ListBox2.List(0) 'Copying Respondent Number 
Set rng = Range("A1:Z1") 
For Each cl In rng 
    If cl.Value = strMatch Then 
     cl.EntireColumn.Copy 'Copy Selected Column 
     Set wkb = Workbooks.Add 'Adding New Workbook 
     ActiveSheet.Paste 'Paste Selected Column 
     Exit For 
    End If 
Next cl 

End Sub 
+1

を試すことができ、あなたのリストボックスのListIndexは、私は正しいよ、worksheet.columns(インデックス) –

+0

はい@Nathan_Savに相関関係になります。 – alejandraux

+0

これはヒントであり、検索する必要はなく、インデックスを使用してコピーする列を作成するだけです。 –

答えて

0

あなたはあなたの説明で、この

Option Explicit 

Private Sub CommandButton1_Click() 
    Dim i As Long 
    Dim colsIndexStrng As String 
    Dim copyRng As Range 

    With Me.ListBox2 
     For i = 0 To .ListCount - 1 
      If .selected(i) Then colsIndexStrng = colsIndexStrng & Cells(1, i + 1).Address(False, False) & "," 
     Next i 
    End With 

    If colsIndexStrng = "" Then Exit Sub 

    Set copyRng = Range(Left(colsIndexStrng, Len(colsIndexStrng) - 1)).EntireColumn 
    With Workbooks.Add 
     copyRng.Copy ActiveSheet.Range("A1") 
    End With 
    ActiveWorkbook.Close True 
End Sub 
+0

あなたは大歓迎です。受け入れられたと答えてください。ありがとうございます – user3598756

+0

あなたのご協力ありがとうございます。私はちょうど今観察した。このコードは正常に動作しますが、実際にリストボックスから選択した列はコピーされません。リストボックスで選択したアイテムに対応する列をコピーする方法を見つけるのを助けてくれることを願っています。ありがとうございました ! – alejandraux

+0

私は間違って私の間違いです。それはすでに動作します。私はちょうど私のリストのスタイルを変更し、それはすでに私に完全にうまく動作します。あなたの大きな助けをありがとう!あなたは本当にその日を救う! – alejandraux

0

修正を提案しました。これにより、選択した列ごとに1つのワークブックが作成されます。

Private Sub CommandButton1_Click() ' generate result 
Dim rng As Range 
Dim cl As Object 
Dim strMatch As String 
Dim , i As Integer 
Dim lCol As Long 
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 
For i = 0 To ListBox1.ListCount - 1 
strMatch = ListBox1.List(i) 'Copying Respondent Number 
Set rng = Range(Cells(1, 1), Cells(1, lCol)) 
Set cl = rng.Find(strMatch, lookat:=xlWhole) 
If Not cl Is Nothing Then 
     cl.EntireColumn.Copy 'Copy Selected Column 
     Set wkb = Workbooks.Add 'Adding New Workbook 
     ActiveSheet.Paste 'Paste Selected Column 
End If 
Next i 
End Sub 
+0

このコードを試しましたが、「オブジェクトが必要です」というエラーが表示されます。とにかく、助けをありがとう – alejandraux

+0

@alejandraux私はいくつかの訂正をしました – h2so4

関連する問題