標題:
[發問]
判斷儲存格內有幾個字元,並以兩個為單位排列
[打印本頁]
作者:
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
下面指單一儲存格時:
Dim x,i As Integer
x = (Len(Mid(Cells(1, 2), 3)))/2 '計算共有幾個兩個一組
For i = 1 To x '要做的次數
要請前輩幫忙的地方
Next
複製代碼
我所能想到的地方如上:不知道迴圈內應該怎麼做計算
如果前輩有其他更簡單的方式,也請不吝指教
謝謝
作者:
oobird
時間:
2012-3-12 21:30
Sub yy()
Dim x$, w$, i%, j%
For j = 1 To [b65536].End(3).Row
w = Mid(Cells(j, 2), 3)
For i = Len(w) To 2 Step -2
x = IIf(x = "", Mid(w, i - 1, 2), x & "-" & Mid(w, i, 2))
Next
Cells(j, 3) = x
x = ""
Next
End Sub
複製代碼
作者:
Hsieh
時間:
2012-3-12 21:48
回復
1#
a703130
以x字元為分界
Sub nn()
Dim ar()
For Each a In Range([B1], [B1].End(xlDown))
For i = Len(Split(a, "x")(1)) - 1 To 1 Step -2
ReDim Preserve ar(s)
ar(s) = Mid(Split(a, "x")(1), i, 2)
s = s + 1
Next
a.Offset(, 1) = Join(ar, "-")
Erase ar
s = 0
Next
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
這些也可試試看
Option Explicit
Sub Ex()
Dim AR(1), i As Integer, ii As Integer, s As String
With Range([B1], [B1].End(xlDown)) '資料範圍
AR(0) = .Value '資料置入陣列
.Replace "*x", "", LookAt = xlPart '不要的資料取代為""字串
AR(1) = .Value '整理後的資料置入陣列
.Value = AR(0) '還原原本資料
For i = 1 To UBound(AR(1)) '整理後的資料的陣列
s = "" '清空字串變數
For ii = Len(AR(1)(i, 1)) To 1 Step -2 '由字串尾端
s = s & "-" & Mid(AR(1)(i, 1), ii - 1, 2) '取二字元置入字串變數
Next
AR(1)(i, 1) = Mid(s, 2) '陣列的元素=字串變數
Next
.Offset(, 1) = AR(1) '資料範圍向右位移一欄範圍資料=AR(1)
End With
End Sub
Sub Ex1()
Dim AR, i As Integer, ii As Integer, xi As Variant, s As String
With Range([B1], [B1].End(xlDown)) '資料範圍
AR = .Value '資料置入陣列
For i = 1 To UBound(AR)
xi = InStr(AR(i, 1), "x") + 1 '陣列的元素中尋找"x"
xi = Mid(AR(i, 1), xi) '取得正確資料
s = "" '清空字串變數
For ii = Len(xi) To 1 Step -2 '由字串尾端
s = s & "-" & Mid(xi, ii - 1, 2) '取二字元置入字串變數
Next
AR(i, 1) = Mid(s, 2) '陣列的元素=字串變數
Next
.Offset(, 1) = AR '資料範圍向右位移一欄範圍資料=AR
End With
End Sub
Sub Ex2()
Dim AR, i As Integer, ii As Integer, s As String
With Range([B1], [B1].End(xlDown)) '資料範圍
AR = .Value '資料置入陣列
For i = 1 To .Cells.Count '資料範圍的第一個儲存格到最後一個儲存格
ii = Len(.Cells(i)) '計算儲存格的字元數
s = "" '清空字串變數
Do
s = s & "-" & Mid(.Cells(i), ii - 1, 2) '取二字元置入字串變數
ii = ii - 2 '由後往前推進2字元
Loop Until InStr(Mid(.Cells(i), ii - 1, 2), "x") '離開迴圈條件:找到不要的字串
AR(i, 1) = Mid(s, 2) '陣列的元素=字串變數
Next
.Offset(, 1) = AR '資料範圍向右位移一欄範圍資料=AR
End With
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)