我有一列充滿了數據,並且沒有特定的模式,在 10 或 20 行之後我應該重複一個新行。因此,只有當公式可以定義每個部分的開始和結束時,這些索引和偏移解決方案才有效。
為了正確理解它,我有一個專欄,例如:
A
B
C
D
- (這會中斷一個部分)
A
C
E
F
G
- (這會中斷另一行)
B
C
F
G
- (再次中斷)
因此,如果每個“-”字元都能在表格中開始一個新行,那對我來說就很好了。是否可以在 Excel 或 Access 中使用公式或 VBA 來完成此操作?
謝謝你!
答案1
使用:
=FILTERXML("<Group><Element>"&SUBSTITUTE(TEXTJOIN("",FALSE,A1:A15),"-","</Element><Element>")&"</Element></Group>","/Group/Element")
這用於TEXTJOIN()
連接列中的所有值(公式中的 A1:A15。它假設沒有“-”作為結束單元格,並且可以通過簡單地選擇最後一個條目上方的單元格作為結束單元格來實現如果始終出現結尾“-”字符,則為範圍TRUE
。
然後,您將把TEXTJOIN()
由“-”字元分成幾部分的單元素數組轉換為相同的字串,但用“”代替“-”字元。這是為了使字串部分準備好在FILTERXML()
您看到的函數中使用。請注意,替換都是字串內部的,或者換句話說,僅出現在字串內部,而不是出現在字串的兩端。如果您熟悉 HTML,您就會知道「</tag name>」形式關閉標籤,「」開啟標籤。
然後,您在開頭添加開始標記(在SUBSTITUTE()
發生之前將其添加到前面),並將結束標記附加到...末尾。因此,每個所需組周圍都有開始和結束標記對,“-”字元用於將其分開。
最後,所有這些單獨標記的元素(看看我從哪裡得到標籤名稱“”?)需要分組到一個群組中(看看標籤來自哪裡?)。
FILTERXML()
現在您有了一個可以理解並分解成片段的HTML 字串。它採用該字串作為第一個參數,對於第二個參數,您可以透過所謂的「Path」告訴它標籤如何關聯...即末尾的「/Group/Element」位元。
很難理解為什麼 Excel 需要這樣設置,而這樣的字串顯然是以特定方式組織的,對嗎?但它的目的是從實時網站中剖析實際的實時 HTML,而不是分解“平凡”的字符串,這樣的 HTML 字符串中可能有很多其他標籤,那麼就不會那麼明顯了!但有趣的是,它表明如果您建立了一個具有多個標記的字串,則可以讓 Excel 使用不同的路徑值從同一字串中取得不同的集合。
不管怎樣,FILTERXML()
喜歡以垂直佈局給出結果,行在一列中。我相信你會更喜歡這個[是的,我在評論中看到您明確要求行],但如果沒有,如果您想要水平佈局,列在一行中,只需將整個內容包裝在一個TRANSPOSE()
函數中即可。
另一個有趣的用途FILTERXML()
是,您可以透過數字(1、2、3...等)和最後一個數字(如果已知)或「最後一個」來準確指定所需的群組中的哪個元素。 。
如果您有一種在正確位置插入內部標記對 () 的工作方法,它可以使用字串執行更廣泛的操作。