Board logo

標題: [發問] 如何回傳相對儲存格之間相減 [打印本頁]

作者: donod    時間: 2015-11-2 15:24     標題: 如何回傳相對儲存格之間相減

本帖最後由 donod 於 2015-11-2 15:39 編輯

請教大大,
例子中,有"*"的儲存格提示重複了相對欄位的儲存格,例如例子中X12-X14有"*",提示W12-W14重複了欄位AQ12-AQ14
1) 如果想將一連串有"*"部分的最下一個儲存格(一連串有"*"部分之下有機會再出現一連串有"*"部分或1個有"*"部分),回傳相對儲存格之間相減(以上例子:X14=W14-W11) 及
2) 將只有1個有"*"部分的儲存格,回傳相對儲存格之間相減(例子中:AJ7=AG7-AG6)
(有"*"部分可用其他字符代替的)
再請教大大,VBA如何寫,謝謝!
[attach]22310[/attach]
作者: donod    時間: 2015-11-3 18:45

請教大大,
例子中,有"*"的儲存格提示重複了相對欄位的儲存格,例如例子中X12-X14有"*",提示W12-W14重複了欄位AQ12-AQ14
1) 如果想將一連串有"*"部分的最下一個儲存格(一連串有"*"部分之下有機會再出現一連串有"*"部分或1個有"*"部分),回傳相對儲存格之間相減(以上例子:X14=W14-W11) 及
2) 將只有1個有"*"部分的儲存格,回傳相對儲存格之間相減(例子中:AJ7=AG7-AG6)
(有"*"部分可用其他字符代替的)
再請教大大,VBA如何寫,謝謝!


因為OFFICE版本問題,之前的附件出現錯誤,現附上正確的,請教大大指導,謝謝!
[attach]22320[/attach]
作者: 准提部林    時間: 2015-11-4 12:41

X5:
=IF(($U5+$V5)*($AO5+$AP5)=0,"",IF(($U6+$V6)*($AO6+$AP6),"    *",W5-LOOKUP(,0/(X$4:X4=""),W$4:W4)))

AJ5:
=IF(($C5+$D5)*($AE5+$AF5)=0,"",IF(($C6+$D6)*($AE6+$AF6),"    *",AG5-LOOKUP(,0/(AJ$4:AJ4=""),AG$4:AG4)))


若要的是這個效果,其它欄公式自行去套∼∼
這用VBA反而太繁複了!
作者: donod    時間: 2015-11-4 19:44

回復 3# 准提部林
謝謝准提部林版大!

如果X5的條件改為:
=IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5<>0),"    *",IF(AND($AO5<>0,$AP5=0,$U5<>0,$V5<>0),"    *",IF(AND($AO5=0,$AP5<>0,$U5<>0,$V5=0.6216),"    *",IF(AND($AO5<>0,$AP5=0.6216,$U5=0,$V5<>0),"    *",IF(AND($AO5=0,$AP5<>0,$U5<>0,$V5=0),"    *",IF(AND($AO5<>0,$AP5=0,$U5=0,$V5<>0),"    *",IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5=0),"    *",IF(AND($AO5<>0,$AP5=0,$U5<>0,$V5=0),"    *",IF(AND($AO5=0,$AP5<>0,$U5=0,$V5<>0),"    *","")))))))))

請問如何套用在版大的公式中,謝謝!
作者: 准提部林    時間: 2015-11-4 20:28

回復 4# donod

這麼多 if , 用 + 即可:(任一成立)
=IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5<>0)+AND($AO5<>0,$AP5=0,$U5<>0,$V5<>0)+AND($AO5=0,$AP5<>0,$U5<>0,$V5=0.6216)+∼∼∼,"    *","")

其實AND(($AO5+$AP5)<>0,($U5+$V5)<>0)已包含其中幾個條件,
請自行再審酌各條件, 能省則省之~~
作者: donod    時間: 2015-11-4 22:04

回復 5# 准提部林

謝謝版大回覆,其實是想代入版大的公式:
=IF(($U5+$V5)*($AO5+$AP5)=0,"",IF(($U6+$V6)*($AO6+$AP6),"    *",W5-LOOKUP(,0/(X$4:X4=""),W$4:W4)))
作者: donod    時間: 2015-11-4 22:29

本帖最後由 donod 於 2015-11-4 22:39 編輯

由原先
X5=IF(AND($U5+$V5<>0,$AO5+$AP5<>0),"    *","")

改為
X5=IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5<>0),"    *",IF(AND($AO5<>0,$AP5=0,$U5<>0,$V5<>0),"    *",IF(AND($AO5=0,$AP5<>0,$U5<>0,$V5=0.6216),"    *",IF(AND($AO5<>0,$AP5=0.6216,$U5=0,$V5<>0),"    *",IF(AND($AO5=0,$AP5<>0,$U5<>0,$V5=0),"    *",IF(AND($AO5<>0,$AP5=0,$U5=0,$V5<>0),"    *",IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5=0),"    *",IF(AND($AO5<>0,$AP5=0,$U5<>0,$V5=0),"    *",IF(AND($AO5=0,$AP5<>0,$U5=0,$V5<>0),"    *","")))))))))

