親愛なる有能な人。2つの範囲の結合から別の範囲の行へのVBAコピー
次のコードに問題があります。具体的には、サブが正しく完了しても、正しいデータが正しい場所にコピーされません。イテレータとの位置関係にないゼロの線の繰り返しパターンが得られます。
私は問題は、範囲のサブセット、エピソード&rから値をコピーすることだと思います。以前はunionプロパティを使用していましたが、これは以下のコメント者によって間違っていることが示されていました。
現在、1つの回答者のデータが各行に含まれている「エピソード」1-9という9つの範囲があります。これらの範囲の列5〜15にはコピーするデータが含まれているため、回答者ごとにコピーされる範囲は行i、列5〜15です。これは私が立ち往生した一歩です。
もし私がそれをコピーすることができれば、データはシート2上に終わり、被回答者の名前は、回答者&となります。応答&nの行は、エピソード&rが発生することができるタイムスロットを表す。エピソード&rが発生するスロットの外側にはゼロが存在する可能性がありますが、これは実際には必要ありません。
論理構造が正常に動作しているようです。私はカウンターのローカル値をデバッグに密接に見てきました。
現在、Range.Itemメソッドを使用して、行「n」を選択しています。エピソード& rから列5-15を探していますが、正しく取得できません。
何か助けていただければ幸いです。
例のシートへのリンクはこちらです:http://dl.dropbox.com/u/41041934/StackOverflow/TornHairExampleSheet.xlsm
Sub PopulateMedia()
Application.ScreenUpdating = False
Sheets(1).Activate
'Count the total number of response rows in original sheet
Dim Responses As Long, n As Integer, i As Integer, j As Integer, r As Integer
Responses = Sheets("Sheet1").Range("A:A").End(xlDown).row
'For each response...
For n = 1 To Responses
Dim curr_resp As Range
Set curr_resp = Sheets(2).Range("Response" & n) 'Define a range containing all response data
For r = 1 To 9 'For each episode...
Dim curr_ep As Range 'Define a range containing episode data for all responses
Set curr_ep = Sheets(1).Range("episode" & r)
'Variables contain start, end and inter-episode times
Dim Stime As Integer, Etime As Integer, Itime As Integer
Stime = curr_ep.Cells(n, 1).Value
Etime = curr_ep.Cells(n, 16).Value
Itime = curr_ep.Cells(n, 18).Value
'Define a range within this episode which contains the columns to be copied
Dim media As Range
Sheets(1).Activate
Set media = Set media = Sheets(1).Range("Episode" & r).Item(n, "5:15") 'range to be copied is union of active episode and active response.***This line is certainly incorrect, example purpose.
Sheets(2).Activate
'for each time-slot...***This is the section I'm having trouble with
For i = 1 To (Etime + Itime)
If i > Etime Then
'fill the response range with zeros for time slots outside Stime and Etime
Sheets(2).Range("Response" & n).Rows = 0
ElseIf i >= Stime Then
'Copy data from above union for slots between Stime and Etime
Sheets(2).Range("Response" & n).Rows(i) = media
Else
'Stick with the zeroes until a new 'r' means a new episode***
Sheets(2).Range("Response" & n).Rows(i) = 0
End If
Next i
Next r
Next n
End Sub
いくつかの考え/コメント:「レスポンス」&nという名前の範囲がありますか?共用体をコピーするのではなく、2つの範囲を1つずつコピーすると同じ問題が発生しますか?デバッグモードでコードを実行して、さまざまな変数の値を監視し、期待どおりに変更されているかどうかを確認しましたか?出力は、EtimeやItimeを含むいくつかのパラメータの値に依存するため、問題を解決するためのサンプルデータを提供すると便利です。フォローアップありがとうございます。 – assylias
私は今、連合は間違った方法だと思う。私がしようとしていたのは、私が他の手段で目標とすることができなかったエピソードのサブ領域である範囲のエピソードと回答の重複をコピーすることです。私はデバッグでコードを実行して、カウンターの値がサブオーダーを正しい順序で実行し、デザインごとにループしていることを確認しましたが、それらのループが行うアクションは正しくありません。 Subの目的は、Stime/Etime条件が満たされている場合、Episodeのサブレンジをコピーすることです。今すぐサンプルシートを投稿します。上記の返信をありがとう、それはすでに助けました。 – TornHair