Excel VBA에서 행 삭제
저는 리스트에서 아이템의 엑셀 행을 찾아 리스트에서 아이템을 삭제하는 코드를 가지고 있습니다.내가 원하는 건...Excel 행도 삭제합니다.
코드는 여기 있습니다.
Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
gksluri.RemoveItem gksluri.ListIndex
Exit Do
End If
Rand = Rand + 1
Loop
End Sub
ws를 추가한 장소.범위(Rand, 1)전체 행전체 행을 삭제하려고 하는데 어떻게 해야 할지 모르겠어요.내가 원하는 건...내 목록의 선택된 항목과 같은 셀에서 동일한 값을 찾으면 excel의 전체 행과 항목을 목록 상자에서 모두 제거할 수 있습니다.리스트 박스에서 아이템을 삭제할 수 있지만 행을 삭제하는 방법도 모릅니다.
Chris Nielsen의 솔루션은 단순하고 잘 작동합니다.조금 더 짧은 선택지는...
ws.Rows(Rand).Delete
...행 삭제 시 Shift를 지정할 필요가 없습니다.정의상 왼쪽으로 이동할 수 없습니다.
덧붙여서, 행을 삭제할 때 내가 선호하는 방법은...
ws.Rows(Rand) = ""
초기 루프에 있습니다.그런 다음 정렬 함수를 사용하여 이러한 행을 데이터 맨 아래로 푸시합니다.그 주된 이유는 단일 행을 삭제하는 것이 매우 느릴 수 있기 때문입니다(100보다 큰 행을 삭제하는 경우).또한 Robert Ilbrink의 코멘트에 따라 놓치는 것이 없습니다.
이 Excel 전문가 동영상에서 설명한 바와 같이 매크로를 기록하고 코드를 줄임으로써 정렬을 위한 코드를 배울 수 있습니다.가장 깔끔한 방법(Range('A1:Z10')이 의심됩니다.키 정렬 1:=범위("A1", 주문 1:=sortAscending/내림차순, 헤더:=(예/아니오)는 2007년 이전 버전의 Excel에서만 찾을 수 있습니다.2007/2010과 동등한 코드를 언제든지 줄일 수 있습니다.
몇 점만 더...목록이 아직 열별로 정렬되지 않은 상태에서 순서를 유지하려면 각 행의 오른쪽에 있는 예비 열에 행 번호 'Rand'를 붙일 수 있습니다.그런 다음 해당 코멘트를 기준으로 정렬하여 삭제합니다.
데이터 행에 서식이 포함되어 있는 경우 새 데이터 범위의 끝을 찾고 이전에 지운 행을 삭제할 수 있습니다.파일 크기를 줄이기 위해서입니다.순서 마지막에 1개의 큰 삭제를 실시해도, 1개의 행을 삭제하는 것과 같이, 코드의 퍼포먼스를 저하시키는 일은 없습니다.
회선을 변경하다
ws.Range(Rand, 1).EntireRow.Delete
로.
ws.Cells(Rand, 1).EntireRow.Delete
또한 union을 사용하여 삭제할 행을 모두 가져온 다음 한 번에 모두 삭제하는 것이 좋습니다.행이 연속적일 필요는 없습니다.
dim rng as range
dim rDel as range
for each rng in {the range you're searching}
if {Conditions to be met} = true then
if not rDel is nothing then
set rDel = union(rng,rDel)
else
set rDel = rng
end if
end if
next
rDel.entirerow.delete
이렇게 하면 정렬이나 하위 항목에 대해 걱정할 필요가 없습니다.
다음과 같은 방법으로 해결할 수 있습니다.
Rows("12:12").Select
Selection.Delete
코드에는 다음과 같이 표시됩니다.
Rows(CStr(rand) & ":" & CStr(rand)).Select
Selection.Delete
언급URL : https://stackoverflow.com/questions/7851859/delete-a-row-in-excel-vba
'source' 카테고리의 다른 글
write.table() 출력의 10진수를 제어하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
---|---|
변수가 함수인지 아닌지는 어떻게 검출합니까? (0) | 2023.04.17 |
Excel의 열에서 고유한 값 카운트 (0) | 2023.04.17 |
예외 해결 방법:콜이 착신자에 의해 거부되었습니다.(HRESULT: 0x80010001(RPC_E_CALL_REJECTED)의 예외) (C#) (0) | 2023.04.17 |
ItemsControl의 항목 사이에 구분 기호를 추가하는 방법 (0) | 2023.04.17 |