全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 Excel
7759 12
2012-10-13
悬赏 10 个论坛币 已解决
跪求大神帮忙!将感激不尽!   
如何在excel中用一个命令将以下表格的列(b1:b9)中提取出与列a相减绝对值最小的那个原始数据。比如,对于第一行来说,在列b1:b9的数值中与列a(值为16253.36)相减绝对值最小的应该是b1(值为16253.36)。

a

b1

b2

b3

b4

b5

b6

b7

b8

b9

16253.36

16253.36

16840.61

16858.68

18682.16

21803.59

25606.77

27422.13

30402.43

42164.05

5910.793

3643.454

4166.162

4624.979

4982.695

5188.049

5543.153

6385.826

6505.997

7658.51

5085.411

1818.415

2127.819

2616.349

3285.394

3657.196

4067.788

4899.043

5026.069

5921.886

4585.643

2056.542

2423.16

2927.591

3597.31

3986.887

4362.309

5173.294

5341.565

6160.945

3136.977

2366.306

2656.955

3077.256

3481.971

3557.021

3926.974

4807.242

4772.931

5648.095

6238.826

6099.316

6693.34

7115.165

7458.178

7788.268

8530.133

9537.446

9887.782

12330.19

3893.322

2296.678

2531.663

2918.435

3338.054

3458.185

3923.93

4836.758

4809.89

5987.039

4869.269

3786.409

4437.853

5008.883

5943.919

6866.989

7403.604

8167.904

8849.621

10343.82

5617.544

2275.33

2779.032

3311.325

4112.966

4869.268

5325.349

6081.679

6455.57

7812.111

8030.687

3923.215

4629.664

5195.92

6074.296

7114.513

7732.785

8502.869

9162.237

11251.06

9344.57

9279.701

10266.18

10721.31

11157.85

11940.27

12901.5

13910.19

14811.33

18323.76

3710.978

1591.319

1932.547

2448.437

3386.091

4039.848

4457.269

5224.263

5617.071

6328.899

3804.392

716.8973

1009.775

1540.138

2218.856

2528.882

2754.477

3510.236

3513.299

3804.392

4855.236

3112.36

3521.977

4019.176

4694.526

5000.865

5373.132

6209.723

6512.69

7102.203


最佳答案

TaskShare 查看完整内容

VBA 程序如下(注意:我假设你的数据是1列A,9列B,每列都是14行,当然9和14都可以改成其他大于1的整数。而且,假设你的数据在表格"Sheet1"中,A的数据在Excel表中B列,B1的数据在表中C列,。。。,B9在表中K列。A,B1-B9的各14个数据在Excel表中第2行至第15行列出。答案输出在第M列(最小的绝对值差的数值)和N列(达到最小绝对值差的B的编号): Sub FindMinAbsDiff() Dim EachRow As Long, EachIndexOfB As Long, A As Doub ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-10-13 23:12:35
VBA 程序如下(注意:我假设你的数据是1列A,9列B,每列都是14行,当然9和14都可以改成其他大于1的整数。而且,假设你的数据在表格"Sheet1"中,A的数据在Excel表中B列,B1的数据在表中C列,。。。,B9在表中K列。A,B1-B9的各14个数据在Excel表中第2行至第15行列出。答案输出在第M列(最小的绝对值差的数值)和N列(达到最小绝对值差的B的编号):

Sub FindMinAbsDiff()
Dim EachRow As Long, EachIndexOfB As Long, A As Double, B As Double
Dim MinDiff As Double, MinIndex As Long
For EachRow = 1 To 14 '14 is number of rows, can change to any number
    '---------for each row, now start to find the min difference
A = Sheets("Sheet1").Cells(EachRow + 1, 2).Value 'A in each row
B = Sheets("Sheet1").Cells(EachRow + 1, 3).Value 'B1 in each row
MinDiff = Abs(B - A)
MinIndex = 1
    For EachIndexOfB = 2 To 9 'calculate for B2~B9 in each row
        B = Sheets("Sheet1").Cells(EachRow + 1, EachIndexOfB + 2).Value
        If MinDiff > Abs(B - A) Then
            MinDiff = Abs(B - A)
            MinIndex = EachIndexOfB
        End If
    Next EachIndexOfB
'---------or each row, start to output to Sheet1
Sheets("Sheet1").Cells(EachRow + 1, 13).Value = MinDiff
Sheets("Sheet1").Cells(EachRow + 1, 14).Value = MinIndex
Next EachRow
End Sub
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-13 23:24:19
一句命令不行吧,除非搞个宏定义,
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-14 00:14:08
这是个VBA编程问题(用VBA编这个宏不难),为何要追求一个命令解决?当然,运行一个宏算是一个命令的话,倒也不难解决。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-14 00:22:32
TaskShare 发表于 2012-10-14 00:14
这是个VBA编程问题(用VBA编这个宏不难),为何要追求一个命令解决?当然,运行一个宏算是一个命令的话,倒 ...
谢谢您的回答,其实我也不懂是不是要用一个命令,就是想提取出所需要的数据。您说的VBA编宏命令怎么实现啊,能麻烦您帮忙下吗?万分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-10-14 11:25:40
ffcxy2005 发表于 2012-10-14 00:22
谢谢您的回答,其实我也不懂是不是要用一个命令,就是想提取出所需要的数据。您说的VBA编宏命令怎么实现啊 ...
我回复了,也写了程序,不过论坛要审核后你才能看见(不知为何要审核)。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群