Board logo

標題: 顯示標記資料 [打印本頁]

作者: shan0948    時間: 2015-11-6 16:06     標題: 顯示標記資料

請問各位先進,如何於sheet2 逐一將動態欄中有標示#的姓名顯示出來,謝謝![attach]22362[/attach]
作者: 准提部林    時間: 2015-11-6 17:29

這種表格, 建議用VBA試試!

Sub TEST()
Dim R&, x&, y&, T$, xR As Range, xH As Range
[Sheet2!A:C].ClearContents
Set xH = [Sheet2!A1]
xH.Resize(1, 3) = Array("樓層", "序", "姓名")
R = Sheets("Sheet1").UsedRange.Rows.Count
For x = 2 To 14 Step 6
  For y = 4 To R
    Set xR = [Sheet1!A1].Cells(y, x)
    If xR = 1 Then T = xR(1, 0) & ""
    If xR(1, 3) = "#" Or xR(1, 4) = "#" Then
     Set xH = xH(2)
     xH.Resize(1, 3) = Array(T, xR, xR(1, 2))
    End If
  Next y
Next x
End Sub
作者: shan0948    時間: 2015-11-6 22:21

回復 2# 准提部林


    感謝准大的指教,用函數公式不知可否,謝謝!!
作者: 准提部林    時間: 2015-11-7 11:21

回復 3# shan0948


Sheet2.A1.陣列公式:只取〔姓名
=INDIRECT(TEXT(RIGHT(SMALL(IF((Sheet1!D$3:P$3="動態")*((Sheet1!E$4:Q$36="#")+(Sheet1!D$4:P$36="#")),COLUMN(C:O),99)*100001+ROW($4:$36)*100,ROW(A1)),5),"""sheet1!""\R0C00"),)&""
 
<陣列公式輸入法> 
輸入或修改公式完成後,游標留在〔編輯列〕,先不要按Enter,
同時按住〔Shift + Ctrl〕不放,再按〔Enter〕。
作者: shan0948    時間: 2015-11-9 10:06

回復 4# 准提部林


    准大好,經指導的函數公式在測試後,可以顯示標記之資料,不過公式有點繁雜,需要一點時間消化,謝謝感恩!!
作者: 千暉尋    時間: 2016-1-17 13:36

回復 2# 准提部林
請教准大,這句If xR = 1 Then T = xR(1, 0) & ""為何可以找到101,102...
作者: 准提部林    時間: 2016-1-17 15:55

回復 6# 千暉尋


〔編號〕為合併格,與右一格〔序號.1〕同一列,
xR迴圈時,遇到序號1時,取其〔左一格〕值,納入變數T!
作者: 千暉尋    時間: 2016-1-17 16:56

回復 7# 准提部林
大概了解了,將理解說明如下:每次迴圈找到1時就就將左側的編號賦值給T(所以第一次找到1時T值為101),底下的2,3,4,5的T值都是相同的(不會改變),直到又碰到另一個1時(第二次時T值就更改為102)...又附帶問另外一句: Set xH = xH(2)是因為最初設為A1,而往後找到資料時,所以須往下一列, 設定為新的xH,以便放入資料, 即xH是會不斷往下移動,不斷膨脹的變數.
不知道這樣理解對不對!
大大的語法簡潔有力,每每都有驚豔的感覺!謝謝准大的耐心教導!
作者: 准提部林    時間: 2016-1-17 17:14

回復 8# 千暉尋


正解!^ ^

xH 為上任總統,任期到了,當交給下任總統 xH(2)!
作者: Andy2483    時間: 2024-1-12 08:39

本帖最後由 Andy2483 於 2024-1-12 08:56 編輯

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列中的陣列與 陣列與儲存格對照運用,學習方案如下,請各位前輩指教
Sheets(1)資料表:
[attach]37278[/attach]

Sheets(2)執行結果:
[attach]37279[/attach]

Option Explicit
Sub TEST()
Dim Brr, i&, j%, R&, xA, xAs
Sheets(2).[A:C].Delete: Brr = Sheets(1).UsedRange
For j = 5 To 17 Step 6
   For i = 4 To UBound(Brr)
      If InStr(Brr(i, j - 1) & Brr(i, j), "#") Then
         R = R + 1
         Brr(R, 1) = Sheets(1).Cells(i, j).Item(1, -3).MergeArea(1)
         Brr(R, 2) = Brr(i, j - 3): Brr(R, 3) = Brr(i, j - 2)
      End If
   Next
Next
If R = 0 Then Exit Sub Else xAs = Array([{"樓層", "序", "姓名"}], Brr)
xA = Array(Sheets(2).[A1].Resize(, 3), Sheets(2).[A2].Resize(R, 3))
For i = 0 To UBound(xA)
      xA(i).Value = xAs(i): xA(i).Borders.LineStyle = 1
      For j = 7 To 10: xA(i).Borders(j).Weight = 4: Next
Next
Application.Goto Sheets(2).[A1]
End Sub
作者: shan0948    時間: 2024-1-12 19:50

回復 10# Andy2483


    感恩A大的指導,將再好好研析學習,謝謝!




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