|
楼主 |
发表于 2019-3-11 20:44
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub a依主料合并()
- Dim rng1, rng2 As Range, addr$, adr$
- Dim i As Long, j As Byte, k As Byte
- Application.ScreenUpdating = False
- For i = 2 To Range("A1048576").End(xlUp).Row
- If Cells(i, 1) <> "" Then
- Set rng1 = Range("a:a").Find(Cells(i, 1).Value, lookat:=xlWhole)
- addr = rng1.Address '第一个地址是addr
-
- Do
- Set rng1 = Range("a:a").FindNext(rng1)
- adr = rng1.Address '下一个的地址是adr
-
- If adr <> addr Then
- For j = 1 To 10
- k = Application.WorksheetFunction.CountIf(Range(Cells(i, 1), Cells(i, Cells(i, 16384).End(xlToLeft).Column)), Cells(rng1.Row, j))
- If Cells(rng1.Row, j) = "" Then
-
- Else
- If k > 0 Then
- Cells(rng1.Row, j).Clear
- Else
- Cells(i, Cells(i, 16384).End(xlToLeft).Column + 1) = Cells(rng1.Row, j)
- Cells(i, Cells(i, 16384).End(xlToLeft).Column).Interior.ColorIndex = 3
- Cells(rng1.Row, j).Clear
-
- End If
- End If
- Next j
- End If
- Loop Until adr = addr
- End If
- Next i
- Application.ScreenUpdating = True
- MsgBox "完成"
- End Sub
- Sub b去空行()
- Dim i As Long
- Application.ScreenUpdating = False
- For i = Range("A1048576").End(xlUp).Row To 2 Step -1
- If Cells(i, 1) = "" Then
- Rows(i).Delete shift:=xlUp
- End If
- Next i
- Application.ScreenUpdating = True
- MsgBox "完成"
- End Sub
- Sub c开始分类()
- Dim rng1 As Range, addr As String, adr As String
- Dim i As Long, j As Byte, n As Integer, k As Byte
- n = 1
- k = Columns(InputBox("最后一个次料列标是:")).Column
- Application.ScreenUpdating = False
- For i = 2 To Range("A1048576").End(xlUp).Row
- For j = 1 To k
- If Cells(i, j) <> "" Then
- Set rng1 = Range(Cells(2, 1), Cells(Range("A1048576").End(xlUp).Row, k)).Find(Cells(i, j).Value, lookat:=xlWhole)
- addr = rng1.Address
- If Cells(rng1.Row, k + 1) = "" Then
- Cells(rng1.Row, k + 1) = n
- n = n + 1
- End If
-
- Do
- Set rng1 = Range(Cells(2, 1), Cells(Range("A1048576").End(xlUp).Row, k)).FindNext(rng1)
- adr = rng1.Address
- If adr <> addr Then
- If Cells(rng1.Row, k + 1) = "" Then
- Cells(rng1.Row, k + 1) = Cells(Range(addr).Row, k + 1)
- Else
- If Cells(rng1.Row, k + 1) <> Cells(Range(addr).Row, k + 1) Then
- Cells(rng1.Row, k + 1).Interior.ColorIndex = 3
- MsgBox "可能是多方,已标记红底色!"
- End If
- End If
- End If
- Loop Until addr = adr
- End If
- Next j
- Next i
- Application.ScreenUpdating = True
- End Sub
复制代码
这是原来写的代码,但数据量大时运行过慢,所以求数组或字典的解决办法,供参考逻辑. |
|