返回列表 上一主題 發帖

顯示標記資料

顯示標記資料

請問各位先進,如何於sheet2 逐一將動態欄中有標示#的姓名顯示出來,謝謝! 顯示標記資料.rar (5.51 KB)

這種表格, 建議用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

TOP

回復 2# 准提部林


    感謝准大的指教,用函數公式不知可否,謝謝!!

TOP

回復 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〕。

TOP

回復 4# 准提部林


    准大好,經指導的函數公式在測試後,可以顯示標記之資料,不過公式有點繁雜,需要一點時間消化,謝謝感恩!!

TOP

回復 2# 准提部林
請教准大,這句If xR = 1 Then T = xR(1, 0) & ""為何可以找到101,102...

TOP

回復 6# 千暉尋


〔編號〕為合併格,與右一格〔序號.1〕同一列,
xR迴圈時,遇到序號1時,取其〔左一格〕值,納入變數T!

TOP

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

TOP

回復 8# 千暉尋


正解!^ ^

xH 為上任總統,任期到了,當交給下任總統 xH(2)!

TOP

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

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


Sheets(2)執行結果:


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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題