Board logo

標題: [發問] 資料複數回傳 [打印本頁]

作者: s13983037    時間: 2018-7-12 01:33     標題: 資料複數回傳

請問前輩們
有甚麼方法, 可行,
關於資料複數回傳

由於黃色區塊每一格都有函式,
黃色區塊有資料顯示時, 
則進行資料回傳,

由於黃色區塊顯示時,可能會有多筆或單單一筆資料
如果只有出現一筆資訊顯示,則顯示單一資訊
如果有複數以上資訊顯示, 則使用合併有出現的資料
顯示方法
由左至右進行比對

可透過一般函式進行嗎, 
想讓資訊進行即時更新.

如果是透過VBA, 可能就無法即時更新了

以下為示意圖
[attach]28964[/attach]

附檔
[attach]28967[/attach]
作者: faye59    時間: 2018-7-12 06:22

回復 1# s13983037


    [發問] 如何實現,儲存格內容改變,就會觸發VBA程序執行
請參考!
作者: s13983037    時間: 2018-7-12 23:07

回復 2# faye59

您好,
其實我是想了解,
如果是不使用VBA的情況下,

單純使用函示的話,
有無可能,
由左至右的方式, 確認每一欄的資料是有顯示,
如果說是資料無顯示的話, 橘色的欄位則不進行字串組合.

如果說是資料有顯示的話,
資料只顯示一筆的話, 橘色的欄位進行組合(僅一筆)
資料只顯示多筆的話, 橘色的欄位進行組合(多筆組合)
類似黃色區塊如果有N筆, 橘色的欄位則把N筆組合, 並透過"," ,隔開
有無可能性的方法, 謝謝.

還是這部分只能透過IF 逐欄位進行判斷組合.

參考圖
[attach]28970[/attach]
作者: faye59    時間: 2018-7-13 07:37

回復 3# s13983037


    我先用到這了...
請教其他大神忙修改吧...過幾天我在嘗試看看...
先試試看是不是這總類似的結果,
跳過空格判斷這個我也不是很懂...

[發問] Calculate,能否回傳發生變動的儲存格的欄位
我還在參考這篇文章看要怎麼改。
作者: faye59    時間: 2018-7-15 20:28

回復 3# s13983037


    今天看到其他高手的寫法,修改後看是不是你要的結果。
作者: s13983037    時間: 2018-7-15 22:41

回復 5# faye59


    謝謝你(妳),
    我解壓縮軟體的WINRAR的
    我無法解開這個RAR檔
    不知道您這邊壓縮的軟體是??
    :)
作者: faye59    時間: 2018-7-15 22:49

回復 6# s13983037


    是.rar沒錯阿。
我的WinRAR版本5.60(64位元)
作者: faye59    時間: 2018-7-15 23:04

回復 6# s13983037
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Intersect(Target, [B5:K14]) Is Nothing Then Exit Sub
  3.     ex
  4. End Sub
複製代碼
  1. Sub ex()
  2. Dim Out As Variant
  3. For n = 5 To 16
  4. Out = Array(Cells(n, 3), Cells(n, 4), Cells(n, 5), Cells(n, 6), Cells(n, 7), Cells(n, 8), Cells(n, 9), Cells(n, 10), Cells(n, 11))
  5. ub = UBound(Out)
  6. For i = 0 To ub
  7. If Out(i) <> "" Then: OutAll = OutAll & "." & Out(i)
  8. Next
  9. Cells(n, 13) = Mid(OutAll, 2, 99)
  10. OutAll = ""
  11. Next
  12. End Sub
複製代碼

作者: s13983037    時間: 2018-7-15 23:19

回復 8# faye59


    謝謝, 了解, 我在自己修改一下, 就差不多了
   感謝^^
作者: stillfish00    時間: 2018-7-25 14:52

回復 9# s13983037
VBA自己定義函式,還是能即時更新
模組中輸入
  1. Public Function MyJoin(source As Range, delimiter As String, Optional ignoreEmpty = True) As String
  2.     For Each x In source
  3.         If Not ignoreEmpty Or Len(x) > 0 Then
  4.             MyJoin = MyJoin & IIf(Len(MyJoin) = 0, "", delimiter) & x.Text
  5.         End If
  6.     Next
  7. End Function
複製代碼
M5填入 =MyJoin(C5:K5, ",", TRUE)
第一個參數是結合的範圍,第二參數是要使用的分隔符號,第三參數是用來選擇是否要忽略空白。
作者: 准提部林    時間: 2018-7-25 15:44

若只有那幾格??
=SUBSTITUTE(TRIM(C5&" "&D5&" "&E5&" "&F5&" "&G5&" "&H5&" "&I5&" "&J5&" "&K5)," ",",")

或用自訂函數
Function NumTxt(ARR) As String
Dim A, T$
For Each A In ARR
    T = Trim(T & " " & A)
Next
NumTxt = Replace(T, " ", ",")
End Function

公式:=NumTxt(C5:K5)
作者: sun19860126    時間: 2018-8-10 10:23

請問如果同樣狀態,欄位很多到100-200欄
要怎麼改會比較好? 謝謝大大
作者: 准提部林    時間: 2018-8-10 10:55

回復 12# sun19860126


將資料範圍放到自訂函數的公式中即可,
除非需求不同, 可上傳範例並加說明規則!
作者: sun19860126    時間: 2018-8-10 11:07

感謝樓上~我剛好有與發文者類似需求
所以就用同樣寫法再更改,只是欄位需求變大
Sub fourFATNOcombine()

' fourFATNOcombine 巨集
'
Dim Out As Variant
For n = 3 To 2000
If Cells(n, 2) <> "" Then
Out = Array(Cells(n, 146), Cells(n, 245))
***上面這一段我要從146欄吃資料到245欄,土法煉鋼似乎無法解
ub = UBound(Out)
For i = 0 To ub
If Out(i) <> "" Then: OutAll = OutAll & "/" &

Out(i)
Next
Cells(n, 9) = Mid(OutAll, 2, 999)
OutAll = ""
End If
Next
作者: 准提部林    時間: 2018-8-10 12:11

本帖最後由 准提部林 於 2018-8-10 12:13 編輯

回復 14# sun19860126


沒有檔案看,只能猜著寫∼∼
Sub fourFATNOcombine()
Dim Arr, Brr, Vrr, i&, j&, T$
Arr = Range(Cells(3, 146), Cells(2000, 245)) '第146欄至245欄範圍
Brr = Range(Cells(3, 2), Cells(2000, 2)) '第2欄(B欄)
ReDim Vrr(1 To UBound(Arr), 0) '定義一個空陣列
For i = 1 To UBound(Arr) 
  If Brr(i, 1) = "" Then GoTo 101 '如果B欄為空,略過此行
  For j = 1 To UBound(Arr, 2)
    If Arr(i, j) <> "" Then T = T & "/" & Arr(i, j)
  Next j
  Vrr(i, 0) = Mid(T, 2): T = ""
101: Next i
Cells(3, 9).Resize(UBound(Vrr)) = Vrr
End Sub
作者: hcm19522    時間: 2018-8-23 10:02

http://blog.xuite.net/hcm19522/twblog/585214989




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