Vba 当的列未知时,删除电子表格中所在的行

Vba 当的列未知时,删除电子表格中所在的行,vba,excel,excel-2003,Vba,Excel,Excel 2003,我需要在电子表格中找到单词“过期”和“到期”,但它们出现的列将是可变的,记录行的数量也将是可变的。我需要删除数据中没有这些值的所有行,然后在其他行被删除后,合计工作表上剩余的数据。有什么线索吗?你可以试试这样的 将其放入宏中运行 Sub Macro1() Dim sheet As Worksheet Dim usedRange As Range Set sheet = ActiveSheet Set usedRange = sheet.usedRange Dim rowCou

我需要在电子表格中找到单词“过期”和“到期”,但它们出现的列将是可变的,记录行的数量也将是可变的。我需要删除数据中没有这些值的所有行,然后在其他行被删除后,合计工作表上剩余的数据。有什么线索吗?

你可以试试这样的

将其放入宏中运行

Sub Macro1()
Dim sheet As Worksheet
Dim usedRange As Range

    Set sheet = ActiveSheet
    Set usedRange = sheet.usedRange

Dim rowCount As Integer
Dim columnCount As Integer
Dim iRow As Integer
Dim iColumn As Integer

    rowCount = usedRange.Rows.Count
    columnCount = usedRange.Columns.Count

    For iRow = rowCount To 1 Step -1
        For iColumn = 1 To columnCount
            If ((InStr(1, LCase(usedRange(iRow, iColumn)), "overdue") > 0) Or (InStr(1, LCase(usedRange(iRow, iColumn)), "due") > 0)) Then
                usedRange.Range(Cells(iRow, 1), Cells(iRow, columnCount)).Delete
            End If
        Next iColumn
    Next iRow

End Sub

您也可以尝试使用ADO

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim strWhere As String
Dim i As Integer

''http://support.microsoft.com/kb/246335

strFile = ActiveWorkbook.FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * FROM [Sheet1$] AS s "

rs.Open strSQL, cn, 3, 3

For i = 0 To rs.fields.Count - 1
    strWhere = strWhere & " AND (UCase(s.[" _
        & rs.fields(i).Name & "] ) Not Like '%DUE%' Or s.[" _
        & rs.fields(i).Name & "] Is Null) "
Next

strSQL = strSQL & " WHERE " & Mid(strWhere, 5)
rs.Close

rs.Open strSQL

For i = 0 To rs.fields.Count - 1
    Sheets("Sheet2").Cells(1, i + 1) = rs.fields(i).Name
Next

Worksheets("Sheet2").Cells(2, 1).CopyFromRecordset rs

Excel应该能够将任何值强制转换为字符串,错误除外。因此,如果有返回错误的公式,则可能会导致类型不匹配。这里有另一种使用Find方法的方法可以避免这个问题。查找可能比在列中循环要慢,但如果没有大量数据,您就不会注意到它

Sub DeleteOverDue()

    Dim i As Long
    Dim rFound As Range

    'Loop backward through the used range
    For i = Sheet1.usedRange.Rows.Count To 1 Step -1
        'Should find "due" and "overdue" because of xlPart
        Set rFound = Sheet1.usedRange.Cells(i, 1).EntireRow.Find("due", , xlValues, xlPart)
        'If it's not found, delete the row
        If rFound Is Nothing Then
            Sheet1.usedRange.Cells(i, 1).EntireRow.Delete
        End If
    Next i

End Sub

注意:此代码删除数据,因此请在实际数据的副本上使用它,直到您知道它适合您。

您可以发布excel工作表的屏幕截图以及您希望合计的数据值吗?仅仅通过文字描述很难理解这个问题。不确定我是如何做到的,让我试着更好地解释一下……A列中的展台有克莱特名称和其他项目细节,包括向北京提交的ciolumns中的成本,但如果增加其他列,这一点可能会改变。这些行列出了有许多项目的单个项目。每个月我们都必须计算出到期和逾期收入——在BL列中有一个excel函数,但这可能会改变每个mth,该mth标记哪些项目到期和逾期。我想滚动浏览每一行,删除所有列,并从复印表中删除确定的列,然后合计该列,以便我们知道欠款金额。感谢您的回答,这看起来很不错,但我尝试在我的工作表上运行此代码,在这一行中,如果InStr1、lcasuedsedrangeirow、iColumn、过期>0或InStr1,LCASUESEDRANGEIROW,iColumn,due>0那么我正在查找的列中只包含文本…这会对这一行产生影响吗?您运行的是哪个版本的excel?好的,我在2007年这样做了。要检查类型不匹配的内容可能是lcasuedRangeIrow、iColumn。检查UsedRangeRow、iColumn是否实际返回字符串。通过添加一块手表查看返回值来检查这一点。非常感谢您的时间和努力-我将看看我能从这里做些什么。。。。