如何在EXCEL中使用函数使四个数减另四个数不借位得正数。如5762-6814=9958, 2001-3110=9991

就是说,相减不借位,但还是按借了位计算,四个数减另四个数乃得四个数,如:5762-6814=9958,2001-3110=9991,0024-2219=8815.1101-8888=3323
请高手帮忙,谢谢了!

第1个回答  2012-06-17
被减数一定比减数小吗?
假设被减数比减数大时,其差不作变动
假设被减数在A1、减数在B1
在C1输入公式
=IF(A1>B1,0,10000)+A1-B1
即可追问

0014 5510 -5496 不是- 而是 5504
0015 5512 -5497 不是- 而是 5503
0016 5514 -5498 不是- 而是 5502
0017 5516 -5499 不是- 而是 5501
0018 5518 -5500 不是- 而是 5500

5762 6814 8948(9958)
2001 3110 8891(9991)
0024 2219 7805 (8815)
1101 8888 2213 (3323)有的被减数一定比减数小,虽已经借位但数字不变,有很多行很多列啊!你能让我计算第一个后,一拉填充完成吗?谢了

追答

假设第一个被减数在A1、减数在B1
输入公式
=IF(LEFT(A1)*1<LEFT(B1)*1,10+LEFT(A1)*1-LEFT(B1)*1,LEFT(A1)*1-LEFT(B1)*1)&IF(MID(A1,2,1)*1<MID(B1,2,1)*1,10+MID(A1,2,1)*1-MID(B1,2,1)*1,MID(A1,2,1)*1-MID(B1,2,1)*1)&IF(MID(A1,3,1)*1<MID(B1,3,1)*1,10+MID(A1,3,1)*1-MID(B1,3,1)*1,MID(A1,3,1)*1-MID(B1,3,1)*1)&IF(RIGHT(A1)*1<RIGHT(B1)*1,10+RIGHT(A1)*1-RIGHT(B1)*1,RIGHT(A1)*1-RIGHT(B1)*1)
拉吧

追问

厉害,差不多达到我的要求,但 0 在前面时就是下面这样,能解决么?
0024 9952 #VALUE!
0025 9953 #VALUE!
0026 9954 #VALUE!
还有,有一列固定的四位数在A列,要分别减去(BCDE)很多个四位数,怎么很快得到结果呢?如:
A B C D E
3257 2217 2580 0215 1459
2547 结果 结果 结果 结果
0875 结果 结果 结果 结果
6600 结果 结果 结果 结果

追答

先说0 在前面时出错的情况
估计你的A列是设置为自定义格式了,虽然看上去是4位数,但实际的值是2位数,因而造成公式取值出错
建议将A列设置为文本,再输入4位数的数字(前面的0不能省略),就不会出错了。

有一列固定的四位数在A列,要分别减去(BCDE)很多个四位数
在B2输入公式
=IF(LEFT($A2)*1<LEFT(B$1)*1,10+LEFT($A2)*1-LEFT(B$1)*1,LEFT($A2)*1-LEFT(B$1)*1)&IF(MID($A2,2,1)*1<MID(B$1,2,1)*1,10+MID($A2,2,1)*1-MID(B$1,2,1)*1,MID($A2,2,1)*1-MID(B$1,2,1)*1)&IF(MID($A2,3,1)*1<MID(B$1,3,1)*1,10+MID($A2,3,1)*1-MID(B$1,3,1)*1,MID($A2,3,1)*1-MID(B$1,3,1)*1)&IF(RIGHT($A2)*1<RIGHT(B$1)*1,10+RIGHT($A2)*1-RIGHT(B$1)*1,RIGHT($A2)*1-RIGHT(B$1)*1)
右拉、下拉即可

追问

你真是我的恩人,太厉害了,太感谢您了!!请您再帮个忙,把下面“在C1输入公式=IF(A1>B1,0,10000)+A1-B1 ”改一改,让我能在“有一列固定的四位数在A列,要分别减去(BCDE)很多个四位数”,这个计算方法我也想用一用,好吗?

假设被减数比减数大时,其差不作变动
假设被减数在A1、减数在B1
在C1输入公式
=IF(A1>B1,0,10000)+A1-B1
即可

追答

=IF(A1>B1,0,10000)+A1-B1
这个公式只考虑了千位数不借位,其它3位数还是借位的,应该不是你想要的答案。

要修改也方便
B2(或F2)输入公式
=IF($A2>B$1,0,10000)+$A2-B$1
右拉、下拉即可

本回答被提问者采纳
第2个回答  2012-06-17
好奇怪的要求,楼上那位没有带进去试试吧?
是不是要求每一位都不借位?
恐怕的先把4位数拆成4个数,再分别判断相减
没问题,验证通过,先拆,再判断相减,再合并
=IF(MID($A$1,1,1)<MID($B$1,1,1),MID($A$1,1,1)+10-MID($B$1,1,1),MID($A$1,1,1)-MID($B$1,1,1))
这是拆与相减的第一位,相应更改得到后面的,再合并追问

5762 6814 9
2001 3110 9
0024 2219 9
1101 8888 9
你能让我计算第一个后,一拉填充完成吗?谢了

第3个回答  2012-06-17
用公式的话不知道怎么弄才好,不过用VBA的话还是插简单的。
Sub test()
Dim arr(1 To 4), data1, data2, arr1(1 To 4), arr2(1 To 4)
data1 = Range("A1").Value
data2 = Range("b1").Value
For i = 1 To 4
arr1(i) = Val(Mid(data1, i, 1))
arr2(i) = Val(Mid(data2, i, 1))
Next i

For j = 1 To 4
If arr1(j) >= arr2(j) Then
arr(j) = arr1(j) - arr2(j)
Else
arr(j) = arr1(j) - arr2(j) + 10
End If
Next j

Range("C1") = Join(arr, "")
End Sub
这段代码未加入任何容错处理语句,所以用的时候请严格按你上面的条件填写数据,将被减数填在A1,减数填在B1,结果就会出现在C1,另外如果你要求数字前面的零也保留的话(例如0014),请把C1的单元格格式调成文本格式。追问

5762 6814 9958
2001 3110
0024 2219
1101 8888
第一个结果对了,可我要计算很多行很多列啊,我应该怎么计算,教我方法好吗?谢谢您了!!!!!!!!!!!!!!你能让我计算第一个后,一拉填充完成吗?谢了

追答

请在VBE中插入新模块,并在该模块内写入以下代码:Public Function test(data1 As Range, data2 As Range)
Dim arr(1 To 4), arr1(1 To 4), arr2(1 To 4)

For i = 1 To 4
arr1(i) = Val(Mid(data1.Value, i, 1))
arr2(i) = Val(Mid(data2.Value, i, 1))
Next i

For j = 1 To 4
If arr1(j) >= arr2(j) Then
arr(j) = arr1(j) - arr2(j)
Else
arr(j) = arr1(j) - arr2(j) + 10
End If
Next j

test = Join(arr, "")

End Function
同上,这段代码也未加入容错处理,首先请把所有单元格设为文本格式,然后选定你要填充公式的区域,自定义格式为:0000。然后在B2单元格中填入公式:=test($A2,B$1)然后下拉右拉填充。另外建议为这个函数换个名字,“TEST”毕竟不好记,如果改的话要改两处,一是代码第一行的test,二是倒数第二行的test,两者必须相同。

相似回答