VBA:如果标题匹配,则插入2列

时间:2019-02-28 11:10:34

标签: excel vba

如果标题包含“ * FFT目标”,则需要插入2列。我找到了这段代码,但是,它不会移至包含“ FFT目标”的下一列,而是将两行插入标题匹配的第一列之前。

我当前拥有的表头是:

英语FFT目标 英语教师评估 英文EFG 数学FFT目标 数学老师评估 数学EFG

我需要的是

[空白列] [空白栏] 英文FFT目标 英语教师评估 英文EFG [空白栏] [空白栏] 数学FFT目标 数学老师评估 数学EFG

我的代码是:

Dim A As Range
Dim lc As Long
Dim i As Long

Set A = Rows(1).Find(what:="*Target", LookIn:=xlValues, lookat:=xlPart)
lc = Cells(1, Columns.Count).End(xlToLeft).Column

For i = 2 To lc

        If A Is Nothing Then Exit Sub
        A.Resize(, 2).EntireColumn.Insert
Next i

不幸的是,此代码将所有列插入到英语FFT目标之前,而不是继续前进,并在包含FFT目标的下一列之前插入列。

任何帮助将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:2)

我认为这可以帮助您:

Option Explicit

Sub Insert()

    Dim LastColumn As Long, i As Long, Position As Long

    With ThisWorkbook.Worksheets("Sheet1")

        'Get the last column of Sheet 1, row 1
        LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column

        For i = LastColumn To 1 Step -1

            Position = InStr(1, .Cells(1, i), "FFT Target")

            If Position <> 0 Then

                .Range(.Cells(, i), .Cells(, i + 1)).EntireColumn.Insert

            End If

        Next i

    End With

End Sub

答案 1 :(得分:1)

如果您想坚持使用Find。在插入列时,需要一点点麻烦才能检查您是否没有回收先前找到的值,并且需要设置搜索方向。设置其他参数也是一种好习惯。

但是,我认为错误1004的方法在这里更有意义。

Sub x()

Dim A As Range
Dim lc As Long
Dim i As Long
Dim s As String

Set A = Rows(1).Find(What:="Target", after:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, _
                     SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False)

If Not A Is Nothing Then
    s = A.Address
    Do
        A.Resize(, 2).EntireColumn.Insert
        s = Range(s).Offset(, 2).Address
        Set A = Rows(1).FindNext(A)
    Loop Until A.Address = s
End If

End Sub