【問題】分解儲存格內容 - 第 2 頁

第 2 頁,共 2 頁 首頁首頁 1 2
顯示結果從第 11 筆 到 18 筆,共計 18 筆
  1. #11
    會員
    註冊日期
    2002-02-25
    討論區文章
    8
    感謝夏先生

  2. #12
    Take it easy~ leonchou 的大頭照
    註冊日期
    2001-05-03
    討論區文章
    3,244
    呵~ Animal兄你又出現了阿, 久見久見~

    Instr 是 VBA 本身的函數, 不是 Excel VBA 的,
    所以你可能找錯地方囉~~
    Instr 是用來找出指定字元(字串)在另一字串中出現的位罝.
    Instr(起始位置,尋找目標字串,要尋找的字串) <--語法
    而 vbLf 是 VB 的內建常數, 指 "斷行符號".
    Instr(1, [A1], vbLf) 的意思就是 --
    斷行符號在A1儲存格字串出現的位置, 從第一個字起算.

  3. #13
    會員
    註冊日期
    2002-01-23
    討論區文章
    25

    另一方法請參考!

    以下有另一方法,請參考!
    (LEON大師有提示:
    此方法因為用到Split 函數,所以不適用於Excel 97,請注意!)

    Sub split_and_wrap2()

    S = Split([A1], vbLf): Range("A1:B1").Clear
    For i = 1 To UBound(S) + 1
    [A1] = [A1] & IIf(i = 1, "", vbLf) & Left(S(i - 1), 7)
    [B1] = [B1] & IIf(i = 1, "", vbLf) & Mid(S(i - 1), 8, Len(S(i - 1)) - 7)
    Next

    End Sub

  4. #14
    會員
    註冊日期
    2002-01-23
    討論區文章
    25

    TO: 常上此站的動物 

    關於您的問題,是這樣的:
    「實體上」,我離"LEON" 大師比較近
    (很羨慕吧!!??...開玩笑的,見不到面啦!!)
    他「以真人發音」告訴我:
    『以前曾用Split()回答別人的問題,人家說不能用;
    後來才發現是在Excel97下不能用...』。
    所以,您可能要去問他是在哪篇文章;我也不知道。

    另外,vbLf是=chr(10)沒錯...
    還有,順道一提的是:
    Split()實在很好用。
    以前要去算某一個文字列中出現了『某個字串或字元』幾次,

    例如以這次的例子來說:
    [A1]儲存格內有:
    (1)2010楊傳廣
    (2)2012紀政
    (3)2018戴室然
    (4)2110歐陽一濱
    想算有幾列(植樹問題→即為:間隔or換行字元vbLf的個數+1)的話;
    可以用↓來算有幾行:
    N = Len([A1]) - Len(Replace([A1], vbLf, "")) + 1
    然後,藉由split可以寫得稍短一點:
    N = UBound(Split([A1], vbLf)) + 1

    其實我本來的寫法是這樣的↓,後來才把它改成↑↑split_and_wrap2()

    那樣的。

    Sub Komi_split1()
    N = Len([A1]) - Len(Replace([A1], vbLf, "")) + 1
    '推算原本在[A1]儲存格內究竟有幾行。
    S = Split([A1], vbLf, N): Range("A1:B1").Clear
    '利用Split函數傳回那N行的各別字串。
    For i = 1 To N '進行那N行字串的截切、分解。
    [A1] = [A1] & IIf(i = 1, "", vbLf) & Left(S(i - 1), 7)
    [B1] = [B1] & IIf(i = 1, "", vbLf) & Mid(S(i - 1), 8, Len(S(i - 1)) - 7)
    Next

    End Sub

  5. #15
    會員
    註冊日期
    2002-01-23
    討論區文章
    25

    回覆: 回覆: TO: 常上此站的動物 

    TO: 常上此站的動物

    ↑您的問題,簡單說:
    在Excel工作表內是用ASCII Code(或說是系統預設字集BIG-5碼)來決定;
    而在VB(VBA)那邊是用Unicode Code來作比較,答案本來就不一樣。

    我比較確知的是:
    (1)Excel的﹝資料﹞→﹝排序﹞功能是依照ASCII Code來排的。
    在Excel 工作表內作「<」or「>」的運算,也是依照ASCII Code來決定的。您可以用code()及char()來確認。
    參考】:您用code()所得到的10進位數值,若轉成16進位值,其實就是BIG-5碼,可以用“內碼”輸入法試試看即知。
    另外,BIG-5內碼的排列是以”部首”順序搭配”總筆劃”來排的;
    您可以去造字程式媕Y,選擇一個字碼再藉由﹝參照﹞功能來瞧一瞧就明白了。

    (2)而在Excel VBA內作「<」or「>」的運算,則是依照下列↓來決定:
    a.OS是95以前的, 以BIG-5碼的代碼來決定。
    (98的時候就己經支援Unicode Code了);
    當時不論工作表內的排序orVBA比大小,結果應該都是一致的。
    不過這是殘留印象,我現在無法驗証。
    b.OS是98(含)以後的, 以Unicode Code來決定。
    而Unicode Code的排列,是以所謂「CJK漢字」的共通部首搭配筆劃數來排的。
    排出來的結果跟BIG-5碼或日文JIS、大陸GB code各別對照下,順位都有些許出入。
    請務必參考下表(上傳檔案code.jpg),可一目瞭然:


    附加圖片 附加圖片 code.jpg  

  6. #16
    會員
    註冊日期
    2002-01-23
    討論區文章
    25

    【小修正】

    To:常上此站的動物

    對不起, "民"字的Unicode是「6c11」不是「6cee」,我打錯了。
    你可以試試↓這個...

    Sub UnicodeTest()
    '顯示↓以下漢字所對應的Unicode,再倒著顯示以下Unicode碼所對應的漢字。
    Dim Ucd(8) As String
    ChWrd = Array("我", "是", "中", "華", "民", "國", "之", "國", "民")
    For i = 0 To UBound(ChWrd)
    Ucd(i) = Hex(AscW(ChWrd(i))) '抓各別漢字的Unicode,再轉成16進位值。
    Next '不轉16進位值,用10進位的也沒關係,但下面的"&H" &要拿掉。

    '【註】Ucd = Array("6211", "662f", "4e2d", "83ef", "6c11", "570b", "4e4b", "570b", "6c11")
    For i = 0 To UBound(Ucd)
    UniStr = UniStr + ChrW("&H" & Ucd(i))
    Next
    MsgBox UniStr
    End Sub

    P.S. 我剛有看了一下你那個Word.xls媕Y的"Function 字排序"&Function 字排序2"
    覺得你寫的有點長ㄟ,而且我比較不喜歡"逐一比對"的方式。
    如果你不嫌我太雞婆的話,我再把我的方法POST上來。
    等你的回答!

  7. #17
    會員
    註冊日期
    2002-01-23
    討論區文章
    25

    【請參考】To:常上此站的動物

    To:常上此站的動物

    ↓這兩個請參考;內容就不多解釋了...

    Function K字排序(SrcCell As Range) '照Unicode排序=你的字排序()
    Dim SrcWord()
    N = Len(SrcCell.Value): ReDim SrcWord(N)
    For i = 1 To N
    SrcWord(i) = CLng("&H" & Hex(AscW(Mid(SrcCell, i, 1))))
    Next
    For i = 1 To N
    K字排序 = K字排序 & ChrW(WorksheetFunction.Small(SrcWord, i))
    Next
    End Function

    Function K字排序2(SrcCell As Range) '照BIG-5碼排序=你的字排序之二
    Dim SrcWord()
    N = Len(SrcCell.Value): ReDim SrcWord(N)
    For i = 1 To N
    SrcWord(i) = Asc(Mid(SrcCell, i, 1))
    Next
    For i = 1 To N
    K字排序2 = K字排序2 & Chr(WorksheetFunction.Small(SrcWord, i))
    Next
    End Function

    有一點,請留意:
    第一個函數中的 CLng("&H" & Hex....) 看似多此一舉,卻是絕對必要的;
    至於原因,請原諒我壞心,你自個兒試試就知道了。

  8. #18
    會員
    註冊日期
    2002-01-23
    討論區文章
    25
    To:常上此網站的動物 先生

    您自己研究,不懂再PO上來吧!

