一个可以自动生成随机区组试验的excel VBA小程序2

2024-06-08 08:04

本文主要是介绍一个可以自动生成随机区组试验的excel VBA小程序2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        本程序用于应对随机区组试验中要求相同小区位置不能出现同一品种的情况。编程思路略有不同,故将另开一篇。

        本试验设计是在原来的基础上改版的,相关的参数设置与操作同上一版,这里不在赘述:一个可以自动生成随机区组试验的excel VBA小程序-CSDN博客

        实现代码如下:

Sub 生成试验设计()Dim ws As Worksheet, tg_ws As Worksheet
Dim rng As Range, rng2 As Range
Dim cell As Range, lastcell As Range
Dim pq As String, sn As String, pl As String   'pq即排区号的简称,sn即sheetname的简称,pl即排列的简称
Dim qz_num As Integer
Dim i As Integer, j As Integer, lastRow As Integer
Dim m As Integer, n As Integer, k As Integer
Dim arr As Variant, rngValues As Variant, tmp As VariantApplication.ScreenUpdating = False       '刷新屏幕关闭
Application.DisplayAlerts = False        '警告提示框关闭'获取初始设置
sn = Range("A2").Value    '新建工作表的名称
pq = Range("A5").Value   '是否包含排区号
pl = Range("A8").Value    '试验设计是横向排列还是纵向排列
qz_num = Range("A11").Value    '区组的数量'获取品种名称
lastRow = Range("C10000").End(xlUp).Row    '获取品种名称列的最后一行的行号
Set rng = Range("C2:C" & lastRow)' 新建一个工作表,用于生成随机区组试验设计
Set ws = ThisWorkbook.Sheets.Add
If sn <> "" Thenws.Name = sn       ' 将新工作表的名称设置为"新工作表"
End If' 将范围内的值存储在数组中
rngValues = rng.Value
ReDim arr(1 To UBound(rngValues), 1 To qz_num) As VariantFor i = 1 To qz_numFor j = 1 To (lastRow - 1)  '对数组进行赋值arr(j, i) = rngValues(j, 1)Next
NextFor i = 1 To qz_num    ' 随机排列数组中的元素
rnd:Randomize ' 初始化随机数生成器For m = LBound(arr) To UBound(arr) - 1n = Int((UBound(arr) - m + 1) * rnd + m)' 交换元素tmp = arr(m, i)arr(m, i) = arr(n, i)arr(n, i) = tmpNext mIf i <> 1 ThenFor k = 1 To (i - 1)For j = 1 To (lastRow - 1)If arr(j, k) = arr(j, i) ThenGoTo rndEnd IfNextNextEnd If
NextIf pq = "否" Then    '没有排区号的情况Select Case plCase "横向"'输入行标题For i = 1 To qz_numws.Cells(i, 1).Value = "区组" & iNext'将品种名称放入对应行排号的单元格中For j = 1 To qz_num    '对行号循环For i = 2 To lastRow    '对列号循环ws.Cells(j, i).Value = arr(i - 1, j)NextNextSet rng2 = Range(ws.Cells(1, 1), ws.Cells(j - 1, i - 1))'对单元格进行居中设置ws.Cells(1, 1).CurrentRegion().HorizontalAlignment = xlCenterws.Cells(1, 1).VerticalAlignment = xlCenter'对田间种植区域添加边框With rng2.Borders.LineStyle = xlContinuous.Weight = xlThin.Color = RGB(0, 0, 0) ' 黑色End WithCase "纵向"'输入列标题For i = 1 To qz_numws.Cells(1, i).Value = "区组" & iNext'将品种名称放入对应行排号的单元格中For j = 1 To qz_num    '对列号循环For i = 2 To lastRow    '对行号循环ws.Cells(i, j).Value = arr(i - 1, j)NextNextSet rng2 = Range(ws.Cells(1, 1), ws.Cells(i - 1, j - 1))'对单元格进行居中设置ws.Cells(1, 1).CurrentRegion().HorizontalAlignment = xlCenterws.Cells(1, 1).VerticalAlignment = xlCenter'对田间种植区域添加边框With rng2.Borders.LineStyle = xlContinuous.Weight = xlThin.Color = RGB(0, 0, 0) ' 黑色End WithCase ElseMsgBox "无此排列类型,请重新选择"End Select
Else    '有排区号的情况Select Case plCase "横向"'输入行标题For i = 1 To qz_num * 2 Step 2ws.Cells(i, 1).Value = "排区号"NextFor i = 2 To qz_num * 2 Step 2ws.Cells(i, 1).Value = "品种名称"Next'将品种名称放入对应行排号的单元格中For j = 1 To qz_num * 2  '对行号循环If j Mod 2 = 1 Then    '对行号进行判断,若为奇数则输入排区号For i = 2 To lastRow    '对列号循环ws.Cells(j, i).Value = "'" & (Int(j / 2) + 1) & "-" & (i - 1)NextElse    '对行号进行判断,若为偶数则输入品种名称For i = 2 To lastRow    '对列号循环ws.Cells(j, i).Value = arr(i - 1, (Int(j / 2)))NextEnd IfNextSet rng2 = Range(ws.Cells(1, 1), ws.Cells(j - 1, i - 1))'对单元格进行居中设置ws.Cells(1, 1).CurrentRegion().HorizontalAlignment = xlCenterws.Cells(1, 1).VerticalAlignment = xlCenter'对田间种植区域添加边框With rng2.Borders.LineStyle = xlContinuous.Weight = xlThin.Color = RGB(0, 0, 0) ' 黑色End WithCase "纵向"'输入列标题For i = 1 To qz_num * 2 Step 2ws.Cells(1, i).Value = "排区号"NextFor i = 2 To qz_num * 2 Step 2ws.Cells(1, i).Value = "品种名称"Next'将品种名称放入对应行排号的单元格中For j = 1 To qz_num * 2  '对列号循环If j Mod 2 = 1 Then    '对列号进行判断,若为奇数则输入排区号For i = 2 To lastRow    '对列号循环ws.Cells(i, j).Value = "'" & (Int(j / 2) + 1) & "-" & (i - 1)NextElse    '对列号进行判断,若为偶数则输入品种名称For i = 2 To lastRow    '对列号循环ws.Cells(i, j).Value = arr(i - 1, (Int(j / 2)))NextEnd IfNextSet rng2 = Range(ws.Cells(1, 1), ws.Cells(i - 1, j - 1))'对单元格进行居中设置ws.Cells(1, 1).CurrentRegion().HorizontalAlignment = xlCenterws.Cells(1, 1).VerticalAlignment = xlCenter'对田间种植区域添加边框With rng2.Borders.LineStyle = xlContinuous.Weight = xlThin.Color = RGB(0, 0, 0) ' 黑色End WithCase ElseMsgBox "无此排列类型,请重新选择"End Select
End IfApplication.ScreenUpdating = True       '刷新屏幕开启
Application.DisplayAlerts = True        '警告提示框开启End Sub

这篇关于一个可以自动生成随机区组试验的excel VBA小程序2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041615

相关文章

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

java读取excel文件为base64实现方式

《java读取excel文件为base64实现方式》文章介绍使用ApachePOI和EasyExcel处理Excel文件并转换为Base64的方法,强调EasyExcel适合大文件且内存占用低,需注意... 目录使用 Apache POI 读取 Excel 并转换为 Base64使用 EasyExcel 处

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介