EXCEL VBA - 如果列存在则删除

时间:2017-04-06 13:45:21

标签: excel vba excel-vba

我有一个要求,其中,如果存在,我需要删除该特定列。

我试图通过列标题找到“特殊”列。

这是我的代码,

If sColumnName = (WorksheetFunction.Match("RSD", Sheets("RS_Report").Rows(1), 0)) And sColumnName = True Then

DDC= WorksheetFunction.Match("RSD", Sheets("RS_Report").Rows(1), 0)

DFC= GetColumnLetter(DDC)

Range(DFC& 1 & ":" & DFC& lastrow).Select

Selection.Delete Shift:=xlUp

GetColumnLetter和lastrow是我的用户定义函数,它们返回正确的值。我不知道如何检查列是否存在。请帮助我。分享你的想法。

2 个答案:

答案 0 :(得分:3)

你可以这样做

Dim col As Variant

With Sheets("RS_Report") '<--| reference relevant worksheet
    col = WorksheetFunction.Match("RSD", .Rows(1), 0) '<--| try searching its row 1 for wanted header text
    If Not IsError(col) Then .Columns(col).Delete '<--| if found then delete its entire column
End With

答案 1 :(得分:1)

有三种方法可以做到这一点。

1)一个for循环,它查找特定字符串的标题行的范围 亲:很容易 Con:字符串必须准确

类似

Dim string as yourString
Dim lColumn As Long
lColumn = ws.UsedRange.Columns.Count
yourString = whatever
for x = 1 to lcolumn
  if range(cells(1, 1), Cells(1, x)).Value = yourString
    Columns(x).EntireColumn.Delete
  End If
next

2)使用Range.Find方法,您可以在这里了解https://msdn.microsoft.com/en-us/library/office/ff839746.aspx

以下是一个简短的粗略示例,您可以将其作为参考:

Sub Header_Format()
Dim rLastCell As Range
Set rLastCell = UpdateSheet.Cells.Find(What:="*", After:=UpdateSheet.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
    With UpdateSheet.Range(Cells(4, 1), Cells(4, rLastCell.Column))
        .Copy MasterSheet.Cells(1, 1)
        .Copy RemovalSheet.Cells(1, 1)
    End With
End Sub

3)最后有人使用匹配方法,有人已经谈过了。

https://msdn.microsoft.com/en-us/library/office/ff835873.aspx