Board logo

標題: [發問] 判斷儲存格內有幾個字元,並以兩個為單位排列 [打印本頁]

作者: a703130    時間: 2012-3-12 20:39     標題: 判斷儲存格內有幾個字元,並以兩個為單位排列

請問各位前輩
如題,舉個例子
        來源             輸出
           B                   C
1   0x0753         53-07
2   0x1234         34-12
3   0x0900         00-09
4   0x123456    56-34-12

    下面指單一儲存格時:
  1.     Dim x,i  As Integer
  2.     x = (Len(Mid(Cells(1, 2), 3)))/2              '計算共有幾個兩個一組
  3.     For i = 1 To x                                               '要做的次數
  4.         要請前輩幫忙的地方
  5.     Next
複製代碼
我所能想到的地方如上:不知道迴圈內應該怎麼做計算
如果前輩有其他更簡單的方式,也請不吝指教

謝謝
作者: oobird    時間: 2012-3-12 21:30

  1. Sub yy()
  2.     Dim x$, w$, i%, j%
  3.     For j = 1 To [b65536].End(3).Row
  4.     w = Mid(Cells(j, 2), 3)
  5.     For i = Len(w) To 2 Step -2
  6.    x = IIf(x = "", Mid(w, i - 1, 2), x & "-" & Mid(w, i, 2))
  7.     Next
  8.     Cells(j, 3) = x
  9.     x = ""
  10.     Next
  11. End Sub
複製代碼

作者: Hsieh    時間: 2012-3-12 21:48

回復 1# a703130


    以x字元為分界
  1. Sub nn()
  2. Dim ar()
  3. For Each a In Range([B1], [B1].End(xlDown))
  4.    For i = Len(Split(a, "x")(1)) - 1 To 1 Step -2
  5.      ReDim Preserve ar(s)
  6.      ar(s) = Mid(Split(a, "x")(1), i, 2)
  7.      s = s + 1
  8.    Next
  9.    a.Offset(, 1) = Join(ar, "-")
  10.    Erase ar
  11.    s = 0
  12. Next
  13. End Sub
複製代碼

作者: a703130    時間: 2012-3-13 11:55

oobird 發表於 2012-3-12 21:30


經過測試
他會變成
0x1234   43-23

這是否有環節上有問題??
作者: a703130    時間: 2012-3-13 11:57

回復 3# Hsieh

我想請問
Len(Split(a, "x")(1))

(1) 用意何在??
我將(1)拿掉後,會出現型態不符合~這是用來變更型態嗎??
作者: oobird    時間: 2012-3-13 12:23

經過測試
他會變成
0x1234   43-23

這是否有環節上有問題??
a703130 發表於 2012-3-13 11:55


[attach]9964[/attach]
修正一下
作者: Hsieh    時間: 2012-3-13 15:48

回復 5# a703130

Split(a, "x")會傳回一個字串陣列
例如:
a="01ax12345"
Split(a, "x")則傳回
array("01a","12345")這樣的陣列
所以,Split(a, "x")(0)="01a"
Split(a, "x")(1)="12345"
作者: a703130    時間: 2012-3-13 16:28

回復 7# Hsieh


    了解您的意思了~非常謝謝

    這功能還真方便
作者: a703130    時間: 2012-3-13 16:28

回復 6# oobird


   跟 Hsieh 大大的方法有異曲同工之妙
   讓我多學了一種
   非常感激!!
作者: GBKEE    時間: 2012-3-13 17:39

回復 9# a703130
這些也可試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim AR(1), i As Integer, ii As Integer, s As String
  4.     With Range([B1], [B1].End(xlDown))              '資料範圍
  5.         AR(0) = .Value                              '資料置入陣列
  6.         .Replace "*x", "", LookAt = xlPart          '不要的資料取代為""字串
  7.         AR(1) = .Value                              '整理後的資料置入陣列
  8.         .Value = AR(0)                              '還原原本資料
  9.         For i = 1 To UBound(AR(1))                  '整理後的資料的陣列
  10.             s = ""                                  '清空字串變數
  11.             For ii = Len(AR(1)(i, 1)) To 1 Step -2   '由字串尾端
  12.                 s = s & "-" & Mid(AR(1)(i, 1), ii - 1, 2) '取二字元置入字串變數
  13.             Next
  14.             AR(1)(i, 1) = Mid(s, 2)                  '陣列的元素=字串變數
  15.         Next
  16.         .Offset(, 1) = AR(1)                         '資料範圍向右位移一欄範圍資料=AR(1)
  17.     End With
  18. End Sub
  19. Sub Ex1()
  20.     Dim AR, i As Integer, ii As Integer, xi As Variant, s As String
  21.     With Range([B1], [B1].End(xlDown))              '資料範圍
  22.         AR = .Value                                 '資料置入陣列
  23.         For i = 1 To UBound(AR)
  24.             xi = InStr(AR(i, 1), "x") + 1           '陣列的元素中尋找"x"
  25.             xi = Mid(AR(i, 1), xi)                  '取得正確資料
  26.             s = ""                                  '清空字串變數
  27.             For ii = Len(xi) To 1 Step -2           '由字串尾端
  28.                 s = s & "-" & Mid(xi, ii - 1, 2)    '取二字元置入字串變數
  29.             Next
  30.             AR(i, 1) = Mid(s, 2)                     '陣列的元素=字串變數
  31.         Next
  32.         .Offset(, 1) = AR                            '資料範圍向右位移一欄範圍資料=AR
  33.     End With
  34. End Sub
  35. Sub Ex2()
  36.     Dim AR, i As Integer, ii As Integer, s As String
  37.     With Range([B1], [B1].End(xlDown))                  '資料範圍
  38.         AR = .Value                                     '資料置入陣列
  39.         For i = 1 To .Cells.Count                       '資料範圍的第一個儲存格到最後一個儲存格
  40.             ii = Len(.Cells(i))                         '計算儲存格的字元數
  41.             s = ""                                      '清空字串變數
  42.             Do
  43.                 s = s & "-" & Mid(.Cells(i), ii - 1, 2) '取二字元置入字串變數
  44.                ii = ii - 2                              '由後往前推進2字元
  45.             Loop Until InStr(Mid(.Cells(i), ii - 1, 2), "x")  '離開迴圈條件:找到不要的字串
  46.             AR(i, 1) = Mid(s, 2)                        '陣列的元素=字串變數
  47.         Next
  48.         .Offset(, 1) = AR                               '資料範圍向右位移一欄範圍資料=AR
  49.     End With
  50. End Sub
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)