2017-03-29 4 views
1

同じブックに2枚のExcelシートがあります。シート1とシート2。 sheet1の は毎月の日付を生成します。たとえば、列z1は3/1/2017、AA1は3/2/2017、AB1は3/3/2017などとなります。1枚のシートから情報を収集し、それを別のシートに入れます。

次に、シート2では、列N、O、Pにいくつかの数字があります。毎日これらの数字は異なる可能性があります。

シート1とシート2の両方の列CにSNが格納されています。

ここでは、sheet2(N + O + P)からN、O、P列の値を収集し、同じSNでhead = Dateという列のsheet1に格納しようとしています。 次のコードを使用しようとしていますが、これは機能しません。

誰もがNext rは見当違いである。この

Sub registrereren() 
Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 
Dim r As Long 

Dim j As Long 
Dim lastrow1 As Long 

FirstDate = DateSerial(Year(Date), Month(Date), 1) 
LastDate = DateSerial(Year(Date), Month(Date) + 1, 0) 
lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row 

For r = 27 To LastDate 

If Cells(1, r) = Date Then 
Next r 

    For j = 2 To lastrow1 

    Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0) 


    Next j 
End If 

End Sub 
+0

どのように動作しませんか?それはエラーを出しますか? 'Range()'と同様に、 'Rows.Count'をどのシートに実行させるかを指定する必要があります:' Sheets( "Registration")Range( "C"&Sheets( "Registration")セル(1、r) '*が' Date'と等しくない場合、何が起こるかを知るためには?私が思うあなたのループは、少し不調です。なぜなら、もし私が理解すれば、Cells(1,27)がDateと等しくなければ、それは一度だけ実行されるから、あなたはサブの終わりに行くつもりだから、それは起こっているのですか?確認するには、「F8」を押します。 – BruceWayne

+0

こんにちはブルース。ご返信ありがとうございます。次のrの行にエラーが表示され、次のことなしに次のように表示されます。私は本当にVBAの進歩ではありません。私はsheet1とsheet2の両方でrow.countを実行したい。最初のループでsheet1の最初の行をチェックします。そしてそれが日付と等しい頭部を見つけるとき。私は、シート2の列N、O、Pから情報を収集し、日付に等しいeaderを持つ列に貼り付けたいと思います。 –

答えて

0

で私を助けることができます。

Sub registrereren() 
    Dim FirstDate As Date 
    Dim LastDate As Date 
    Dim NextDate As Date 
    Dim r As Long 
    Dim j As Long 
    Dim lastrow1 As Long 

    FirstDate = DateSerial(Year(Date), Month(Date), 1) 
    LastDate = DateSerial(Year(Date), Month(Date) + 1, 0) 
    lastrow1 = Sheets("Registration").Range("C" & Rows.Count).End(xlUp).Row 

    For r = 27 To LastDate 
     If Cells(1, r) = Date Then 
      For j = 2 To lastrow1 
       Sheets("Sheet1").Cells(j, r).Value = WorksheetFunction.VLookup(Sheets("Sheet1").Range("C" & j).Value * 1, Sheets("Sheet2").Range("C2 : P3000"), 11 + 12 + 13, 0) 
      Next j 
     End If 
    Next r 
End Sub 

VBAエディタはインデントのコードが簡単になります:それは結果のコードは次のようになりEnd If

た後でなければなりません。サブ、ファンクション、ループ、ケースを選択する、またはステートメントを開始するたびに、タブキーを押して次の行をインデントする習慣をつけます。ブロックを終了したら、バックスペースキーを使用して、以前のレベルのインデントに戻ります。さらに、エディタリボンには、コードのブロック全体をインデントまたはインデントできるオプションがあります。

これを行う習慣をついたら、ブロックが正しい方法で終了していないときに飛び越すはずです。一方、散発的で一貫性のないインデントは、Next rで問題が何であったかを知ることができませんでした。

上記のコードはコンパイルされましたが、スプレッドシートのレイアウトがわからないため、簡単にテストできませんでした。それでも問題が解決しない場合は、コードに別の問題があり、質問を編集したり、必要に応じて別の質問をしたりすることができます(問題を特定した後は、

+0

こんにちはJohnありがとうございました。 –

+0

私がしようとしているのは、実際には次のようなものです:Sub test() ActiveCell.Offset(1,12).Range( "A1")選択 ActiveCell.FormulaR1C1 = "= SUM(Sheet2!RC:RC [ 2]) " ActiveCell.Select Selection.AutoFill宛先:= ActiveCell.Range(" A1:A49 ")、タイプ:= _ xlFillDefault ActiveCell。範囲: "A1:A49"選択 ActiveWindow.SmallScroll Down:= - 18 ActiveCell.Select End Sub –

+0

現在の日付を含むセルを検索するには、コードを最初の行で検索する必要があります。このマクロでは、宛先はそのセルから最後の行までを選択する必要があります。 –

関連する問題