Board logo

標題: [發問] 名字字數不同之取代問題(已解決) [打印本頁]

作者: onegirl0204    時間: 2010-10-5 11:28     標題: 名字字數不同之取代問題(已解決)

本帖最後由 onegirl0204 於 2010-10-10 11:16 編輯

請教各位前輩∼

當excel資料欄裡有人名要受保護時,如何針對名字字數不同而寫出正確的公式?
例如:由A2以下均為人名,當然有些人名是2個字或4個字的,如何寫出正確的公式使最後呈現的人名是王x(單名),林x雄,以及歐陽x(複姓)之類的型態

感謝賜教!
作者: oobird    時間: 2010-10-5 12:36

林x雄,以及歐陽x
問題在這裡了。
作者: asimov    時間: 2010-10-5 23:07

林x雄,以及歐陽x
問題在這裡了。
oobird 發表於 2010-10-5 12:36



個人想法
首先建立一個複姓資料庫
姓名2個字,取第1個字為姓
旗魚取2個字與資料庫比對,找不到則取第1個字為姓
找到時取2個字為姓
作者: asimov    時間: 2010-10-5 23:22

個人想法
首先建立一個複姓資料庫
姓名2個字,取第1個字為姓
旗魚取2個字與資料庫比對,找不到則取第 ...
asimov 發表於 2010-10-5 23:07



補上檔案
[attach]3009[/attach]
B2=IF(LEN(A2)=2,LEFT(A2,1),IF(COUNTIF($I$1:$I$83,LEFT(A2,2)),LEFT(A2,2),LEFT(A2,1)))
您不能下載檔案,請參考下圖
[attach]3010[/attach]
作者: onegirl0204    時間: 2010-10-6 00:59

回復 4# asimov


感謝您解決了複姓問題!可惜問題只解決一半,依照您的範例,B欄只出現姓氏,而非加了X的全名,是否請您再次詳加思考,如何編寫公式以便得到我想要的結果?
不情之請,盼請見諒!感思您!
作者: 偉婕    時間: 2010-10-6 02:27

本帖最後由 偉婕 於 2010-10-6 02:33 編輯

回復 5# onegirl0204

將B2改為 =IF(LEN(A2)=2,LEFT(A2,1)&"X",IF(COUNTIF($I$1I$83,LEFT(A2,2)),LEFT(A2,2)&"X",LEFT(A2,1)&"X"&RIGHT(A2,1)))
作者: onegirl0204    時間: 2010-10-6 02:44

回復 6# 偉婕


真是太感謝您為我解決了問題! 待會總算可以安心睡囉!
作者: toomellowhaw    時間: 2010-10-6 06:28

本帖最後由 toomellowhaw 於 2010-10-6 06:29 編輯

借用asimov兄及偉婕版主的構想
=REPLACE(A2,SUMPRODUCT(--(LEFT(A2,2)=$I$1:$I$83))+2,1,"X")
作者: asimov    時間: 2010-10-6 23:55

借用asimov兄及偉婕版主的構想
=REPLACE(A2,SUMPRODUCT(--(LEFT(A2,2)=$I$1I$83))+2,1,"X")
toomellowhaw 發表於 2010-10-6 06:28



toomellowhaw 兄的公式總是讓人驚艷
收下學習了
作者: onegirl0204    時間: 2010-10-7 11:13

回復 8# toomellowhaw


非常感謝您提供另一種更簡便的公式!但美中不足的是∼經測試後發現,複姓名字若為4個字的,會出現例如∼東方X敗,而非東方X,不知是否有補救的辦法呢?煩請再賜教,謝謝!
作者: toomellowhaw    時間: 2010-10-7 13:21

回復  toomellowhaw


非常感謝您提供另一種更簡便的公式!但美中不足的是∼經測試後發現,複姓名字若為 ...
onegirl0204 發表於 2010-10-7 11:13


=LEFT(REPLACE(A2,SUMPRODUCT(--(LEFT(A2,2)=$I$1:$I$83))+2,1,"X"),3)

請試試看
作者: toomellowhaw    時間: 2010-10-7 14:33

回復 9# asimov


謝謝,過獎了!
還須跟各位先進多多學習!
若有疏漏或思慮不周全的地方也請不吝指教..
作者: GBKEE    時間: 2010-10-7 14:38

回復 10# onegirl0204
自訂函數


[attach]3043[/attach]
作者: onegirl0204    時間: 2010-10-8 17:49

回復 11# toomellowhaw