類似的主題

  1. 在Excel的VBA中如何輸入儲存格內容有強迫換行的字串格式
    作者:ellery 所在討論版:-- OFFICE 相 關 軟 體 討 論 版
    回覆: 4
    最後發表: 2007-09-30, 10:34 AM
  2. 【求助】如何清除Excel儲存格內字串後面的空白
    作者:onestop888 所在討論版:-- HELP ME 電 腦 軟 硬 體 急 救 版
    回覆: 3
    最後發表: 2006-01-04, 07:30 PM
  3. 「excel」儲存格內容的轉換問題
    作者:Xano 所在討論版:-- OFFICE 相 關 軟 體 討 論 版
    回覆: 3
    最後發表: 2004-12-22, 10:48 AM
  4. 【閒聊】Excel 唸出"儲存格"內容???
    作者:larry0116 所在討論版:-- OFFICE 相 關 軟 體 討 論 版
    回覆: 2
    最後發表: 2004-04-28, 11:33 AM
  5. 【問題】購買D2G價格內容
    作者:coolsun 所在討論版:-- 網 路 技 術 版
    回覆: 0
    最後發表: 2002-03-06, 12:27 PM

 

excel vba 分解 換行 儲存格內容

發表文章規則

  • 不可以發表新主題
  • 不可以回覆文章
  • 不可以上傳附加檔案
  • 不可以編輯自己的文章
  •