Board logo

標題: [發問] 符合所需代碼 前兩碼為 56、57、59,才能列入參考金額... [打印本頁]

作者: cypd    時間: 2021-2-2 22:00     標題: 符合所需代碼 前兩碼為 56、57、59,才能列入參考金額...

1.備註(E欄)及科目(F欄)欄位只有出現數字代碼前兩碼為 56、57、59 等
    才能符合條件列入(G欄)參考金額(原本代碼有 5 位數取前兩碼)
2.備註欄有時會出現文字+代碼(例如_E8_補59005)
3.請問 G欄 答案公式該如何編寫>>>

[attach]33022[/attach]

[attach]33023[/attach]
作者: 准提部林    時間: 2021-2-3 10:43

固定五碼, 且文字在前面,
陣列公式:
=IF(OR(LEFT(RIGHT(E2:F2,5),2)={"56";"57";"59"}),D2,"")
作者: hcm19522    時間: 2021-2-3 11:32

https://blog.xuite.net/hcm19522/twblog/589596291
作者: cypd    時間: 2021-2-3 23:47

回復 2# 准提部林

感謝指導   ^^

唯一受限
若是文字在數字代碼後該公式無法辨識...
(文字在前且代碼為5位數答案正確)
作者: cypd    時間: 2021-2-4 00:26

回復 3# hcm19522

感謝指導   ^^
二欄前兩碼 任一為指定數 (8003)

在  https://blog.xuite.net/hcm19522/twblog/589596291 有詳細參考
[attach]33027[/attach]
作者: ML089    時間: 2021-2-4 08:50

假設科目數字固定為5位數,其前方文字說明不超過9個
G2 =IF(OR(LEFT(MAX(IFERROR(--MID(E2&F2,{1,2,3,4,5,6,7,8,9},5),"")),2)={56,57,59}&""),D2,"")
作者: 准提部林    時間: 2021-2-4 10:49

本帖最後由 准提部林 於 2021-2-4 10:54 編輯

回復 4# cypd

文字在前在後皆可, 數字不限五碼
陣列公式(三鍵輸入)
=IF(COUNT(0/TEXT(MID("/"&E2:F2,FIND({56;57;59},E2:F2),1),";;;!1")),D2,"")

=IF(COUNT(0/MID(E2:F2,FIND({56;57;59},E2:F2),5)),D2,"")
作者: cypd    時間: 2021-2-4 15:03

回復 7# 准提部林

文字在前在後皆可, 數字不限五碼
針對查找...IF(COUNT(0/MID(E2:F2,FIND({56;57;59},E2:F2),5)),D2,"")...此公式為代碼中有符合 56 57 59 即帶出金額
   
    此公式對所需數字代碼前兩碼為 56、57、59 等
    才能符合條件列入(G欄)參考金額...該準則系指代碼   前兩碼  為要件喔!!
[attach]33035[/attach]

希望該公式能再修正以供參考...
作者: cypd    時間: 2021-2-4 16:18

回復 6# ML089

感恩阿   ^^

經實測
科目數字固定為5位數(可調整公式內數據),
其前方文字說明不超過9個...後面文字不拘
作者: cypd    時間: 2021-2-4 16:25

回復 7# 准提部林

感恩指導回復   ^^

該公式為文字在前在後皆可, 數字不限五碼之限...完美呈現   :victory:
陣列公式(三鍵輸入)
=IF(COUNT(0/TEXT(MID("/"&E2:F2,FIND({56;57;59},E2:F2),1),";;;!1")),D2,"")
作者: 准提部林    時間: 2021-2-4 19:05

回復 8# cypd

忘了開頭兩字,
=IF(COUNT(0/MID(E2:F2&"|",FIND({56;57;59},E2:F2),5)),D2,"")
作者: cypd    時間: 2021-2-4 22:31

回復 11# 准提部林

感恩不吝指導

經帶入公式...
[attach]33036[/attach]

顯示結果...
數字代碼受限於 5 個字(多一個數字或少一個數字無法正確顯示)
希望結果是...文字在前在後皆可, 數字不限五碼喔   ^^
(準則系指代碼   前兩碼為 56 57 59  符合為要件喔)
作者: ML089    時間: 2021-2-6 09:51

G2 =IF(OR(IFERROR(MID("X"&E2:F2,FIND({56;57;59},E2:F2),1),"")>"9"),D2,"")
陣列輸入

數字不限長,前後可以有文字不限長
作者: cypd    時間: 2021-2-6 17:19

回復 13# ML089

感恩囉啦阿   ^^

經實測
備註或科目數字位數不限為5位數(所需代碼會取 前兩碼為 56、57、59),
其前、後方文字說明字數不拘
該公式經簡化後為文字在前在後皆可, 數字上限為20位數之限...十全十美
作者: Andy2483    時間: 2023-12-27 07:53

謝謝論壇,謝謝各位前輩
後學藉此帖練習VBA,學習方案如下,請各位前輩指教
執行前:
[attach]37185[/attach]

執行結果:
[attach]37186[/attach]

Option Explicit
Sub TEST()
Dim 資料陣列, i&, 字元位置_備註%, 字元位置_科目%
資料陣列 = Range([F2], [D65536].End(xlUp))
For i = 1 To UBound(資料陣列)
   字元位置_備註 = InStr("|65|75|95|", "|" & Right(Val(StrReverse(資料陣列(i, 2))), 2) & "|")
   字元位置_科目 = InStr("|65|75|95|", "|" & Right(Val(StrReverse(資料陣列(i, 3))), 2) & "|")
   If 字元位置_備註 + 字元位置_科目 = 0 Then 資料陣列(i, 1) = ""
Next
[B2].Resize(UBound(資料陣列)) = 資料陣列
End Sub
作者: cypd    時間: 2023-12-28 00:08

回復 15# Andy2483

感謝 Andy2483 提供不同解法
關於 字元位置_備註 = InStr("|65|75|95|", "|" & Right…
其中 "|65|75|95|" 神奇的解法呢  ^^




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