ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2804|回复: 11

[求助] 有偿求助,删除符合条件的行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-22 11:56 | 显示全部楼层 |阅读模式
绝对会给钱,详细说明看我附件,接单联系1992928400


对于工作薄“做分表前的总表”,工作薄4,5,7,这个4个工作薄做处理。

对于D列,最后一个斜杠“/”后面,常见电镀或者喷漆颜色做处理。

常见颜色如下:

           韩国金
           韩国金+象牙白

           土豪金
           土豪金+酒红

           香槟金
           香槟金+象牙白

           
           美金
           美金+象牙白

           S金
           S金+象牙白

           拉丝铜本色
           拉丝铜本色+擦咖啡

现在要求,对于有+颜色的,把同单据日期,同型号的一行或者几行都删除掉。
即,首先查找D列最后一个斜杠后面,颜色有+的,对于上述带加号的颜色,
找到它,然后再去找与它A,B列都相同的行,这一行必然是没带加号的颜色,
一般都会找到,找不到就不做任何动作,找到了就把同A,B列值的,没带加号
颜色的行,一行或者几行,删除掉。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-22 11:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
附件在此呢

先前有宏,别弄乱数据.rar

1.24 MB, 下载次数: 32

TA的精华主题

TA的得分主题

发表于 2018-6-22 20:44 | 显示全部楼层
'参与一下,怎么理解怎么写,数据量大按无序来写的,速度有点慢。

'供参考

Option Explicit

Sub test()
  Dim i, j, mark, t, tt, arr, sht
  mark = "做457"
  Application.ScreenUpdating = False
  For Each sht In Sheets
    If InStr(mark, Left(sht.Name, 1)) Then
      With Sheets(sht.Name)
        arr = .[a1].CurrentRegion
        For i = 2 To UBound(arr, 1)
          If InStr(arr(i, 4), "/") Then
            t = Split(arr(i, 4), "/"): t = t(UBound(t))
            If InStr(t, "+") Then
              t = Split(t, "+")
              For j = 2 To UBound(arr, 1)
                If Len(arr(j, 1)) Then
                  If arr(i, 1) & arr(i, 2) = arr(j, 1) & arr(j, 2) Then
                    If InStr(arr(j, 4), "/") Then
                      tt = Split(arr(j, 4), "/")
                      If tt(UBound(tt)) = t(0) Or tt(UBound(tt)) = t(1) Then arr(j, 1) = vbNullString
                    End If
                  End If
                End If
              Next
            End If
          End If
        Next
        For i = UBound(arr, 1) To 2 Step -1
          If Len(arr(i, 1)) = 0 Then .Rows(i).Delete
        Next
      End With
    End If
  Next
  Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-23 08:34 | 显示全部楼层
用这个测试吧,上一个附件无效的

用这个测试去掉不带加号的物料.rar

9.47 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-23 08:39 | 显示全部楼层
按照这个要求,去掉绿色的行,用代码,留下其他的别动

用代码去掉绿色的行

用代码去掉绿色的行

TA的精华主题

TA的得分主题

发表于 2018-6-23 09:12 | 显示全部楼层
'不会这么简单吧,不匹配颜色?

'型号有2个,取得是第二列

Option Explicit

Sub test()
  Dim arr, dic, i, j, s, t, n
  Set dic = CreateObject("scripting.dictionary")
  arr = [a1].CurrentRegion
  For i = 2 To UBound(arr, 1)
    If InStr(arr(i, 4), "/") Then
      t = Split(arr(i, 4), "/")
      If InStr(t(UBound(t)), "+") Then dic(arr(i, 1) & arr(i, 2)) = vbNullString
    End If
  Next
  n = 1
  For i = 2 To UBound(arr, 1)
    s = arr(i, 1) & arr(i, 2)
    If dic.exists(s) Then
      If InStr(arr(i, 4), "+") Then
        n = n + 1
        For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
      End If
    Else
      n = n + 1
      For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
    End If
  Next
  With [a1]
    .Resize(UBound(arr, 1), UBound(arr, 2)).ClearContents
    .Resize(n, UBound(arr, 2)) = arr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-23 09:29 | 显示全部楼层
'可能是这样?3楼的代码改写的,但颜色需要先定义好。觉得3楼的代码更靠谱些。

Option Explicit

Sub test()
  Dim arr, dic(1), i, j, s, t, n
  For i = 0 To UBound(dic)
    Set dic(i) = CreateObject("scripting.dictionary")
  Next
  t = Split("韩国金 象牙白 土豪金 酒红 香槟金 象牙白 美金 象牙白 S金 象牙白 拉丝铜本色")
  For i = 0 To UBound(t): dic(1)(t(i)) = vbNullString: Next
  arr = [a1].CurrentRegion
  For i = 2 To UBound(arr, 1)
    If InStr(arr(i, 4), "/") Then
      t = Split(arr(i, 4), "/")
      If InStr(t(UBound(t)), "+") Then dic(0)(arr(i, 1) & arr(i, 2)) = vbNullString
    End If
  Next
  n = 1
  For i = 2 To UBound(arr, 1)
    s = arr(i, 1) & arr(i, 2)
    If dic(0).exists(s) Then
      If InStr(arr(i, 4), "/") Then
        t = Split(arr(i, 4), "/")
        If InStr(arr(i, 4), "+") Or Not dic(1).exists(t(UBound(t))) Then
          n = n + 1
          For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
        End If
      Else
        n = n + 1
        For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
      End If
    Else
      n = n + 1
      For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
    End If
  Next
  With [a1]
    .Resize(UBound(arr, 1), UBound(arr, 2)).ClearContents
    .Resize(n, UBound(arr, 2)) = arr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-6-23 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3楼的代码修改了一下,觉得3楼的代码会更靠谱些
用这个测试去掉不带加号的物料.zip (15.1 KB, 下载次数: 1)




TA的精华主题

TA的得分主题

发表于 2018-6-23 10:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
'再猜一个:

'纯看图写代码,按子件描述来瞎掰。觉得你这描述有问题,最终变成了一个文字题。

Option Explicit

Sub test()
  Dim arr, i, j, t, s, n, dic
  Set dic = CreateObject("scripting.dictionary")
  arr = [a1].CurrentRegion
  For i = 2 To UBound(arr, 1)
    If InStr(arr(i, 4), "/") Then
      t = Split(arr(i, 4), "/")
      If InStr(t(UBound(t)), "+") Then
        t = Replace(arr(i, 4), t(UBound(t)), vbNullString)
        dic(t) = vbNullString
      End If
    End If
  Next
  n = 1
  For i = 2 To UBound(arr, 1)
    If InStr(arr(i, 4), "/") Then
      t = Split(arr(i, 4), "/"): s = t(UBound(t))
      t = Replace(arr(i, 4), s, vbNullString)
      If dic.exists(t) Then
        If InStr(s, "+") Then
          n = n + 1
          For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
        End If
      Else
        n = n + 1
        For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
      End If
    Else
      n = n + 1
      For j = 1 To UBound(arr, 2): arr(n, j) = arr(i, j): Next
    End If
  Next
  With [a1]
    .Resize(UBound(arr, 1), UBound(arr, 2)).ClearContents
    .Resize(n, UBound(arr, 2)) = arr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-23 11:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 16:28 , Processed in 0.052125 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表