close
標題:

EXCEL VBA 問題

免費註冊體驗

 

此文章來自奇摩知識+如有不便請留言告知

發問:

問題如下 : 在 B1 的儲存格是123, C1 的儲存格是124, D1 的儲存格是127, E1 的儲存格是124,那麼如何能夠在 A1 的儲存格自動顯示這樣子 123,124,127 謝謝! 更新: tintin852 你好, 多謝你的回答, 但因C1 的儲存格是124,E1 的儲存格也是124,而我不需要重複的資料,這又該怎麼做呢? 謝謝! 更新 2: khshiu22021975你好,多謝你的意見! 補充如下: 1.不可以加輔助欄. 2.其實有b1至z1或更多. 3.是的,我是想a1會隨b1至e1的改變出不同的答案.假設有可能四個數都相同時,a1只要一個。即如題A1 的儲存格自動顯示這樣子 123,124,127 謝謝! 更新 3: khshiu22021975 你好, 多謝你的回答, 但有問題如下: 1. 一些儲存格內沒有數字可以嗎? 2.如不是b1:e1,而是b1,d1,f1,h1,j1, l1........等等又可以嗎? 3.不太明白這程式,可否解釋之! 更新 4: 新田美香你好,你的回答基本上已解決了我的問題.但還有一點是如不是b1: z1,而是b1,d1,f1,h1,j1, l1........等等又可以嗎?因有一些儲存格是有數字,但又不能抽出來. 我用 =joinx(b1,d1,f1,h1,j1,l1)是行不通的. 謝謝! 在此祝各位EXCEL 高手及知識網網友新年快樂! HAPPY NEW YEAR ! 更新 5: 新田美香你好, 已用了Function joinx(ParamArray ar() As Variant) As String,似乎程式碼內容不需要修改, 但只能用30個儲存格的資料.另外,如你不介意的話,可否解釋一下這個程式,因我看了一整天也看不明白. 更新 6: 新田美香你好, 多謝你的回答,因對 INSTR, ISEMPTY, IIF 比較陌生,需要另找資料查看.故我仍在領悟中,相信總有一天會明白.另因你是在意見欄作答,故不能選為最佳答案.這是我更敬佩你的地方.在此衷心感謝你.謝謝!

最佳解答:

1.可以加輔助欄嗎? 2.只有b1至e1四個cell嗎? 3.你是否想a1會隨b1至e1的改變出不同的答案?即有可能四個數都相同時,a1和其他四個cell都一樣。 2009-12-30 23:43:36 補充: Sub abcd() X = 1 [A1] = WorksheetFunction.Small(Range("B1:E1"), X) For Y = 1 To 3 X = X + 1 If WorksheetFunction.Small(Range("B1:E1"), X - 1) <> WorksheetFunction.Small(Range("B1:E1"), X) Then [A1] = [A1] & ", " & WorksheetFunction.Small(Range("B1:E1"), X) End If Next Y End Sub 如只有 B1:E1 四個Cell,For Y = 1 to 3; 如有 n個 Cell, For Y = 1 to n-1。 所有格內一定要有數字,否則Error。 2009-12-30 23:55:09 補充: 一個 Cell 只能容納一千多個字母,如你的資料太多,超出的項目不能顯示。 2009-12-31 11:08:00 補充: 技術上大致沒問題,程式上加多一句Count(b1:iv1)告知做For的次數有可能解決問題,因我現在要工作,沒有Excel,遲一點答你,你也可以自已試試Small函數在試算表上遇有空白時的情況,可能你自已也解決到問題。 2009-12-31 22:33:44 補充: 因補充內容只限300字,不能全程式發表,請更改以下語句 1.在 Sub abcd()之下加這一句: N = WorksheetFunction.CountA(Range("B1:IV1")) 2.把 For Y = 1 To 3 改為: For Y = 1 To N - 1 3.把所有Range("B1:E1")改為: Range("B1:IV1") 2009-12-31 22:39:50 補充: 以上程式可接受有空白儲存格,亦會由小至大排列。但不接受文字,因SMALL函數不能比較文字。如有文字,可看看「意見」中 (新田美香) 的發表;大膽講句,她可以說是這裏的權威!(老實說:新田的算式太深了,我未有能力吸收到,要花點時間研究!) 新田美香:我這程式有改善之處嗎? 懇請多多指教! 程式只屬很基本的VBA理論,到圖書館找本有關EXCEL VBA書看看吧!

其他解答:

自訂VBA函數, 供參考 Function joinx(ar As Range) As String For Each a In ar If InStr("," & joinx & ",", "," & a & ",") = 0 Then If Not IsEmpty(a) Then joinx = joinx & IIf(joinx = "", "", ",") & a End If Next End Function A1或任何一格, 輸入=joinx(B1:Z1) 2009-12-31 15:20:40 補充: 以上的定joinx function, 適用於任何文字及數字 自動摒棄空格值及相同值, 再以逗號分隔 以左至右出現次序作排序, 如須以數值的大小排序, VBA須另寫 2009-12-31 23:38:51 補充: 致khshiu: 家中剛換了電腦, 尚未安裝excel, 可能要下星期一上班後, 才能測試及發表意見 2010-01-01 00:49:58 補充: 如要求=joinx(b1,d1,f1,h1,j1,l1) Function joinx(ar As Range) As String 須改成 Function joinx(ParamArray ar() As Variant) As String 程式碼內容亦要修改, 暫時無法測試 2010-01-06 17:11:00 補充: 意見002的程式碼, 第1個if 是用 instr 去判斷是否有重複, 如不重複是會出0 為避免先有 124, 後有 24, 後面的 24會被 誤判重複, 故判斷時要先用逗號將24前後套住變成 ,24, 第2個if 用isempty判斷是否空格, 如是空格便不作任何工作, 以防誤加逗號 iif 的作用, 是第1個符合條件的內容, 不須前置逗號, 以後的便要前置逗號, 希望閣下能領悟|||||=concatenate(B1,",",C1,",",D1)
arrow
arrow

    ppi93gk88d 發表在 痞客邦 留言(0) 人氣()