剛剛測試結果:
歐陽菲菲∼歐x菲,歐陽倩∼歐x倩,司馬中原∼司x中

但我所希望得到的結果是:
歐陽菲菲∼歐陽x,歐陽倩∼歐陽x,司馬中原∼司馬x

真是不好意思,又要麻煩您費心了!
作者: onegirl0204    時間: 2010-10-8 17:57

回復 13# GBKEE


感謝您提供的資料!剛剛下載了您的壓縮檔,將A1名字改為張三,為何會出現#NAME?
煩請再賜教,感恩您!
作者: GBKEE    時間: 2010-10-8 19:41

回復 15# onegirl0204
請再確定 公式 =Name_Defend(A1)
作者: toomellowhaw    時間: 2010-10-8 20:21

本帖最後由 toomellowhaw 於 2010-10-8 20:25 編輯

回復 14# onegirl0204


我測試是正常的..
錯誤原因猜測..可能是你的複姓資料庫缺乏該複姓,或是資料庫中複姓有誤..
如圖..[西門吹雪]呈現為[西X吹]..是因為複姓資料庫中無該資料
    ..[獨孤求敗]呈現為[獨X求]..是因為資料庫中的獨孤後面接了一個空白字元


[attach]3079[/attach]
作者: onegirl0204    時間: 2010-10-10 11:09

回復 17# toomellowhaw


高手果然與眾不同∼非常感謝您不厭其煩一再賜教,問題已經完成解決了!再次感恩您!
作者: onegirl0204    時間: 2010-10-10 11:15

回復 16# GBKEE


真是怪了?週五在學校測試就是有問題,怎麼剛剛在家測試又正常呢?難不成有鬼嗎?
不好意思∼給您添麻煩了,在此向您致歉,更感恩您的協助!
作者: onegirl0204    時間: 2010-10-17 15:39

回復 13# GBKEE


請教前輩∼您在自訂涵數裡輸入的公式為何?因為我想自己練習將王X明改成王O明,可惜就是找不到公式,煩請賜教,謝謝!
作者: mycmyc    時間: 2010-10-17 17:00

回復 13# GBKEE
  能麻煩你 把公式即使用方法 貼出來嗎
作者: GBKEE    時間: 2010-10-17 19:18

本帖最後由 GBKEE 於 2010-10-17 19:24 編輯

回復 21# mycmyc
將程式碼複製到 一般模組 (Module) 物件中
工作表指令 [插入]->函數-> 使用者定義 ->  Name_Defend 函數
Sub ReWord() 是在sheet1的A欄中尋找複姓
  1. Dim GetEeWord As Object
  2. Function Name_Defend(Word As String) As String
  3.     Dim N As String
  4.     If Len(Word) < 2 Then Name_Defend = Word: Exit Function
  5.     If GetEeWord Is Nothing Then ReWord
  6.     If GetEeWord.Exists(Mid(Word, 1, 2)) And Len(Word) >= 3 Then
  7.         Name_Defend = Mid(Word, 1, 2) & "x" & Mid(Word, 4, Len(Word) - 3)
  8.     Else
  9.         Name_Defend = Mid(Word, 1, 1) & "x" & Mid(Word, 3, Len(Word) - 2)
  10.     End If
  11. End Function
  12. Sub ReWord()
  13.     Dim E As Range
  14.     Application.MacroOptions "Name_Defend", "隱藏姓名第二個字   林x正"
  15.     Set GetEeWord = CreateObject("Scripting.Dictionary")
  16.     For Each E In Sheet1.Range("A:A").SpecialCells(xlCellTypeConstants)
  17.         GetEeWord(E.Value) = ""
  18.     Next
  19. End Sub
複製代碼

作者: GBKEE    時間: 2010-10-17 19:32

回復 20# onegirl0204
Function Name_Defend(Word As String) As String
      程式嗎中
If GetEeWord.Exists(Mid(Word, 1, 2)) And Len(Word) >= 3 Then
      Name_Defend = Mid(Word, 1, 2) & "O" & Mid(Word, 4, Len(Word) - 3)
Else
       Name_Defend = Mid(Word, 1, 1) & "O" & Mid(Word, 3, Len(Word) - 2)
End If
作者: onegirl0204    時間: 2010-10-17 21:27

回復 23# GBKEE


非常感謝您的指導!我竟沒想到去巨集那裡找尋,雖然我不會寫指令,但是依您的指示去編輯修改倒是沒問題,下回測試您的方法可以應用在什麼方面?




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