返回列表 上一主題 發帖

[發問] 資料剖析+加框線

[發問] 資料剖析+加框線

請問各位高手大大, 如何將這段功能轉為程式碼
1.  有點類似資料剖析的概念, 因為格式不一定 , 但規則確定的是刪除從左邊數過來兩個『-』
     保留紅色的字體

2.  畫線後判斷不同的加粗體分辨



Q1.png
2017-7-29 06:24


TEST.rar (8.18 KB)
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

本帖最後由 GBKEE 於 2017-7-29 09:58 編輯

回復 1# v03586
試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Range, sp As Variant, i As Integer, Msg As Boolean, St As String
  4.     St = ",AAP,PPA,QQP,POO,"   '末碼規則
  5.     With Range("h2").CurrentRegion
  6.     'Range.CurrentRegion 屬性 傳回 Range 物件,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀的。
  7.         For Each E In .Cells
  8.            sp = Split(E.Value, "-")
  9.            'Split 函數 傳回一個陳列索引從零開始的一維陣列 , 它包含指定數目的子字串
  10.             Msg = InStr(St, "," & UCase(UBound(sp)) & ",")
  11.             For i = 0 To UBound(sp) - IIf(Msg, 2, 1)
  12.                 E = Replace(E, sp(i) & "-", "")
  13.                 'Replace 函數 傳回一個字串 , 該字串中指定的子字串已被取代成另一子字串, 並且取代發生的次數也是指定的
  14.             Next
  15.         Next
  16.         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium, ColorIndex:=xlAutomatic
  17.         For Each E In .Cells
  18.             
  19.              With E.Borders(9)  'xlInsideVertical
  20.                 .LineStyle = xlContinuous
  21.                 .ColorIndex = xlAutomatic
  22.                 .TintAndShade = 0
  23.                 .Weight = IIf(E.Offset(1) <> E, xlThick, xlMedium)
  24.             End With
  25.         Next
  26.     End With
  27. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

[版主管理留言]
  • GBKEE(2017/7/29 10:02): 2#程式碼已更新 , 再試試看

本帖最後由 v03586 於 2017-7-29 09:37 編輯

回復 2# GBKEE


    感謝版大的支援,
    想問一下, 他的末碼規則不一定是QQP 的話, 也可能是別的AAP 之類的 , 不固定, 是還要在加一串
  1. For i = 0 To UBound(sp) - IIf(InStr(E, "QQP"), 2, 1) and UBound(sp) - IIf(InStr(E, "AAP"), 2, 1)
複製代碼
這樣嗎?? 確定固定規則模式從左邊數來兩個『-』是要刪除的
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

本帖最後由 v03586 於 2017-7-29 10:28 編輯

回復 2# GBKEE


    板大加入了末碼規則後, 程式跑完變成 只保留末碼, 『AAP , QQP 』
    不是變成保留像圖片中保留紅色字體部分 QQ
    我按F8 去跑  會變成下面這段 把他變成 AAP , QQP
  1. For i = 0 To UBound(sp) - IIf(Msg, 2, 1)
  2.                 E = Replace(E, sp(i) & "-", "")
  3.                 'Replace 函數 傳回一個字串 , 該字串中指定的子字串已被取代成另一子字串, 並且取代發生的次數也是指定的
  4.             Next
複製代碼
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

回復 4# v03586

再上傳檔案看看
2#程式碼 執行後如圖

未命名.jpg
2017-7-29 12:28
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

本帖最後由 v03586 於 2017-7-29 12:56 編輯

回復 5# GBKEE

   如圖片說明 , 唯一找的到不變的規則, 就是從左邊往右算兩個『-』 不保留
    如果從右邊算, 有的會有末碼QQP 等字碼
   
Q2.png
2017-7-29 12:46


     有的字串會有三個『-』  e.g.
     XX-XXXX-XXXX-QQP
     有的字串只有兩個『-』 e.g.
    XX-XXXX-XXXX
    要保留的 依循有效規律規則, 從左邊往右算2個『-』


TEST.rar (16.76 KB)
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

回復 6# v03586

修改了, 試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Range, sp As Variant, i As Integer
  4.     With Range("h2").CurrentRegion
  5.     'Range.CurrentRegion 屬性 傳回 Range 物件,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀的。
  6.         For Each E In .Cells
  7.            sp = Split(E.Value, "-")
  8.            'Split 函數 傳回一個陳列索引從零開始的一維陣列 , 它包含指定數目的子字串
  9.             If UBound(sp) > 2 Then   ' 規則, 有第二個『-』,才處裡
  10.                 For i = 0 To IIf(UBound(sp) > 2, UBound(sp) - 2, 1)
  11.                     E = Replace(E, sp(i) & "-", "")
  12.                 'Replace 函數 傳回一個字串 , 該字串中指定的子字串已被取代成另一子字串, 並且取代發生的次數也是指定的
  13.                 Next
  14.             End If
  15.         Next
  16.         .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium, ColorIndex:=xlAutomatic
  17.         For Each E In .Cells
  18.              With E.Borders(9)  'xlInsideVertical
  19.                 .LineStyle = xlContinuous
  20.                 .ColorIndex = xlAutomatic
  21.                 .TintAndShade = 0
  22.                 .Weight = IIf(E.Offset(1) <> E, xlThick, xlMedium)
  23.             End With
  24.         Next
  25.     End With
  26. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

回復 6# v03586
另種解法,請參考。
TEST-1.rar (22.02 KB)
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

TT = "09-SAF5-1111K-QQP"
TT = Split(Replace(TT, "-", "+", , 2), "+")(2)
MsgBox TT

TT = "09-C231-100WK"
TT = Split(Replace(TT, "-", "+", , 2), "+")(2)
MsgBox TT
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog
請詳閱 論壇版規愛惜帳號,一起創造美好的學習討論空間。

TOP

  1. Sub ex()
  2. Dim A As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. For Each A In Range("H2:H15")
  5.   st = Split(Application.WorksheetFunction.Substitute(A, "-", Chr(10), 2), Chr(10))(1)
  6.   A.Offset(, 1) = st '寫入
  7.   If IsEmpty(d(st)) Then '同文字儲存格範圍暫存
  8.     Set d(st) = A.Offset(, 1)
  9.     Else
  10.     Set d(st) = Union(d(st), A.Offset(, 1))
  11.   End If
  12. Next
  13. For Each ky In d.keys
  14. For i = 7 To 12
  15. With d(ky).Borders(i) '畫框線
  16.         .LineStyle = xlContinuous
  17.         .ColorIndex = 0
  18.         .TintAndShade = 0
  19.         .Weight = IIf(i > 10, xlThin, xlMedium)
  20. End With
  21. Next
  22. Next
  23. End Sub
複製代碼
回復 6# v03586
學海無涯_不恥下問

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題