楼主: ffcxy2005
7907 12

[问答] 跪求大神!如何在excel中用一个命令提取出与固定列相减绝对值最小的其他列的数据 [推广有奖]

  • 7关注
  • 7粉丝

已卖:1089份资源

博士生

36%

还不是VIP/贵宾

-

威望
0
论坛币
2810 个
通用积分
3.2700
学术水平
8 点
热心指数
12 点
信用等级
7 点
经验
4430 点
帖子
130
精华
0
在线时间
352 小时
注册时间
2011-4-13
最后登录
2025-3-13

楼主
ffcxy2005 发表于 2012-10-13 23:12:34 |AI写论文
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 ...
关键词:EXCEL exce xcel cel 绝对值 excel 绝对值 如何

回帖推荐

TaskShare 发表于2楼  查看完整内容

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 ...

本帖被以下文库推荐

沙发
TaskShare 发表于 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
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
客初 + 20 + 20 热心帮助其他会员
ffcxy2005 + 1 + 1 + 1 分析的有道理

总评分: 经验 + 20  论坛币 + 20  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
xrym 发表于 2012-10-13 23:24:19
一句命令不行吧,除非搞个宏定义,

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

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

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

7
pitou019s 发表于 2012-10-14 14:23:37
{=LOOKUP(1,0/(MIN(ABS(B1:J1-A1))=ABS(B1:J1-A1)),B1:J1)}
{=MIN(IF(ABS(B1:J1-A1)=MIN(ABS(B1:J1-A1)),$B1:$J1))}
用以上两个公式都行。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ffcxy2005 + 1 + 1 + 1 好的意见建议

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
ffcxy2005 发表于 2012-10-15 11:37:08
TaskShare 发表于 2012-10-14 11:24
VBA 程序如下(注意:我假设你的数据是1列A,9列B,每列都是14行,当然9和14都可以改成其他大于1的整数。而 ...
非常感谢您的回答和帮助~!

9
ffcxy2005 发表于 2012-10-15 11:38:54
pitou019s 发表于 2012-10-14 14:23
{=LOOKUP(1,0/(MIN(ABS(B1:J1-A1))=ABS(B1:J1-A1)),B1:J1)}
{=MIN(IF(ABS(B1:J1-A1)=MIN(ABS(B1:J1-A1)),$ ...
谢谢您的回答,方法简便实用,但由于楼上的哥们比较辛苦,用vba来实现了;而且他的币不多,所以我权衡再三,只能把币给他了。衷心地再次感谢您!

10
TaskShare 发表于 2012-10-15 21:23:50
ffcxy2005 发表于 2012-10-15 11:38
谢谢您的回答,方法简便实用,但由于楼上的哥们比较辛苦,用vba来实现了;而且他的币不多,所以我权衡再三 ...
谢谢!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 03:48