EXCEL VBA 問題

2009-12-26 8:28 pm
問題如下 : 在 B1 的儲存格是123, C1 的儲存格是124, D1 的儲存格是127, E1 的儲存格是124,那麼如何能夠在 A1 的儲存格自動顯示這樣子 123,124,127 謝謝!

回答 (3)

2009-12-31 7:43 am
✔ 最佳答案
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書看看吧!
2009-12-31 11:10 pm
自訂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個符合條件的內容, 不須前置逗號, 以後的便要前置逗號, 希望閣下能領悟
2009-12-27 6:34 pm
=concatenate(B1,",",C1,",",D1)


收錄日期: 2021-04-13 17:00:21
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20091226000051KK00515

檢視 Wayback Machine 備份