bingdu100b 2024-06-20 20:54 采纳率: 100%
浏览 1
已结题

宏语句,不知道哪里出了问题

EXCEL中 写一个宏运行,第一列遇到空值时,整行删除上移一行,第二列非上海特定字段,整行删除上移一行,求帮助,谢谢

Sub DeleteRows()
Dim i, j, k, l As Long
Set mysheet1 = ThisWorkbook.Worksheets("原信息") '定义工作表
For i = 2 To 2000 '第二行到1000行
For j = 1 To 20 '第1列到20列
If mysheet1.Cells(i, 1) = "" Then '如果单元格里面包含空格,则删除行
mysheet1.Rows(i).Delete shift:=xlUp '删除行后下行上移
If mysheet1.Cells(i, 2) <> "上海" Or "闵行" Or "嘉定" Or "青浦" Or "徐汇" Or "浦东" Or "杨浦" Or "宝山" Or "长宁" Or "黄浦" Or "虹口" Or "奉贤" Or "金山" Or "松江" Or "崇明" Then '如果单元格里面不包含以上内容,则删除行
mysheet1.Rows(i).Delete shift:=xlUp '删除行后下行上移
End If
Next
Next

End Sub

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-20 20:54
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的宏代码中存在一些需要修正的地方。首先,我们需要确保逻辑正确,并且代码能够正确地执行删除行的操作。以下是修正后的宏代码:

    Sub DeleteRows()
        Dim i As Long
        Dim mysheet1 As Worksheet
        Set mysheet1 = ThisWorkbook.Worksheets("原信息") '定义工作表
    
        ' 从最后一行向上遍历,避免因删除行而影响循环
        For i = mysheet1.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
            ' 检查第一列是否为空
            If IsEmpty(mysheet1.Cells(i, 1).Value) Then
                mysheet1.Rows(i).Delete Shift:=xlUp
            Else
                ' 检查第二列是否不包含指定的上海地区字段
                If Not (InStr(1, mysheet1.Cells(i, 2).Value, "上海") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "闵行") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "嘉定") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "青浦") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "徐汇") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "浦东") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "杨浦") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "宝山") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "长宁") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "黄浦") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "虹口") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "奉贤") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "金山") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "松江") > 0 Or _
                         InStr(1, mysheet1.Cells(i, 2).Value, "崇明") > 0) Then
                    mysheet1.Rows(i).Delete Shift:=xlUp
                End If
            End If
        Next i
    End Sub
    

    以下是对代码的几点说明和修正:

    1. 我将循环的起始点设置为从最后一行向上遍历,这样可以避免在删除行时影响循环的索引。
    2. 使用了 IsEmpty 函数来检查第一列的单元格是否为空。
    3. 修正了第二列的检查逻辑,使用 InStr 函数来检查是否包含指定的字符串,并用 Not 来反转逻辑,如果第二列不包含任何一个指定的字符串,则删除该行。
    4. 移除了多余的变量声明,因为只需要一个循环变量 i

    请注意,这段代码应该在Excel的VBA编辑器中运行,而不是Python环境。如果你需要进一步的帮助或有其他问题,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月20日