我需要从C7(C7,D7,E7等)开始检查第7行中的每个单元格,并找到一个包含特定日期的字符串值的单元格(例如,字符串中的“9/30/2017” “2017年6月30日至9月30日”)并删除C列中的所有列到单元格所在的列。如何使用VBA代码执行此操作?我是VBA的新手,并尝试过我能找到的一切。感谢任何建议
我的代码:
Sub DeleteUnnecessaryColumns(specifiedWorksheet)
Dim lastCol As Long
lastCol = Cells.Find(What:="*", After:=[C1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
For i = 1 To lastCol
If InStr(Cells(7, 0), specifiedDate, vbTextCompare) = 0 Then
Columns(i).Delete
End If
Next i
End Sub
答案 0 :(得分:0)
一些变化:
With
块明确定位指定的工作表.
集合之前添加Cells
以明确链接到指定的工作表(通过With
块)For i = 3
...)InStr
函数的第一个参数:起始字符(假设为1)MSDN InStr
的第二个参数未设置为i
变量。现在,这将循环显示每列中的值Else
子句,在找到For
后退出specifiedDate
循环,阻止脚本删除目标列右侧的列。specifiedDate
从未传递给Sub或声明,因此我将其添加为参数。您也可以在此过程中声明和设置它。如果它被声明为公共变量,则删除参数。.Find
方法仅适用于范围对象,因此我使用了一种可用于单元格的方法如果在第7行中找不到搜索文本,它现在应该正确删除列,并在找到第一个匹配后停止执行,剩下的列保持不变。
Sub DeleteUnnecessaryColumns(specifiedWorksheet, specifiedDate)
Dim lastCol As Long
With specifiedWorksheet
lastCol = .Cells(7, .Columns.Count).End(xlToLeft).Column
For i = 3 To lastCol
If InStr(1, .Cells(7, i), specifiedDate, vbTextCompare) = 0 Then
.Columns(i).Delete
i = i - 1
lastCol = lastCol - 1
Else
Exit For
End If
Next i
End With
End Sub
答案 1 :(得分:0)
类似的东西......您需要使用DeleteUnnecessaryColumns "Sheet1", "9/30/2017"
Sub DeleteUnnecessaryColumns(specifiedWorksheet as worksheet, SpecifiedDate as string)
dim r as range ' set up a range for row 7, columns C to the end
set r = specifiedWorksheet.rows(7)
set r = r.resize(Columnsize:= r.columns.count - 2)
set r = r.offset(0,2)
Dim lastCol As Long, i as long
for i = 1 to r.columns.count 'loop through the cells in the r range
if instr(string:=r.cells(i), substring:= SpecifiedDate) > 0 then
lastcol = i 'this ends the loop and sets the value for lastcol
end if
next
SpecifiedWorksheet.range(cells(1, 3), cells(1, lastcol - 1).entirecolumn.delete
End Sub