나는 csv 파일 (프린터에서 내보내기)을 가지고 있는데, 이것은 잘 읽을 수 없으며 필요하지 않은 많은 정보를 가지고 있습니다. 그래서 관련 데이터를 두 번째 시트에 복사하기 위해 VBA 매크로를 작성했습니다.
vba 코드로 워크 시트 1에서 워크 시트 2에 복사 될 특정 텍스트 문구를 찾고 있습니다. 이러한 텍스트 문구는 워크 시트 1의 특정 열에 없으므로 전체 시트 1을 살펴 봐야합니다. 내 코드 일하고 있지만 한 가지 문제가 있는데 저에게 까다로운 문제가 있습니다. 그래서 여러분의 도움이 필요합니다.
제 경우에는 "Druckbeginn ="(독일어이며 Printstart를 의미 함)이라는 문구를 찾고 그 뒤에 유닉스 타임 코드가옵니다. 대부분의 행에는 "Druckbeginn ="이라는 문구가 있지만 일부에는 그렇지 않습니다.
따라서 행 1, 2 및 4에는 구가 존재하지만 행 3에는 없습니다. 문제는 내 vba 코드가 워크 시트 1에서 워크 시트 2로 셀을 복사하지만 1, 2, 4가 아닌 1, 2, 3 행으로 복사한다는 것입니다.
내 csv 파일 및 / 또는 전체 vba 코드가 필요하면 알려주세요.
이것은 내 코드입니다.
w1.Activate
For Each r In Intersect(Range("A:AS"), ActiveSheet.UsedRange)
v = r.Value
If InStr(v, "Druckbeginn =") > 0 Then
r.Copy w2.Cells(B, 3)
B = B + 1
End If
Next r
솔루션 : 이 코드는 저에게 효과적이었습니다.
' Insert variable declarations etc.
Set w1 = ThisWorkbook.Sheets("Sheet1")
Set w2 = ThisWorkbook.Sheets("Sheet2")
For Each r In Intersect(w1.Range("A:AS"), w1.UsedRange)
If InStr(r.Value, "Druckbeginn =") > 0 Then
' The important change is in the next line
w2.Cells(r.Row, 3).Value = r.Value
End If
Next r
결과 : (샘플 데이터를 얻기 전에 좀 더 간단하게 보임)
시트 1 :
시트 2 (매크로 실행 후) :
솔루션 설명 : 코드 B
에서 문자열이 발견되면 복사 된 모든 셀이 소스 데이터의 해당 줄이 아닌 결과 시트의 열 상단에 복사되는 경우 에만 증가 합니다. 대신 .Row
소스 데이터 의 속성을 간단히 참조 할 수 있습니다 . r.Row
는 루프 의 현재 r
요소의 행 번호이며 For Each
셀이에서 동일한 행 번호에 있기를 원하므로 동일한 행 번호를 ws2
사용할 수 있습니다.
코드 개선에 대한 설명 :
(1) For Each r In Intersect(w1.Range("A:AS"), w1.UsedRange)
: 어떤 워크 시트 .Range
를 참조 하는지 혼동을 피하기 위해 w1.
지정자를 추가했습니다 .
(2) If InStr(r.Value, "Druckbeginn =") > 0 Then
대신 할당 v = r.Value
그냥 사용할 수 있습니다 r.Value
당신에 If
나중에 다시 사용하지 않는 직접 때문에 절.
(3) w2.Cells(r.Row, 3).Value = r.Value
: 복사 및 붙여 넣기 작업을 수행하려면 워크 시트 사이를 건너 뛰어야 .Value
합니다. 특히 큰 파일을 살펴볼 때 속성을 통해 셀에 값을 직접 할당하는 것보다 성능면에서 더 나쁩니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다