Board logo

標題: [發問] 請問:[D4]請填入什麼公式?才能去除重覆項目? [打印本頁]

作者: yen956    時間: 2014-5-22 18:55     標題: 請問:[D4]請填入什麼公式?才能去除重覆項目?

諸位大大, 你好:
如圖:

請問:[D4]請填入什麼公式?才能去除重覆項目?
謝謝!!(Excel 2003)

出缺勤別.xls
http://www.mediafire.com/download/ovd1d632dz2li6t/%E5%87%BA%E7%BC%BA%E5%8B%A4%E5%88%A5.7z
作者: p212    時間: 2014-5-23 08:21

本帖最後由 p212 於 2014-5-23 08:34 編輯

回復 1# yen956
假設欄位名稱分別於儲存格A1及儲存格D1,其對應資料自第二列起,取出A欄的唯一值:
1、定義名稱:「出缺勤別」,參照到:輸入 =OFFSET(Sheet1!$A$2,,,COUNTA(Sheet1!$A:$A)-1)
2、儲存格D2輸入陣列公式
{=IF(ISNA(MATCH(0,COUNTIF($D$1:D1,出缺勤別),0)),"",INDEX(出缺勤別,MATCH(0,COUNTIF($D$1:D1,出缺勤別),0)))}
3、若使用Excel 2007版本以後者,儲存格D2可輸入陣列公式
{=IFERROR(INDEX(出缺勤別,MATCH(0,COUNTIF($D$1:D1,出缺勤別),0)),"")}
請參考!
註:附檔所在位置好像不怎麼安全,可否夾檔在提問之下?謝謝!
作者: p212    時間: 2014-5-23 08:47

本帖最後由 p212 於 2014-5-23 08:52 編輯

回復 1# yen956
補述2#
1、若A欄資料部份右端具有「數字」,則利用下列陣列公式於B欄造輔助欄(即資料右端不含數字,儲存格B1請起一欄位名稱如「輔助欄」)
{=LEFT(A2,MIN(IF(ISNUMBER(MID(A2,ROW(INDIRECT("1:10")),1)*1),ROW(INDIRECT("1:10")),99))-1)}
2、2#原有定義名稱可修改為:「輔助欄」參照到:為 =OFFSET(Sheet1!$B$2,,,COUNTA(Sheet1!$B:$B)-1)
3、儲存格D2輸入陣列公式
{=IF(ISNA(MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"",INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)))}
4、若使用Excel 2007版本以後者,儲存格D2可輸入陣列公式
{=IFERROR(INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"")}
請參考!
作者: yen956    時間: 2014-5-23 10:40

本帖最後由 yen956 於 2014-5-23 10:45 編輯

回復 3# p212
試了半天, 終於試出來, 原來忘了將[R1C1]欄名列號表示法的勾勾去掉,
謝謝大大的指導, 謝謝!!
又,
  1. 4、若使用Excel 2007版本以後者,儲存格D2可輸入陣列公式
  2. {=IFERROR(INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"")}
複製代碼
此公式在Excel 2007版本以後, 不改公式可行嗎?
即, 公式 {=IF(ISNA(MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"",INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)))}
在Excel 2007版本以後可行嗎?
作者: p212    時間: 2014-5-23 11:15

本帖最後由 p212 於 2014-5-23 11:18 編輯

回復 4# yen956
公式 {=IF(ISNA(MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"",INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)))} 在Excel 2007一樣可以用!
用IFERROR公式較短,但在您的Excel 2003無法使用。
作者: yen956    時間: 2014-5-23 12:01

回復 5# p212
了解, 謝謝說明,
發現新問題, 用公式 B2 =IF(A2,"T","") 下拉,
若 A4,A5 為false, 則 B4,B5 為假空,
用選擇性貼上→值,  即去悼公式, B4,B5 仍為假空,
這會使VBA: [B500].end(xlUP) 誤判,
若改用 不重覆進階篩選, 則無此問題,
不知原公式能否避免用 "" (假空)的問題?
作者: p212    時間: 2014-5-23 13:39

本帖最後由 p212 於 2014-5-23 13:40 編輯

回復 6# yen956
{=IF(ISNA(MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"",INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)))}

{=IFERROR(INDEX(輔助欄,MATCH(0,COUNTIF($D$1:D1,輔助欄),0)),"")}

COUNTIF($D$1:D1,輔助欄):對$D$1:D1不存在於「輔助欄」中的任何值,其陣列計算顯示為{0,0,0,0...}。
MATCH(0,COUNTIF($D$1:D1,輔助欄),0):MATCH用以定位「0」在COUNTIF陣列{0,0,0,0……}中的位置。
以1#原問來說,驗證結果即使「輔助欄」資料為「FALSE」亦不會出現您所謂的「假空」現象。
至於「使VBA: [B500].end(xlUP) 誤判」之問題,吾人不知,盼高手們指導、學習。
請參考!
作者: yen956    時間: 2014-5-23 15:47

回復 7# p212
大大你好, 謝謝回覆!!
如下圖:
  
用VBA :EndRow=23, <>12==>D13:D23是假空
D13:D23有公式或貼成值都一樣
  1. Private Sub CommandButton1_Click()
  2.     row1 = [D500].End(xlUp).Row
  3.     MsgBox "EndRow=" & row1
  4. End Sub
複製代碼
用手動Ctrl+ArrowUp 也一樣

若將D13:D23 Delete, 則 EndRow=12(真空)

出缺勤別2.7z
http://www.mediafire.com/download/44kgjsj8pyvlso5/%E5%87%BA%E7%BC%BA%E5%8B%A4%E5%88%A52.7z




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