以下のコードなのですが、
契約情報シートの33行目までの情報は、作成情報シートへ抽出されるのですが、
34行目以下の情報は抽出されません。
使用するデータから考えて300行くらいまでは使えるようにしたいのですがどこを変更したらいいのかわかりません。
お力お貸しください。
Sub
1 2 If ActiveSheet.FilterMode Then 3 '絞り込まれていたら 4 5 ActiveSheet.ShowAllData 6 7 End If 8 9 Dim twb, cwb As Workbook 10 Dim curPath, Sakusei As String 11 Dim ws1, ws2 As Worksheet 12 Dim StartRow, EndRow, tmpRow As Integer 13 Dim wb As Workbook, flag As Boolean 14 15 Set twb = ThisWorkbook 16 curPath = twb.Path 17 18 'ブックが既に開いているかどうかチェック 19 For Each wb In Workbooks 20 If wb.Name = "書類作成.xlsm" Then 21 flag = True 22 Exit For 23 End If 24 Next wb 25 '既に開いている場合 26 If flag = True Then 27 'オブジェクトにセット 28 Set cwb = Workbooks("書類作成.xlsm") 29 cwb.Activate 30 Else 31 '新規で開いてオブジェクトにセット 32 Workbooks.Open Filename:=curPath & "書類作成.xlsm" 33 Set cwb = ActiveWorkbook 34 End If 35 36 'シート名を変えている場合は適宜変更 37 Set ws1 = twb.Worksheets("契約情報") 38 Set ws2 = cwb.Worksheets("作成情報") 39 40 41 ws2.Range("2:11").ClearContents 42 43 '作成シートに指定されている抽出条件 44 Sakusei = ws2.Cells(1, "A") 45 46 StartRow = 2 47 EndRow = ws1.Cells(Rows.Count, "C").End(xlUp).Row 48 tmpRow = 2 49 50 For i = StartRow To EndRow 51 If (ws1.Cells(i, "A") = Sakusei) Then 52 ws2.Cells(tmpRow, "A") = Sakusei 53 '範囲コピー 54 ws2.Range(ws2.Cells(tmpRow, "C"), ws2.Cells(tmpRow, "K")).Value = ws1.Range(ws1.Cells(i, "C"), ws1.Cells(i, "K")).Value 55 tmpRow = tmpRow + 1 56 End If 57 Next 58 59End Sub 60 61コード
EndRow = ws1.Cells(Rows.Count, "C").End(xlUp).Row
なので C列の最終行は?
(ws1.Cells(i, "A") = Sakusei
A列の文字列とSakuseiとイコールでないから? 空白、-と- とかないですか?
C列の最終行は301行です。
後は何を確認したらよろしいのでしょうか。
再度確認ですが1物件のみ転記ですか?
関連物件 -02 や -03 も含めるのですか?
動きました。
Cセルに何もデータが入っていないと他のセルに情報が入っていても動かないようです。
この部分は改善できるのでしょうか。
EndRow = ws1.Cells(Rows.Count, "C").End(xlUp).Row
はC列の最終行なので
EndRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row
A列の最終行でおこなえば?
ws1.Cells(Rows.Count, "C").End(xlUp).Rowの動作をExcelの操作で説明すると、
「C列の最終行からCtrl+↑を実行した」という物でC列の最後のデータが入っている行に移動します。
そのため処理を実行したい行までデータが入っている列を対象としないといけません。
抽出検索条件が入っているA列とかは空白のデータが入っていない行とかあるのでしょうか。
A列としたら問題なく動きました。
ありがとうございました。
回答3件
あなたの回答
tips
プレビュー