2017-08-15 5 views
0

私は助けが必要です。最初のシートには2枚あり、別の番号(1〜50)に対して時間を記録しています。同じ番号に対する新しいシートに。 シート1: Sheet 1 exampleVBA - 特定の値を1枚のシートの列から次のシートの行にコピーする

シート2: Sheet 2 example

これは自動的に行わ取得するVBAコードを助けてください。

Sub mytry() 
Dim lRow As Long 
Dim lRow1 As Long 
Dim time1 As Date 

Sheets("Time").Select 

lRow = Range("A" & Rows.Count).End(xlUp).Row 

For iCntr = 2 To lRow 

num1 = Cells(iCntr, 1) 

    Sheets("Rec").Select 
    lRow1 = Range("A" & Rows.Count).End(xlUp).Row 
    For iCntr2 = 2 To lRow1 
     If Cells(iCntr2, 1) = num1 Then 
      time1 = Cells(iCntr2, 2) 
      Sheets("Time").Select 
      For t1 = 2 To 20 
      If Cells(iCntr, t1) = "" Then 
      Cells(iCntr, t1) = time1 
      End If 
      GoTo 1 

      Next t1 
      1 
      Sheets("Rec").Select 

     End If 


    Next iCntr2 

Sheets("Time").Select 
Next iCntr 

End Subの

+0

これまでにどのようなコードを試しましたか?スタックオーバーフローは、無料のコード記述サービスではありません... – Prebsus

+0

あなたはどのようなコードを既に持っていますか?それはなぜ失敗ですか?現在のソリューションでは何を苦労していますか? –

+0

私が試したことを追加しました – fouriec

答えて

0

これは私がやったきれいなものではありませんが、私は試してみるつもりです...

あなたは、いくつかの変数を追加することについて考えてよいでしょう

Dim i as integer 
Dim lRow as Long 'Specific to Sheets("Time") 
Dim LC1 as Long, LC2 as Long, LC3 as Long 'Up to LC9 in the example for Last Column for Row # 

は、あなたが持っているものを取り、シート(「時間」)をループし、それをローリング::

あなたには、いくつかの項目は、シート(「REC」)の上にあることを行っている場所を知っているので、 210
lRow = Sheets("Time").Range("A" & Sheets("Time").Rows.Count).End(xlUp).Row 

For i = 2 to lRow 

最初にシートを選択しないで、名前を付けてシートを指定するか、Withステートメントを使用することをお勧めします(後者は、Select Caseを使用するパスではうまく機能しない可能性があります)。

この例では、Number count(たとえば9)に相当するループの中でSelect Caseを使用できます。

Select Case Cells(i,1).Value 

Case 1 
    LC1=Sheets("Rec").Cells(2, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(2,LC1) 

Case 2 
    LC2=Sheets("Rec").Cells(3, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(3,LC2) 

Case 3 
    LC3=Sheets("Rec").Cells(4, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(4,LC3) 

End Select 

次に、次のiを確認して、それをかなりスムーズに実行できるようにする必要があります。それはすべてのように一緒に来る:

Dim i as integer 
Dim lRow as Long 
Dim LC1 as Long, LC2 as Long, LC3 as Long 

lRow1 = Sheets("Time").Range("A" & Sheets("Time").Rows.Count).End(xlUp).Row 

For i = 2 to lRow 

Select Case Cells(i,1).Value 

Case 1 
    LC1=Sheets("Rec").Cells(2, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(2,LC1) 

Case 2 
    LC2=Sheets("Rec").Cells(3, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(3,LC2) 

Case 3 
    LC3=Sheets("Rec").Cells(4, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(4,LC3) 

End Select 

Next i 
+0

あなたのiCntrは定義されていないと言いましたので、私は自分で簡単にしました。 Option Explicitがモジュールの先頭にあることを確認して、コーディングを確実にし、各ピースが定義されていることを確認してください。誤っていくつかの固有のリファレンスなどと間違えることはありません。 – Cyril

+0

フィードバックCyrilのおかげで、最初のシートから情報を上書きしていますが、シート1のサンプルをチェックすると、最初のカラムで数字がランダムに変化し始めますので、次のカラムの次のシートに時間を追加する必要があります(シート2のサンプルをご覧ください) – fouriec

+0

@fouriecコードに誤りがあり、それを修正しました... LC2とLC3はともにLC1としてリストされていました。これはSheets( "Rec")の3つの数値の例です。セル(i、1)では、コードに他の値(0〜9)を加え、最後の適切な列Dimsを追加する必要があります。 – Cyril

関連する問題