2016-09-16 3 views
1

現在、行内で発生する色分けされたイベントでスケジュールを分析していますが、時間が列を超えて拡大しています(セルにテキストのみがあります。私のコントロール)。私は現在、別のワークシートにイベントの1つの発生の結果を印刷することができますが、別のセルの定期的なイベントの日付を印刷する方法を決定することはできません(現在のところ、イベントが発生した最後の時刻を印刷します)。現在のコードはループ内で定期的なイベントを出力するVBA

For i = 2 To 93 
    If Cells(7, i).Interior.Color = "8421631" And Cells(7, i - 1).Interior.Color = "16777215" Then 
     startDay = Cells(3, i).Value 
     startMonth = Cells(1, i).Value 
     name = Cells(7, i).Value 
     Worksheets("Sheet1").Activate 
     ActiveWorkbook.Worksheets("Sheet1").Cells(2, 1) = startDay + startMonth 

    End If 
    If Cells(7, i).Interior.Color = "8421631" And Cells(7, i + 1).Interior.Color = "16777215" Then 
     endDay = Cells(3, i).Value 
     endMonth = Cells(1, i).Value 
     ActiveWorkbook.Worksheets("Sheet1").Cells(2, 2) = endDay + endMonth 
    End If 
Next i 

です。すべての変数は文字列で入力します。私はいくつかの異なる方法を試みて成功しなかった。私は私のIFステートメントに別のループを追加する必要があると感じますが、私はそれを最善を尽くす方法については不明です。 コードは全体的にその目的を達成しています(以前は、メッセージボックスを出力用に使用していたことを確認するために使用されていました)。これは全体のコードのほんの一部ですが、この回答で私は他の場所にも適用できます。私はあなたがこのコードを試して、あなたの記述のうち、把握できた何のため

+0

あなたは 'ActiveWorkbook.Worksheets( "シート1")どうやったのかを参照してください細胞(..)'。?他のすべての参考文献でもそれを行います。 'Range()'、 'Cells()'、 'Row()'などはシートを使わずに 'ActiveSheet'で動作するので、期待したデータを取得することはできません。 – BruceWayne

答えて

0

Option Explicit 

Sub main() 
    Dim i As Long 

    For i = 2 To 93 
     If Cells(7, i).Interior.Color = "8421631" Then 
      If Cells(7, i - 1).Interior.Color = "16777215" Or Cells(7, i + 1).Interior.Color = "16777215" Then 
       WriteDate Cells(3, i).Value, Cells(1, i).Value 
      End If 
     End If 
    Next i 
End Sub 

Sub WriteDate(day As String, month As String) 
    With ActiveWorkbook.Worksheets("Sheet1") 
     .Cells(2, .Columns.Count).End(xlToLeft).Offset(, 1) = day & "/" & month 
    End With 
End Sub 
+0

ありがとう!私はまだVBAの内容を学んでいるので、すぐに質問があります。セルと列がそれらの前に(。)を追加するものは何ですか?私はそれらを使わずにサブを実行しようとしましたが、結果は表示されません。 – JonSnow

+0

ようこそ。 (。)は、先行する「With」ステートメントで参照されているオブジェクトのメンバーとして後続するものを修飾するためのものです。このケースでは、 ".Cells"と ".Columns"の両方が、現在アクティブなブックの "Sheet1"ワークシートの範囲として参照されるように、ActiveWorkbook.Worksheets( "Sheet1")を使用しています。現在アクティブなワークシートの範囲を参照します。これが明らかになるのを助けてくれたらと思います。最後に、私の回答を受け入れたものとしてマークすることができます。ありがとうございました。 。 – user3598756

関連する問題