金币
UID110462
帖子
主题
积分2618
注册时间2013-6-10
最后登录1970-1-1
听众
性别保密
|
欢迎您注册蒲公英
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
很久没有发帖了,最近用AI写了个用于取样随机编号的宏代码,使用方法也很简单,输入到货件数后,点击随机按钮就可以生成数据,非常适用于中药材、中药饮片的取样,功能和蒲公英的取样助手一样,附上源代码,以供蒲友研究,感觉好用的蒲友麻烦给点个认可 :
function generateRandomNumbers() {
try {
var sheet = Application.ActiveSheet;
// 获取H4单元格的值(随机数上限)
var maxValue = Number(sheet.Range("H4").Value2);
// 获取两个组的数量限制
var count1 = Number(sheet.Range("A10").Value2);
var count2 = Number(sheet.Range("A23").Value2);
// 验证输入值
if (isNaN(maxValue) || maxValue < 1) {
MsgBox("H4必须是大于0的数字");
return;
}
if (isNaN(count1) || isNaN(count2) || count1 < 1 || count2 < 1) {
MsgBox("A10和A23必须是大于0的数字");
return;
}
// 计算各区域的最大容量(9行×9列=81个单元格)
var maxCellsPerArea = 9 * 9;
// 验证生成数量是否超过区域容量
if (count1 > maxCellsPerArea) {
MsgBox("第一组生成数量不能超过81个");
return;
}
if (count2 > maxCellsPerArea) {
MsgBox("第二组生成数量不能超过81个");
return;
}
// 清空目标区域
sheet.Range("B11:J19").ClearContents();
sheet.Range("B24:J32").ClearContents();
// 生成第一组随机数
var numbers1 = {};
while (Object.keys(numbers1).length < count1) {
var randomNum = Math.floor(Math.random() * maxValue) + 1;
numbers1[randomNum] = true;
}
fillRandomNumbers(sheet, "B11:J19", numbers1);
// 生成第二组随机数
var numbers2 = {};
while (Object.keys(numbers2).length < count2) {
var randomNum = Math.floor(Math.random() * maxValue) + 1;
// 确保第一组和第二组中的数不重复
if (!numbers1[randomNum]) {
numbers2[randomNum] = true;
}
}
fillRandomNumbers(sheet, "B24:J32", numbers2);
MsgBox("成功生成两组随机数!\n第一组:" + count1 + "个\n第二组:" + count2 + "个");
} catch (error) {
MsgBox("运行时错误: " + error.message);
}
}
// 辅助函数:填充随机数到指定区域
function fillRandomNumbers(sheet, rangeAddress, numbers) {
var uniqueNumbers = Object.keys(numbers).map(Number);
var range = sheet.Range(rangeAddress);
var index = 0;
// 区域范围:B11:J19 或 B24:J32(9行×9列)
for (var row = 1; row <= 9; row++) {
for (var col = 1; col <= 9; col++) {
if (index >= uniqueNumbers.length) return;
range.Cells(row, col).Value2 = uniqueNumbers[index];
index++;
}
}
}
|
|