2016-04-05 8 views
0

ここでは、私のコードは動作していますが、列全体を選択する代わりに、列3の後にすべての列を選択したい場合は、 列bをすべて選択してからB3の後に 私は意味があることを望みます。行3から始まる列全体を選択する方法 - vba

Sub HorizontalLoop() 
Dim lCol As Long 

Sheets("output").Select 
For lCol = 1 To 100 

Dim inputrange As String 
If Not IsEmpty(Cells(lCol).Value) Then 
inputrange = Cells(1, lCol).Value 

Cells(1, lCol).EntireColumn.Select 
Selection.Copy 
Sheets("input").Select 
ActiveSheet.range(inputrange).Select 
ActiveSheet.Paste 
Sheets("output").Select 
End If 
Next lCol 
End Sub 

すべてのヘルプは非常に高く評価されます:)あなたの目的地の範囲に おかげ H

+0

これは何度もSOに尋ねられました。または、あなたはGoogle XD – findwindow

+0

でそれを見つけることができますそれは何度も尋ねられている場合は謝罪しますが、あなたの新しいVBAは時々他の人々のコードで理解するのは難しい! – HushHoney

+0

迷惑になって申し訳ありません!しかし、助けてくれた皆さん、ありがとうございました – HushHoney

答えて

2

は(あなたの答えで)あなたのコードは、クリーンアップ少しです:

Sub HorizontalLoop() 
Dim lCol As Long 
Dim inputrange As String 
With Sheets("output") 
    For lCol = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column 
     If Not IsEmpty(.Cells(1, lCol).Value) Then 
      inputrange = .Cells(1, lCol).Value 
      .Range(.Cells(3, lCol), .Cells(.Rows.Count, lCol)).Copy Sheets("input").Range(inputrange) 
     End If 
    Next lCol 
End With 
End Sub 

.Select and .Activateを使用しないようにしてください。

また、2枚のシートを使用する場合は、適切な親子関係を確保することをお勧めします。対応ブロック.を持つWithブロックはこれを可能にします。

+0

ありがとうございました – HushHoney

0

変更A1のFindWindowの右@

Sub test() 

    Sheets("input").Range(Cells(3, "B") _ 
     , Cells(Sheets("input").Cells.Rows.Count, "B")).Copy Sheets("output").Range("A1") 

End Sub 
0

を - 何度も頼まれました。

は新しいシートを作成し、このコードを使用して、選択していることがあります:

ThisWorkbook.Worksheets("output").Cells(1, lcol).EntireColumn.Resize(Rows.Count - 3).Offset(3).Copy _ 
    Destination:=ThisWorkbook.Worksheets("input").Cells(4, 2) 

はそれが出力からコピーされますが

ThisWorkbook.Worksheets("output").Cells(1, lcol).EntireColumn.Resize(Rows.Count - 3).Offset(3).Select

かかわらシートを選択する必要はありません入力を選択する必要はありません。コード内のシートを参照するだけです。ここで

関連する問題