版大的公式如何改寫,謝謝!
作者: 准提部林    時間: 2015-11-5 10:12

回復 7# donod


=IF(AND($AO5<>0,$AP5<>0,$U5<>0,$V5<>0)+AND($AO5<>0,$AP5=0,$U5<>0,$V5<>0)+AND($AO5=0,$AP5<>0,$U5<>0,$V5=0.6216)+AND($AO5<>0,$AP5=0.6216,$U5=0,$V5<>0)+AND($AO5=0,$AP5<>0,$U5<>0,$V5=0)+AND($AO5<>0,$AP5=0,$U5=0,$V5<>0)+AND($AO5<>0,$AP5<>0,$U5<>0,$V5=0)+AND($AO5<>0,$AP5=0,$U5<>0,$V5=0)+AND($AO5=0,$AP5<>0,$U5=0,$V5<>0)=0,"",IF(AND($AO6<>0,$AP6<>0,$U6<>0,$V6<>0)+AND($AO6<>0,$AP6=0,$U6<>0,$V6<>0)+AND($AO6=0,$AP6<>0,$U6<>0,$V6=0.6216)+AND($AO6<>0,$AP6=0.6216,$U6=0,$V6<>0)+AND($AO6=0,$AP6<>0,$U6<>0,$V6=0)+AND($AO6<>0,$AP6=0,$U6=0,$V6<>0)+AND($AO6<>0,$AP6<>0,$U6<>0,$V6=0)+AND($AO6<>0,$AP6=0,$U6<>0,$V6=0)+AND($AO6=0,$AP6<>0,$U6=0,$V6<>0) ,"    *",W5-LOOKUP(,0/(X$4:X4=""),W$4:W4)))

藍色為[當列]的判斷, 紅色為[下一列]的判斷!
作者: donod    時間: 2015-11-5 14:16

回復 8# 准提部林

謝謝版大回覆!

附件中的綠色部份是改用新條件,紅色部份出錯(Q681,Z681),參考了對上一組有"*"部份,但DELETE上一組有"*"部份就會正確。再請大大指教。

[attach]22353[/attach]
作者: 准提部林    時間: 2015-11-5 14:44

本帖最後由 准提部林 於 2015-11-5 14:48 編輯

回復 9# donod

疏忽了其間有0值,
LOOKUP(0,0/(Q$4:Q680="") 遇到0即停止,
改為:
LOOKUP(1,0/(Q$4:Q680="")

可選取整張工作表,
將 LOOKUP(, 全部取代成 LOOKUP(1,
作者: donod    時間: 2015-11-5 21:40

回復 10# 准提部林

感謝版大幫忙,公式已經沒有問題了。
但當數據太多及數據改變,需要很耐時間計算,甚至停下來。
作者: donod    時間: 2015-11-6 00:12

再附上完整的檔案,謝謝大大!
[attach]22360[/attach]
再次說明:
例子中,有"*"的儲存格提示重複了相對欄位的儲存格,例如例子中X12-X14有"*",提示W12-W14重複了欄位AQ12-AQ14
1) 如果想將一連串有"*"部分的最下一個儲存格(一連串有"*"部分之下有機會再出現一連串有"*"部分或1個有"*"部分),回傳相對儲存格之間相減(以上例子:X14=W14-W11) 及
2) 將只有1個有"*"部分的儲存格,回傳相對儲存格之間相減(例子中:AJ7=AG7-AG6)
(有"*"部分是可用其他字符代替的)
作者: 准提部林    時間: 2015-11-6 11:06

本帖最後由 准提部林 於 2015-11-6 11:09 編輯

回復 12# donod

Sub TEST()
Dim R&, x&, y&, H, xR As Range
R = Cells(Rows.Count, 1).End(xlUp).Row ’以A欄檢測最後一筆資料列號
If R < 5 Then Exit Sub
For x = Range("X1").Column To Range("AB1").Column 'X ~ AB 欄
  For y = 5 To R
    Set xR = Cells(y, x)
    If xR = "    *" Then
      If H = "" Then H = Val(Range("W" & y - 1))
      If xR(2, 1) = "" And H <> "" Then
        xR = "=" & Val(Range("W" & y)) & "-" & H
      End If
    End If
    If IsNumeric(xR) Then H = ""
  Next y
Next x

'其它欄位往下加入(規則如上,只有相減值的欄不同) 
End Sub

1.先用公式產生檢查重覆的"    *" 記號
2.再使用vba進行兩值相減
3.以上只示例X∼AB欄的做法,其它欄請自行去套入
4.相減值以公式 = ??? - ??? 表現,方便做比對是否正確
作者: donod    時間: 2015-11-6 22:01

回復 13# 准提部林
可以了,感謝版大再次教授!
連備註都給我們加上,原本不明白的地方都清楚了!
感恩這兒的大大無私奉獻,謝謝您們!
作者: 准提部林    時間: 2015-11-7 12:25

回復 14# donod


給個參考方案,能用則用,應可事半功倍:
[attach]22370[/attach]

只要在〔第四列〕設好公式,及標記相減值的欄位,程式全自動處理∼∼
作者: donod    時間: 2015-11-7 19:22

回復 15# 准提部林

快速了很多,很有用,效率也提高了,謝謝准提部林版大教授!




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