좋은 아침입니다. 저는 데이터베이스라는 시트에서 P2 : CP5000 범위의 Committees라는 셀 A2 시트에서 특정 텍스트를 찾고 다음을 포함하는 모든 행의 동일한 행에서 A : O 열의 데이터를 반환하는 매크로를 구축하고 있습니다. 이 텍스트 문자열을 보고서라는 시트의 F2 셀에서 시작하여 인쇄합니다. 다음은 몇 가지 제안을 기반으로 한 작업입니다. 그러나 예상 값을 반환하지 않고 데이터베이스의 A 열에서 보고서의 F : T로 데이터를 복사합니다. 또한 r1 범위의 마지막 행 이후에 멈추지 않기 때문에 루프가 작동하지 않는다고 생각합니다.
Sub Macro1()
Dim r1 As Range, r2 As Range, r3 As Range
Dim rw1 As Long
Dim tmpRow As Long
tmpRow = 2
Set r2 = Sheets("Committees").Range("A2")
Set r1 = Sheets("Database").Range("P2:CO5000")
Set r3 = ThisWorkbook.Sheets("Reports").Range("F2:T2")
rw1 = 0
rw1 = r1.Find(What:=r2.Value, After:=r1(1)).Row
Do While rw1 <> 0
r3.Value = Sheets("Database").Range("A" & rw1 & ":O" & rw1).Value
tmpRow = tmpRow + 1
Set r3 = ThisWorkbook.Sheets("Reports").Range("F" & tmpRow & ":T" & tmpRow)
rw1 = 0
rw1 = r1.FindNext().Row
Loop
End Sub
미리 감사드립니다!
최종 편집 :
특정 셀이 이미 발견되었는지 확인하는 것을 잊었습니다 (이제 FirstAddress 사용). 무한 루프는 동일한 항목을 반복해서 찾는 코드 때문이었습니다.
다음 코드를 테스트했으며 저에게 효과적입니다.
Sub joseph()
Dim awb As Workbook
Dim cm, db, rp As Worksheet 'committees, database, reports
Dim tmpRng As Range
Dim firstAddress As String
Dim tmpRow As Integer
Dim r As Integer
Dim searchValue As String
Set awb = ThisWorkbook
With awb
Set cm = .Worksheets("Committees")
Set db = .Worksheets("Database")
Set rp = .Worksheets("Reports")
End With
searchValue = cm.Range("A2").Value
tmpRow = 0
r = 2
With db
Set tmpRng = .Range("P2:CP5000").Find(searchValue, _
LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext, MatchCase:=False)
If Not tmpRng Is Nothing Then
firstAddress = tmpRng.Address
Do
tmpRow = tmpRng.Row
rp.Range("F" & r & ":T" & r).Value = .Range("A" & tmpRow & ":O" & tmpRow).Value
r = r + 1
Set tmpRng = .Range("P2:CP5000").FindNext(tmpRng)
Loop While Not tmpRng Is Nothing And tmpRng.Address <> firstAddress
End If
End With
End Sub
초기 응답 및 편집 :
이 줄을 바꿔보세요
Set rw1 = .FindNext(rw1)
...에
rw1 = r1.FindNext().Row
rw1은 범위가 아니므로 유형이 일치하지 않습니다. 이것이 작동하는지 알려주십시오.
편집 :이 줄도 변경하십시오.
If Not rw1 Is Nothing Then
...에
if rw1 <> 0 then
이 줄을 추가하십시오
rw1 = 0
이 줄 앞에 :
rw1 = r1.Find(What:=r2.Value, After:=r1(1)).Row
Edit2 : for 루프 및 r3 업데이트에 대해 텍스트 문자열이 여러 번 존재하는 경우 for 루프를 유지해야하며 행 변수를 선언하여 r3 범위를 업데이트 할 수 있습니다.
Dim tmpRow = 2 as integer
그런 다음 for 루프 안에 전에 작성하십시오. rw1 = 0
tmpRow = tmpRow + 1
set r3 = thisWorkbook.Sheets("Reports").Range("F" & tmprow & ":T" & tmprow)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다