IT

VBA로 특정 열을 삭제하는 방법은?

itgroup 2023. 9. 25. 22:34
반응형

VBA로 특정 열을 삭제하는 방법은?

엑셀용 VBA에서 여러 열을 삭제하려고 합니다.일리노이 통계분석센터에서 마약 검거에 관한 자료를 다운받았습니다http://www.icjia.org/public/sac/index.cfm?metasection=forms&metapage=rawMetadata&k=170

삭제하고 싶은 열은 각각 3개씩 떨어져 있습니다.

예를 들어,

Adams County Illinois Champaign County Illinois 추정치 | % | 오차한계 | 추정한계 | 추정치 | 오차한계 | %

D|E|F|G|H|I|J

모든 열을 삭제하고 싶은 것은 오차한계(Percent Margin of Error)입니다.

매크로는 여기 있습니다.

Sub deleteCol()
    Columns("H,J").Delete
End Sub

계속 오류가 발생합니다.

런타임 13: 유형 불일치

좋은 의견이라도 있나?

당신은 단지 전체 컬럼을 제거하라는 컬럼 설명의 후반부를 놓쳤는데, 대부분의 일반적인 범위는 컬럼 레터로 시작하기 때문에, 그것은 숫자를 찾고 있었지만 숫자를 얻지 못했습니다.":"는 전체 열 또는 행을 가져옵니다.

제 생각에 당신이 당신의 레인지에서 찾고 있던 것은 이것이었습니다.

Range("C:C,F:F,I:I,L:L,O:O,R:R").Delete

필요에 맞게 열 문자만 변경하면 됩니다.

제목이 "오차 한계 백분율"인 열을 삭제하고 싶다고 하니 열 이름을 직접 짓지 말고 동적으로 만들어 보겠습니다.

Sub deleteCol()

On Error Resume Next

Dim wbCurrent As Workbook
Dim wsCurrent As Worksheet
Dim nLastCol, i As Integer

Set wbCurrent = ActiveWorkbook
Set wsCurrent = wbCurrent.ActiveSheet
'This next variable will get the column number of the very last column that has data in it, so we can use it in a loop later
nLastCol = wsCurrent.Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column

'This loop will go through each column header and delete the column if the header contains "Percent Margin of Error"
For i = nLastCol To 1 Step -1
    If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare) > 0 Then
        wsCurrent.Columns(i).Delete Shift:=xlShiftToLeft
    End If
Next i

End Sub

이렇게 하면 열 머리글이 첫 번째 행에 있는 한 데이터를 붙여넣거나 가져올 위치에 대해 걱정할 필요가 없습니다.

편집: 그리고 머리글이 첫번째 줄에 있지 않다면 정말 간단한 변경이 될 것입니다.코드의 이 부분에서:If InStr(1, wsCurrent.Cells(1, i).Value, "Percent Margin of Error", vbTextCompare)1을 바꾸다Cells(1, i)네 머리가 어떻게 되든 간에 말입니다.

편집 2: 변경 사항For완전히 비어 있는 열을 설명하기 위한 코드 섹션입니다.

Excel을 위해 vba의 특정 열을 삭제하는 방법이라는 질문에 답하는 것입니다.아래와 같이 Array를 사용합니다.

sub del_col()

dim myarray as variant
dim i as integer

myarray = Array(10, 9, 8)'Descending to Ascending
For i = LBound(myarray) To UBound(myarray)
    ActiveSheet.Columns(myarray(i)).EntireColumn.Delete
Next i

end sub

언급URL : https://stackoverflow.com/questions/26580082/how-to-delete-specific-columns-with-vba

반응형