Board logo

標題: [發問] 儲存格字串長度大於255 [打印本頁]

作者: a77261988    時間: 2012-6-30 02:34     標題: 儲存格字串長度大於255

各位大哥好,小弟有一事想請教,
假設今天一儲存格內的內容為aaaaaaaa-aaaaa-aaa-aa-aa-a-a-.....................aaa-a-a-a-a-a-....
儲存格內的文字長度大於255,想要依每3個-符號做換行,有辦法做到嗎?
可以請各位大哥教教我嗎?   謝謝!
作者: GBKEE    時間: 2012-6-30 09:06

回復 1# a77261988
  1. Option Explicit
  2. Sub Ex()
  3. Dim W As Variant, xi As Integer
  4.     W = "aaaaaaaa-aaaaa-aaa-aa-aa-a-a-aaaaa-aaa-aa-aa-a-a-aaaaa- aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa- aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa-a-a-aaaaa- aa -aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a"
  5.     W = Split(W, "-")
  6.     For xi = 2 To UBound(W) Step 3
  7.         W(xi) = W(xi) & Chr(10)
  8.     Next
  9.     [A1] = Join(W, Chr(10))
  10. End Sub
複製代碼

作者: oobird    時間: 2012-6-30 14:16

怎麼一個問題的解讀會有這麼大的不同,呵呵!樓主的說明方式要加油。
我的理解是:
  1. Sub yy()
  2.     W = [A1]
  3.     For i = 1 To Len(W)
  4.         If Mid(W, i, 1) = "-" Then
  5.             j = j + 1
  6.             If j = 3 Then
  7.                 Mid(W, i, 1) = ",": j = 0
  8.             End If
  9.         End If
  10.     Next
  11.     W = Split(W, ",")
  12.     [b1].Resize(UBound(W) + 1, 1) = Application.Transpose(W)
  13. End Sub
複製代碼

作者: a77261988    時間: 2012-6-30 14:27

本帖最後由 a77261988 於 2012-6-30 14:44 編輯

GBKEE大哥你好,我有嘗試了你提供的程式,
但是我發現split()這個函式似乎是將找到的符號用空格隔開,
抱歉,可能是我所表達的語意不明,造成你的誤解,
所以我希望呈現的資訊
aaaaaaaa-aaaaa-aaa-
aa-aa-a-
a-aaaaa-aaa-
aa-aa-a-
a-aaaaa- aaa -
aa-aa-a -
版主大哥有沒有建議別的較符合我需求的函式,謝謝!
作者: a77261988    時間: 2012-6-30 14:45

oobird大哥你好,請問有辦法將這個內容塞在同一個儲存格嗎?
作者: oobird    時間: 2012-6-30 15:33

回復 5# a77261988
  1. Sub yy()
  2.     w = [A1]
  3.     For i = 1 To Len(w)
  4.         If Mid(w, i, 1) = "-" Then
  5.             j = j + 1
  6.             If j = 3 Then
  7.                 Mid(w, i, 1) = vbLf: j = 0
  8.             End If
  9.         End If
  10.     Next
  11.     [b1] = w
  12. End Sub
複製代碼

作者: oobird    時間: 2012-6-30 16:08

保留每行最后的"-"
  1. Sub yy()
  2.     w = [A1]
  3.     For i = 1 To Len(w)
  4.         If Mid(w, i, 1) = "-" Then
  5.             j = j + 1
  6.             If j = 3 Then
  7.                 Mid(w, i, 1) = ",": j = 0
  8.             End If
  9.         End If
  10.     Next
  11.     [b1] = Replace(w, ",", "-" & vbLf)
  12. End Sub
複製代碼

作者: a77261988    時間: 2012-6-30 16:29

oobird大哥,謝謝你的程式,
可否再請教一下,因為這樣子是對單一儲存格,
那如果換成多個儲存格去做整理,好像只要儲存格裡的字元長度大於255,
就會沒辦法作排序整理,我應該如何做呢?
作者: oobird    時間: 2012-6-30 16:52

