1)工作表1.當客戶只有1位時.會比對不到.因而會當機
>> 如下,請測試看看,謝謝
Sub test()
Dim Arr, i&, N%
Application.ScreenUpdating = False
[E65535:G3].ClearContents
With Sheets("工作表1")
With .Range(.[A1], .[D65536].End(3))
Arr = .Value
For i = 3 To UBound(Arr)
N = N + 1
Arr(N, 1) = Arr(i, 1)
Arr(N, 2) = Arr(i, 2)
Arr(N, 3) = Mid(Arr(i, 3), 1, 2)
Next
If N > 0 Then
With .Range("E3").Resize(N, 3)
.Value = Arr
.Sort Key1:=.Item(3), Order1:=1, Header:=2
For i = 1 To N: .Cells(i, 3) = "A" & i: Next
End With
End If
End With
End With
Application.ScreenUpdating = True
End Sub
請再試看看,謝謝
Sub tt()
Dim Arr
With Sheets("工作表4")
With .Range(.[k1], .[a65536].End(3))
Arr = .Value
For i = 2 To UBound(Arr)
If InStr(Arr(i, 2), "A") Then
Arr(i, 11) = Int(Right(Arr(i, 2), 3))
Else
Arr(i, 11) = Int(Mid(Arr(i, 2), 4, 3)) & "s"
End If
Next
.Value = Arr
.Sort Key1:=.Item(11), Order1:=1, Header:=1
End With
.Range("k1:k" & UBound(Arr)) = ""
End With
End Sub作者: BV7BW 時間: 2021-4-12 21:29
回復 19#samwang
謝謝 S 大大
正是需求無誤
已可以由編號後2碼整合
在請問.如需用3碼.可再幫程式後加上註解?
** For i = 2 To UBound(Arr)**作者: samwang 時間: 2021-4-12 21:43
Sub tt2()
Dim Arr
With Sheets("工作表4")
With .Range(.[k1], .[a65536].End(3))
Arr = .Value '資料裝入Arr
For i = 2 To UBound(Arr)
If InStr(Arr(i, 2), "A") Then '編號有 A
Arr(i, 11) = Int(Right(Arr(i, 2), 3)) '取最後3碼的整數,數值裝入Arr(i,11)
Else
Arr(i, 11) = Int(Mid(Arr(i, 2), 4, 3)) & "s" '除了編號A以外的值,取-以後3碼整數+S,數值裝入Arr(i,11)
End If
Next
.Value = Arr 'Arr值貼回excel
.Sort Key1:=.Item(11), Order1:=1, Header:=1 '以K欄排序
End With
.Range("k1:k" & UBound(Arr)) = "" '清除K欄數值
End With
End Sub作者: samwang 時間: 2021-4-12 21:47
請測試看看,謝謝
Sub tt3()
Dim Arr
With Sheets("工作表4")
With .Range(.[k1], .[a65536].End(3))
Arr = .Value '資料裝入Arr
For i = 2 To UBound(Arr)
If InStr(Arr(i, 2), "S") Then '編號有 S
Arr(i, 11) = Int(Mid(Arr(i, 2), 4, 3)) & "s" '編號S,取-以後3碼整數+S,數值裝入Arr(i,11)
Else
Arr(i, 11) = Int(Right(Arr(i, 2), 3)) '除了編號S以外,取最後3碼的整數,數值裝入Arr(i,11)
End If
Next
.Value = Arr 'Arr值貼回excel
.Sort Key1:=.Item(11), Order1:=1, Header:=1 '以K欄排序
End With
.Range("k1:k" & UBound(Arr)) = "" '清除K欄數值
End With
End Sub作者: BV7BW 時間: 2021-4-13 11:40
謝謝 S 大大
目前運作順暢
感謝你勞心賜教 謝謝作者: BV7BW 時間: 2021-4-15 08:12
不知道是不是你要的需求,請確認看看,謝謝。
Sub tt4()
Dim Arr
With Sheets("工作表1")
With .Range(.[k1], .[a65536].End(3))
Arr = .Value '資料裝入Arr
For i = 2 To UBound(Arr)
If InStr(Arr(i, 2), "S") Then '編號有 S
Arr(i, 11) = Int(Mid(Arr(i, 2), 4, 3)) & "s" '編號S,取-以後3碼整數+S,數值裝入Arr(i,11)
Else
Arr(i, 11) = Int(Right(Arr(i, 2), 3)) '除了編號S以外,取最後3碼的整數,數值裝入Arr(i,11)
End If
Next
.Value = Arr 'Arr值貼回excel
.Sort Key1:=.Item(6), Order1:=1, _
Key2:=.Item(11), Order1:=1, Header:=1 '以F、K欄排序
End With
.Range("k1:k" & UBound(Arr)) = "" '清除K欄數值
End With
End Sub作者: BV7BW 時間: 2021-4-15 19:25
Sub 復整2()
Dim Arr
With Sheets("工作表3")
With .Range(.[k1], .[a65536].End(3))
Arr = .Value '資料裝入Arr
For i = 2 To UBound(Arr)
If Arr(i, 2) = "" Then GoTo 99 '空白就換下一個
If InStr(Arr(i, 2), "S") Then '編號有 S
Arr(i, 11) = Int(Mid(Arr(i, 2), 4, 3)) & "s" '編號S,取-以後3碼整數+S,數值裝入Arr(i,11)
Else
Arr(i, 11) = Int(Right(Arr(i, 2), 3)) '除了編號S以外,取最後3碼的整數,數值裝入Arr(i,11)
End If
99: Next
.Value = Arr 'Arr值貼回excel
.Sort Key1:=.Item(6), Order1:=1, _
Key2:=.Item(11), Order1:=1, Header:=1 '以F、K欄排序
End With
.Range("k1:k" & UBound(Arr)) = "" '清除K欄數值
End With
End Sub作者: BV7BW 時間: 2021-4-22 14:40