2017-05-05 15 views
0

現在、フロントシートからバリアントシートにテキストをコピーしようとしています。セルの値に応じて特定のシートにExcelをコピー

私がしたいのは、セルJ19、J20、J21を異なるシートのセルA1、B1、C1にコピーすることです。 J19はコピーするシートを決定します。それぞれエージェントには、J19へのデータ検証にエージェント名を引き付けるマクロがある独自のシートがあります。

J19

=エージェント名

J20 =休日開始日

J21 =休日終了日

は、どのように私はそれが先のセルを決定するためにJ19に見えるようSet wsDestin = Sheets("Agent1")を変更できます。

Sub CopyColumnP() 
    Dim wsSource As Worksheet 
    Dim wsDestin As Worksheet 
    Dim lngDestinRow As Long 
    Dim rngSource As Range 
    Dim rngCel As Range 

    Set wsSource = Sheets("Front") 
    Set wsDestin = Sheets("Agent1") 

    With wsSource 

     Set rngSource = .Range(.Cells(19, "J"), .Cells(.Rows.Count, "J").End(xlUp)) 
    End With 

    For Each rngCel In rngSource 
     If rngCel.Value = "Design" Then 
      With wsDestin 
       lngDestinRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row 
       rngCel.EntireRow.Copy Destination:=wsDestin.Cells(lngDestinRow, "A") 
      End With 
     End If 
    Next rngCel 
    End Sub 
+0

セル( "J19")。値 – Luuklag

+0

本当に簡単ですか?私はそれがはるかに複雑な@Luuklagだと思った –

答えて

1

それはこのように簡単です:

Set wsDestin = ThisWorkbook.Worksheets(wsSource.Range("J19").Value) 

シートが最後に存在するかどうかを確認するには、エラーが使う防ぐ:

On Error Resume Next 
    Set wsDestin = ThisWorkbook.Worksheets(wsSource.Range("J19").Value) 
    If Not Err.Number = 0 Then 
     MsgBox "Sheet '" & wsSource.Range("A1").Value & "' not found." 
     Exit Sub 
    End If 
On Error GoTo 0 

またはJ19は、先のワークシートが含まれていない場合J19の値に基づいてワークシートを選択する必要があります。

Select Case wsSource.Range("J19").Value 
    Case "AAA" 'if value of J19 is AAA select sheet A 
     Set wsDestin = Sheets("A") 

    Case "B", "C" 'if value of J19 is B or C select sheet BC 
     Set wsDestin = Sheets("BC") 

    Case Else 
     MsgBox "no corresponding worksheet found." 
End Select 
+0

'実行時エラー' 9 ': 添え字範囲外 –

+0

'J19'の内容を置き換える正しい場合は?私はJ19を見て、J19のシート名のうち、J19、J20,21のデータをA1、A2、A3にコピーして貼り付けるかどうかを判断するようにしたい。 –

+0

等号の左には、等号の右側にある値が入ります。ワークブックを明示的に参照したい場合があります。 – Luuklag

関連する問題