蒲公英 - 制药技术的传播者 GMP理论的实践者

搜索
查看: 263|回复: 2
收起左侧

[药典标准] 用AI写了个excel宏代码用于取样随机编号

[复制链接]
药徒
发表于 2025-7-7 15:26:19 | 显示全部楼层 |阅读模式

欢迎您注册蒲公英

您需要 登录 才可以下载或查看,没有帐号?立即注册

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++;
        }
    }
}


00.jpg

药典 GMP方法取样.rar

20.2 KB, 下载次数: 14

回复

使用道具 举报

大师
发表于 2025-7-8 07:58:14 | 显示全部楼层
您好,

您分享的Excel宏代码用于中药材、中药饮片取样随机编号,功能与蒲公英的取样助手类似,具有一定的实用性。不过,在药学和医疗器械领域,取样过程需遵循严格的**数据完整性**和**可追溯性**要求(参考《药品生产质量管理规范》GMP附录、《医疗器械质量管理体系》ISO 13485等)。以下是几点专业建议:

1. **随机性验证**:  
   需确保代码生成的随机数符合统计学要求(如均匀分布),建议引用标准算法或工具(如RAND函数),并记录随机种子以实现可追溯(参考《中国药典》通则0911“抽样原则”)。

2. **审计追踪**:  
   代码应包含操作日志功能,记录每次取样的时间、操作人及生成的编号,以满足数据完整性要求(参考《药品数据管理规范》)。

3. **权限控制**:  
   宏代码需设置访问权限,避免未经授权的修改(参考《计算机化系统验证指南》GAMP 5)。

4. **合规性声明**:  
   若用于药品/医疗器械生产,需明确代码符合GxP规范,并进行验证(参考《FDA 21 CFR Part 11》)。

您的代码虽简化了流程,但实际应用中需结合上述要求完善。建议补充日志记录和权限管理模块,并在使用前进行验证。

(注:以上法规条款为示例性引用,具体实施需结合实际场景和最新法规版本。)

【鼠鼠还在学习中,内容仅供参考(药搭GMP软件提供技术支持)
回复

使用道具 举报

药士
发表于 2025-7-8 09:35:58 | 显示全部楼层
你在蒲公英论坛 发这种帖子 我感觉是把 论坛取样助手 当摆设……
https://quyang.ouryao.com/#/dashboard/analysis3
回复

使用道具 举报

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

本版积分规则

×发帖声明
1、本站为技术交流论坛,发帖的内容具有互动属性。您在本站发布的内容:
①在无人回复的情况下,可以通过自助删帖功能随时删除(自助删帖功能关闭期间,可以联系管理员微信:8542508 处理。)
②在有人回复和讨论的情况下,主题帖和回复内容已构成一个不可分割的整体,您将不能直接删除该帖。
2、禁止发布任何涉政、涉黄赌毒及其他违反国家相关法律、法规、及本站版规的内容,详情请参阅《蒲公英论坛总版规》。
3、您在本站发表、转载的任何作品仅代表您个人观点,不代表本站观点。不要盗用有版权要求的作品,转贴请注明来源,否则文责自负。
4、请认真阅读上述条款,您发帖即代表接受上述条款。

QQ|手机版|蒲公英|ouryao|蒲公英 ( 京ICP备14042168号-1 )  增值电信业务经营许可证编号:京B2-20243455  互联网药品信息服务资格证书编号:(京)-非经营性-2024-0033

GMT+8, 2025-7-27 11:43

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

声明:蒲公英网站所涉及的原创文章、文字内容、视频图片及首发资料,版权归作者及蒲公英网站所有,转载要在显著位置标明来源“蒲公英”;禁止任何形式的商业用途。违反上述声明的,本站及作者将追究法律责任。
快速回复 返回顶部 返回列表