동적 셀을 사용하여 통합 문서간에 데이터 복사
Dec 21 2020
한 Excel 스프레드 시트에서 다른 스프레드 시트로 데이터를 복사하려고합니다 (New_data에서 보고서로).
New_data 스프레드 시트에서 두 번째로 System (따라서 첫 번째 항목 아래에서 검색을 시작하는 이유 N21
)이 나타난 다음 빈 셀을 칠 때까지 b-k 열에서 그 아래의 모든 데이터를 복사해야합니다. 채워진 셀만 캡처하는 행의 양을 얻으려면 어떻게합니까?
Range("B584:K641")
동적이어야합니다.
Sub CopyWorkbook()
Range("N21").Select
Cells.Find(What:="system", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Range("B584:K641").Select
Selection.Copy
Application.WindowState = xlNormal
Windows("report.xlsx").Activate
Range("A2").Select
ActiveSheet.Paste
Windows("new_data.csv"). _
Activate
End Sub
답변
3 FaneDuru Dec 21 2020 at 21:42
다음 코드를 시도하십시오. 매우 빨라야합니다 (무엇부터 시작하여 '시스템'을 검색 할 위치를 올바르게 이해했다면 ...). 코드에서는 "new_data.csv"가 csv 통합 문서 이름이라고 가정합니다. 그렇지 않은 경우 shCSV
시트를 정의 할 때 실제 이름을 사용해야합니다 .
Sub CopyWorkbook()
Dim shR As Worksheet, shCSV As Worksheet, lastRow As Long, systCell As Range, arr
Set shR = Workbooks("report.xlsx").ActiveSheet 'use here the sheet you need to paste
'it should be better to use the sheet name.
'No need to have the respective sheet activated at the beginning
Set shCSV = Workbooks("new_data.csv").Sheets(1) 'csv file has a single sheet, anyhow
lastRow = shCSV.Range("B" & rows.count).End(xlUp).row
Set systCell = shCSV.Range("B21:B" & lastRow).Find(What:="system", _
After:=shCSV.Range("B21"), LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
If systCell Is Nothing Then MsgBox "No 'sytem' cell has been found...": Exit Sub
arr = shCSV.Range(systCell, shCSV.Range("K" & lastRow)).Value
shR.Range("A2").Resize(UBound(arr), UBound(arr, 2)).Value = arr
End Sub
1 FoxfireAndBurnsAndBurns Dec 21 2020 at 20:34
시험:
Sub test()
Dim LR As Long
Dim Ini As Long
LR = Range("B" & Rows.Count).End(xlUp).Row 'last non empty row in column B
Ini = Application.WorksheetFunction.Match("system", Range("N21:N" & LR), 0) + 20 'position of system after n21
Range("B" & Ini & ":K" & LR).Copy
'''rest of your code to paste
End Sub
이 코드는 system
N 열에서만 단어를 검색합니다 . 다른 곳에있는 경우 MATCH 함수를 조정해야합니다.
1 TestPilot10 Dec 21 2020 at 20:28
필터링 된 범위와 같도록 범위를 설정하고 B 열의 첫 번째 빈 셀이 나올 때까지 빈 셀이 몇 개도 발생하지 않는지 계산하는 루프를 시작합니다.
Sub CopyWorkbook()
ThisWorkbook.Sheets("new_data").Activate
Range("N21").Select
Dim rng As Range
Set rng = Cells.Find(What:="system", After:=ActiveCell, _
LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
Dim i As Double
i = rng.Row
Do Until ThisWorkbook.Sheets("new_data").Range("B" & i) = vbNullString
i = i + 1
Loop
i = i - 1
Range("B" & rng.Row & ":K" & i).Select
Selection.Copy
Application.WindowState = xlNormal
Windows("report.xlsx").Activate
Range("A2").Select
ActiveSheet.Paste
Windows("new_data.csv").Activate
End Sub
답변을 찾는 데 도움이되는 Stack Overflow 질문을 찾았습니다. 셀 주소 찾기