2016-05-25 14 views
1

週ごとのレポートを整形して作成するマクロを作成しようとしています。 移動する必要がある5つの列があります:Key、Summary、Created、Status、Fix Version/s。Excel VBA:行と列のヘッダーに基づいて選択範囲をコピーアンドペーストする

キー列の行2で始まり、修正バージョン/列の最後の行で終了し、「優先度の問題」というシートに貼り付けられる選択をコピーする必要があります。私はこの特定の選択をコード化する方法が不明です。

最後の行が週ごとに変わる可能性があるため、最後の行を変数に格納する必要があります。本質的には、2行目とKey列の交差点から最後の行とFix Version/s列の交差点までの選択を可能にするコードを探していますが、その方法はわかりません。

Function FindCol(toFind As String) As Range 
Dim Rtn As Range 
Set Rtn = Rows(1).Find(What:=toFind, LookIn:=xlValues, _ 
      LookAt:=xlWhole, MatchCase:=True) 
Set FindCol = Rtn 
End Function 

Sub Move_Severity() 
Dim Severity As Range 
Dim Key As Range 
Dim Fix_Version As Range 
Dim LastRow As Long 

Set Severity = FindCol("Severity") 
Set Key = FindCol("Key") 
Set Fix_Version = FindCol("Fix Version/s") 
LastRow = Cells(Rows.Count, Severity.Column).End(xlUp).Row 

'This is where I am running into problems 
Range(Cells(2, Key), Cells(LastRow, Fix_Version)).Copy 
Sheets("Priority Issues").Range("A2").Paste 
End Sub 
+0

Range'として '薄暗いFix_VersionへWith-End Withの部分は、あなたが'細胞(LASTROW行うことを変更、Fix_Version) 'しかし、' cells'は範囲にない数を必要とします。私は関数が適切に動作すると推測しますか?編集:2つのオプションがあります。列番号を返す関数を変更するか、変数を長く設定し、 'FindCol(" Key ")。column'を実行します。 – findwindow

+0

'FindCol'では、代わりにこれは必要ありませんか? 'Set FindCol = Rtn.Column'? – BruceWayne

+0

バットマン、それは範囲を返します。編集:しかし、はい、列番号を返すことに意味があります^^ – findwindow

答えて

1
Sub Move_Severity() 
Dim Severity As Range 
Dim Key As Range 
Dim Fix_Version As Range 
Dim LastRow As Long 

Set Severity = FindCol("Severity") 
Set Key = FindCol("Key") 
Set Fix_Version = FindCol("Fix Version/s") 

With ActiveSheet '<~~ change active sheet reference to whatever must it be 
    .Range(.Cells(2, Key.Column), .Cells(.Rows.Count, Severity.Column).End(xlUp)).Copy Destination:=Sheets("Priority Issues").Range("A2") 
End With 

End Sub 

あなたは値だけを貼り付ける必要がありますする必要があり、その後もはるかに高速である

With ActiveSheet 
    With .Range(.Cells(2, Key.Column), .Cells(.Rows.Count, Severity.Column).End(xlUp)) 
     Sheets("Priority Issues").Range("A2").Resize(.Rows.Count, .Columns.Count).Value = .Value 
    End With 
End With 

+0

オースナッ​​プ。私のアイデアよりもスマートです^^ – findwindow

+0

@findwindowおかげさまで、これは非常に難しいです。 – user3598756

+0

お待ちしています:^あなたの周りに他の方法があることを確信しています^^ – findwindow

関連する問題