只要儲存格裡的字元長度大於255,就會沒辦法作排序整理
應該沒這個道理,儲存格可以顯示1024個字元
要整理多個儲存格,最好上傳附件,以了解你要處理的區域
作者: a77261988    時間: 2012-6-30 17:10

oobird大哥,大概是這樣子,然後我想對D Column做整理.
麻煩你了,謝謝!

[attach]11547[/attach]
作者: GBKEE    時間: 2012-6-30 17:13

回復 4# a77261988
  1. Option Explicit
  2. Sub Ex()
  3. Dim W As Variant, xi As Integer
  4.     W = "1aaaaaaaa-aaaaa-aaa-2aa-aa-a-3a-aaaaa-aaa-4aa-aa-a-a-aaaaa- aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa- aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa-a-a-aaaaa- aa -aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a - aaaaa - aaa - aa - aa - a - a"
  5.     W = Replace(W, "-", "-,")
  6.     W = Split(W, ",")
  7.     For xi = 2 To UBound(W) Step 3
  8.         W(xi) = W(xi) & Chr(10)
  9.     Next
  10.     [a1] = Join(W, Chr(10))
  11. End Sub
複製代碼

作者: oobird    時間: 2012-6-30 19:25

這樣整理不是顯得更亂?
  1. Sub yy()
  2.     For r = 1 To [d1000].End(3).Row
  3.         w = Cells(r, 4).Value
  4.         For i = 1 To Len(w)
  5.             If Mid(w, i, 1) = "-" Then
  6.                 j = j + 1
  7.                 If j = 3 Then
  8.                     Mid(w, i, 1) = ",": j = 0
  9.                 End If
  10.             End If
  11.         Next
  12.         Cells(r, 4) = Trim(Replace(w, ",", "-" & vbLf))
  13.     Next
  14. End Sub
複製代碼

作者: a77261988    時間: 2012-6-30 21:16

oobird大哥,因為原本的資料更多更長,
需要透過由幾個符號換行來檢視資料,所以有這個需求,
程式完全達到我的需求,非常的感謝你,
但是有一個疑問就是,當資料整理完之後,
將儲存格拉開,前面會有很多空白處,這是什麼原因呢?
作者: oobird    時間: 2012-6-30 21:50

不會有空白的,全選~把格式~對齊方式選"靠上對齊",前面就不會空了!
程式碼套用GBKEE版主的代碼效率會更高:
  1. Sub yy()
  2.     For r = 1 To [d1000].End(3).Row
  3.         W = Cells(r, 4).Value
  4.         W = Replace(W, "-", "-,")
  5.         W = Split(W, ",")
  6.         For xi = 2 To UBound(W) Step 3
  7.             W(xi) = W(xi) & Chr(10)
  8.         Next
  9.         Cells(r, 4) = Trim(Join(W))
  10.     Next
  11. End Sub
複製代碼

作者: a77261988    時間: 2012-7-1 01:01

oobird大哥,再請問一下,有辦法將固定的[d1000]變成滑鼠點選的整列column嗎?
作者: Hsieh    時間: 2012-7-1 11:06

回復 15# a77261988
  1. Sub nn()
  2. Dim A As Range, i%, s%
  3. If Application.CountA(Selection.EntireColumn) = 0 Then Exit Sub '避免欄位無資料
  4. For Each A In Selection.EntireColumn.SpecialCells(xlCellTypeConstants)
  5. i = 0: s = 0: A = Application.WorksheetFunction.Substitute(A, Chr(10), "") '取消換行符號
  6. Do Until InStr(Mid(A, i + 1), "-") = 0
  7.   i = InStr(i + 1, A, "-")
  8.   s = s + 1
  9.   If s Mod 3 = 0 Then A = Application.WorksheetFunction.Replace(A, i, 1, "-" & Chr(10))
  10. Loop
  11. Next
  12. Selection.EntireColumn.AutoFit
  13. End Sub
複製代碼

作者: a77261988    時間: 2012-7-2 01:53

謝謝各位大哥!




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