Board logo

標題: [發問] 不同欄位中數字的比對 [打印本頁]

作者: kyotogoeric    時間: 2014-9-4 21:12     標題: 不同欄位中數字的比對

今天在工作中接到一個令我想不出辦法的難題,不知是否有人能提供好方法

問題是這樣的。

在兩個不同欄位中有兩組長度不同的數字,可是我只想比對兩組數字中的某兩個數字

例如:30020150000,04HE15-100。

這兩個欄位中的數字長度不同,但我只想比對標記紅色的數字是否相同,若不同則數字反紅

請教各位,有這樣的公式可寫嗎?
作者: luhpro    時間: 2014-9-6 03:25

本帖最後由 luhpro 於 2014-9-6 03:28 編輯
今天在工作中接到一個令我想不出辦法的難題,不知是否有人能提供好方法

請教各位,有這樣的公式可寫嗎?
kyotogoeric 發表於 2014-9-4 21:12

若想要現成的沒有,
因為 Excel 系統自帶的公式其作用主體為 "儲存格", 沒有針對其內個別文數字做處理的公式.

不過可以自己做一個 :  底下函數使用的方式為 :  =CompNumber(A1,B1) , 傳回值為布林值
  1. Function CompNumber(rng1 As Range, rng2 As Range) As Boolean
  2.   Dim iNum1%, iNum2%, iPos%, iLen%
  3.   Dim rTar As Range
  4.   
  5.   CompNumber = False
  6.   Set rTar = rng1
  7.   iLen = Len(rTar)
  8.   For iPos = 1 To iLen
  9.     With rTar.Characters(Start:=iPos, Length:=2).Font
  10.       If .ColorIndex = 3 Then Exit For
  11.     End With
  12.   Next
  13.   If iPos <> iLen Then
  14.     iNum1 = CInt(Mid(rTar, iPos, 2))
  15.   Else
  16.     Exit Function
  17.   End If
  18.   
  19.   Set rTar = rng2
  20.   iLen = Len(rTar)
  21.   For iPos = 1 To iLen
  22.     With rTar.Characters(Start:=iPos, Length:=2).Font
  23.       If .ColorIndex = 3 Then Exit For
  24.     End With
  25.   Next
  26.   If iPos <> iLen Then
  27.     iNum2 = CInt(Mid(rTar, iPos, 2))
  28.   Else
  29.     Exit Function
  30.   End If
  31.   
  32.   If iNum1 = iNum2 Then CompNumber = True
  33. End Function
複製代碼
而若想當比對不符就直接將文字變為紅色 :
  1. Private Sub cbComp_Click()
  2.   ChkNum [A1], [B1]
  3. End Sub

  4. Sub ChkNum(rng1 As Range, rng2 As Range)
  5.   Dim iNum1%, iNum2%, iPos%, iLen%
  6.   Dim lRow&
  7.   Dim rTar As Range
  8.   
  9.   Set rTar = rng1
  10.   lRow = 0
  11.   While rng1.Offset(lRow) <> ""
  12.     iLen = Len(rTar)
  13.     For iPos = 1 To iLen
  14.       With rTar.Characters(Start:=iPos, Length:=2).Font
  15.         If .ColorIndex = 3 Then Exit For
  16.       End With
  17.     Next
  18.     If iPos <> iLen Then
  19.       iNum1 = CInt(Mid(rTar, iPos, 2))
  20.     Else
  21.       Exit Sub
  22.     End If
  23.   
  24.     Set rTar = rng2.Offset(lRow)
  25.     iLen = Len(rTar)
  26.     For iPos = 1 To iLen
  27.       With rTar.Characters(Start:=iPos, Length:=2).Font
  28.         If .ColorIndex = 3 Then Exit For
  29.       End With
  30.     Next
  31.     If iPos <> iLen Then
  32.       iNum2 = CInt(Mid(rTar, iPos, 2))
  33.     Else
  34.       Exit Sub
  35.     End If
  36.   
  37.     If iNum1 <> iNum2 Then
  38.       rng1.Offset(lRow).Font.ColorIndex = 3
  39.       rng2.Offset(lRow).Font.ColorIndex = 3
  40.     End If
  41.     lRow = lRow + 1
  42.     Set rTar = rng1.Offset(lRow)
  43.   Wend
  44. End Sub
複製代碼
[attach]19103[/attach]
作者: kyotogoeric    時間: 2014-9-6 21:14

感謝回覆

我要研究一下,因為我是初學者,還不知道怎麼將上述的自製公式帶入我的excel內
作者: kyotogoeric    時間: 2014-9-17 10:07

除了VBA我這幾天也利用函數做了一個簡單的比對方式,也是可以比較出欄位中兩欄位數字是否相同

IF(RIGHT(LEFT(欄位,自左邊算數字長度),比對數字)=RIGHT(欄位,自左邊算數字長度),比對數字),"ok","NG")
作者: ML089    時間: 2014-9-17 13:59

回復 4# kyotogoeric

例如:30020150000,04HE15-100。

這兩個欄位中的數字長度不同,但我只想比對標記紅色的數字是否相同,若不同則數字反紅


1. 資料及規則說明太少,若以目前來看
A1 30020150000
B1  04HE15-100
C1 公式 =IF(MID(A1,6,2)=MID(B1,5,2),"同","不同")

標記紅色,可以用 設定格式化條件來標示(整個儲存格用顏色提醒)
設定公式 =MID($A1,6,2)<>MID($B1,5,2)




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