GPT가 짜준 코드
필터링했을때 값이 있으면 복사 붙여넣기하고 값이 없으면 그냥 넘어가는 코드를 짜려고하는데 예시좀 보여줘
ChatGPT의 말:
네! 필터링 결과가 있는 경우에만 복사해서 다른 시트(또는 위치)에 붙여넣고, 값이 없으면 넘어가는 VBA 코드를 예시로 보여드릴게요.
🧾 시나리오
- Sheet1에 데이터가 있고, A열에서 특정 값을 기준으로 필터링
- 필터링 결과가 있다면, 그 결과를 Sheet2의 A1부터 복사해 붙여넣기
📌 VBA 코드 예시
Sub FilterAndCopyIfDataExists()
Dim wsSrc As Worksheet
Dim wsDest As Worksheet
Dim lastRow As Long
Dim visibleRows As Long
Set wsSrc = ThisWorkbook.Sheets("Sheet1")
Set wsDest = ThisWorkbook.Sheets("Sheet2")
' 기존 필터 해제
If wsSrc.AutoFilterMode Then wsSrc.AutoFilterMode = False
' 마지막 행 찾기
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
' A열에서 "Apple"로 필터링
With wsSrc.Range("A1:A" & lastRow)
.AutoFilter Field:=1, Criteria1:="Apple"
End With
' 필터링된 결과의 개수 확인 (헤더 제외)
On Error Resume Next
visibleRows = wsSrc.Range("A2:A" & lastRow).SpecialCells(xlCellTypeVisible).Count
On Error GoTo 0
' 복사/붙여넣기 실행 조건
If visibleRows > 0 Then
' 필터링된 셀 범위 복사
wsSrc.Range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy
' Sheet2에 붙여넣기 (A1부터)
wsDest.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "필터링된 데이터를 복사했습니다."
Else
MsgBox "필터링된 결과가 없습니다. 넘어갑니다."
End If
' 필터 해제
wsSrc.AutoFilterMode = False
End Sub
Dim wsSrc As Worksheet
Dim wsDest As Worksheet
Dim lastRow As Long
Dim visibleRows As Long
Set wsSrc = ThisWorkbook.Sheets("Sheet1")
Set wsDest = ThisWorkbook.Sheets("Sheet2")
' 기존 필터 해제
If wsSrc.AutoFilterMode Then wsSrc.AutoFilterMode = False
' 마지막 행 찾기
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
' A열에서 "Apple"로 필터링
With wsSrc.Range("A1:A" & lastRow)
.AutoFilter Field:=1, Criteria1:="Apple"
End With
' 필터링된 결과의 개수 확인 (헤더 제외)
On Error Resume Next
visibleRows = wsSrc.Range("A2:A" & lastRow).SpecialCells(xlCellTypeVisible).Count
On Error GoTo 0
' 복사/붙여넣기 실행 조건
If visibleRows > 0 Then
' 필터링된 셀 범위 복사
wsSrc.Range("A1:A" & lastRow).SpecialCells(xlCellTypeVisible).EntireRow.Copy
' Sheet2에 붙여넣기 (A1부터)
wsDest.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "필터링된 데이터를 복사했습니다."
Else
MsgBox "필터링된 결과가 없습니다. 넘어갑니다."
End If
' 필터 해제
wsSrc.AutoFilterMode = False
End Sub
visibleRows 변수에서 xlCellTypeVisible보다 currentregion으로 하는게 나을듯
'엑셀 > 엑셀 VBA' 카테고리의 다른 글
GPT) 필터링할때 내가 원하는 값들만 빼고 나머지만 보고 싶음 (0) | 2025.04.06 |
---|---|
VBA 다른 엑셀 파일 값 vlookup으로 가져오기 (0) | 2025.04.04 |
ppt 파워포인트 vba (0) | 2024.10.23 |
필터링 된 행 전체 삭제하는 코드 (1) | 2024.09.23 |
Offset이랑 Resize로 머리글 빼고 나머지 선택하기 (0) | 2024.09.13 |