ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 483|回复: 11

[求助] 在数组中选取10个数据,满足平均值及标准差要求。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-14 19:59 | 显示全部楼层 |阅读模式
求助大神,
image.png
如图,左侧给出一列数组,输入平均值及标准差。
如何能在A列数组中选取一组10个数据,满足平均值及标准差需求。

(平均值精确至小数点后1位,标准差精确至小数点后3位)

取数组满足平均值及标准差要求.rar

11.59 KB, 下载次数: 17

exlce

TA的精华主题

TA的得分主题

发表于 2024-8-15 10:22 | 显示全部楼层
VBA版块问问看,,
这是需要凑数、规划求解

TA的精华主题

TA的得分主题

发表于 2024-8-15 18:43 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-8-15 18:44 编辑

需要专业知识,没搞懂标准差怎么算,参考gpt写一个吧,能出结果,仅供参考。

取数组满足平均值及标准差要求.zip

20.24 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-8-15 18:44 | 显示全部楼层
参与一下。。。

  1. Function CalculateMean(arr As Variant) As Double
  2.     Dim sum As Double
  3.     Dim count As Long
  4.     Dim i As Long
  5.     For i = LBound(arr) To UBound(arr)
  6.         sum = sum + arr(i)
  7.         count = count + 1
  8.     Next i
  9.     CalculateMean = sum / count
  10. End Function

  11. Function CalculateStdDev(arr As Variant, mean As Double) As Double
  12.     Dim sumSqDiff As Double
  13.     Dim count As Long
  14.     Dim i As Long
  15.     For i = LBound(arr) To UBound(arr)
  16.         sumSqDiff = sumSqDiff + (arr(i) - mean) ^ 2
  17.         count = count + 1
  18.     Next i
  19.     CalculateStdDev = Sqr(sumSqDiff / count)
  20. End Function

  21. Sub SelectNumbersByMeanAndStdDev()
  22.     r = Cells(Rows.count, 1).End(3).Row
  23.     numbers = Application.Transpose([a2].Resize(r - 1, 1))
  24.     targetMean = 29.1 ' 示例平均值
  25.     targetStdDev = 1.553 ' 示例标准差
  26.     ' 初始化数组
  27.     ReDim selection(1 To 10)
  28.     count = 0
  29.     ' 计算numbers数组的平均值和标准差
  30.     mean = CalculateMean(numbers)
  31.     stdDev = CalculateStdDev(numbers, mean)
  32.     ' 循环直到选择足够数量的数
  33.     Do While count < 10
  34.         ' 随机选择数组中的一个数
  35.         randomIndex = Int((UBound(numbers) - LBound(numbers) + 1) * Rnd + LBound(numbers))
  36.         ' 检查这个数是否满足条件
  37.         If Abs(numbers(randomIndex) - targetMean) <= targetStdDev Then
  38.             ' 如果满足条件,添加到选择数组中
  39.             count = count + 1
  40.             selection(count) = numbers(randomIndex)
  41.         End If
  42.     Loop
  43.     ' 输出结果
  44.     For i = 1 To 10
  45.         Cells(i + 1, "g") = selection(i)
  46.     Next i
  47. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-15 19:04 | 显示全部楼层
ykcbf1100 发表于 2024-8-15 18:43
需要专业知识,没搞懂标准差怎么算,参考gpt写一个吧,能出结果,仅供参考。

运行不了好像,编译错误

TA的精华主题

TA的得分主题

发表于 2024-8-15 19:06 | 显示全部楼层
压力山大根 发表于 2024-8-15 19:04
运行不了好像,编译错误

我这里是能运行的。

如果你运行出错,应该是版本原因吧。

e7d848a9-e2be-43af-b105-924be4b7965a.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-15 19:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
50e90b7674872514fb78d89e929cfa9.png 我这边显示这个,大佬

TA的精华主题

TA的得分主题

发表于 2024-8-16 15:01 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-16 19:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

你好,应该是STDEV.S,不过能发下文件吗?

TA的精华主题

TA的得分主题

发表于 2024-8-16 19:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个应该是用“规划求解”才能搞定吧?不敢俺不熟悉怎么弄那玩意儿。高手来指点吧。
规划求解.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-10-23 18:35 , Processed in 0.049209 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表