ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 班级分组--感谢fjlhgs老师的无私付出,-问题已解决,正解在7楼,

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 10:27 | 显示全部楼层
yjh_27 发表于 2024-8-2 10:04
前段时间,有个找团伙的贴子与此类似,只是那个条件多点。

感谢老大的关注与回贴,方便发下找团伙那个贴子的地址吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 10:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yjh_27 发表于 2024-8-2 10:01
这个是集合问题,每行为一个集合,老师为集合元素。二集合有交集则合并,递归后各集合为无交集的集合(组)。

老师的思路很清晰,不知方便抽空帮我用代码实现下好吗?先谢谢您了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 10:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
班级分组.(变换可分为多组的数据后,程序还是分成了一组)xlsm.rar (64.33 KB, 下载次数: 11) fjlhgs 发表于 2024-8-2 08:26
数据给定其实能够分的组数上限就确定了,这套数据不可能分成2组以上,附件为自动生成最多组数,再测试或换 ...

再次感谢老师的帮忙,我下来换数据进行了测试,填写了2个不同学校的老师任课信息后,程序还是分成了一组(正确的结果应最少可以分组2组),麻烦您有空时再帮我看看好吗

TA的精华主题

TA的得分主题

发表于 2024-8-2 11:55 | 显示全部楼层
任凯\陈海蓝\陈琴媛\肖永会\王静芳\安晓英\朱慧 这些老师跨了2个学校

TA的精华主题

TA的得分主题

发表于 2024-8-2 12:38 来自手机 | 显示全部楼层
jx928867128 发表于 2024-8-2 10:58
再次感谢老师的帮忙,我下来换数据进行了测试,填写了2个不同学校的老师任课信息后,程序还是分成了一组 ...

期望的结果是啥?
哪里2组?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 12:55 | 显示全部楼层
fjlhgs 发表于 2024-8-2 11:55
任凯\陈海蓝\陈琴媛\肖永会\王静芳\安晓英\朱慧 这些老师跨了2个学校

是我太不细心了,再次感谢老师的帮忙

TA的精华主题

TA的得分主题

发表于 2024-8-2 13:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jx928867128 发表于 2024-8-2 10:35
老师的思路很清晰,不知方便抽空帮我用代码实现下好吗?先谢谢您了

我不懂归集概念,但我有一个思路:
用第一行里的每个教师姓名,到以下各行中查找,找到的就 写上 1 ,再用第二行里的教师去未写上 1 的行里查找,找到就写 1。到最后一行,是第一轮。
第二轮,对剩下的A列为空的,进行相同的循环操作,是写上 2 了。.....直到第N轮,查找后,无空的了,就结束!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-2 14:03 | 显示全部楼层
wengjl 发表于 2024-8-2 13:08
我不懂归集概念,但我有一个思路:
用第一行里的每个教师姓名,到以下各行中查找,找到的就 写上 1 ,再 ...

没太明白您的思咱,谢谢您的关注与回贴

TA的精华主题

TA的得分主题

发表于 2024-8-2 15:45 来自手机 | 显示全部楼层
jx928867128 发表于 2024-8-2 10:27
感谢老大的关注与回贴,方便发下找团伙那个贴子的地址吗

最近一段时间手边无电脑。你站内搜关键字 团伙 应该可以搜到。

TA的精华主题

TA的得分主题

发表于 2024-8-2 21:57 来自手机 | 显示全部楼层
wengjl 发表于 2024-8-2 13:08
我不懂归集概念,但我有一个思路:
用第一行里的每个教师姓名,到以下各行中查找,找到的就 写上 1 ,再 ...

这个思路不错,参与一下。

<?php
$sapi_type = php_sapi_name();
if($sapi_type=='cli'){

$rootPath='/storage/emulated/0/Download/htdocs';
}else{

$rootPath=$_SERVER["DOCUMENT_ROOT"];
}
$db = new PDO('sqlite:'.$rootPath.'/EData/app/db');
function restoreNewGrp(){
global $db;
$sql="create temp table newGrp as select *  from newGrp2";
$result=$db->query($sql);
$sql="select * from newGrp";
$result=$db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
//print_r($result);
}
function getNamesByClass($minClass){
global $db;
$sql="select 姓名 from newGrp where 班级 in ($minClass)";
//echo "\n".'getNamesByClass sql:'.$sql."\n";
$result=$db->query($sql)->fetchAll(PDO::FETCH_ASSOC);

$arrNames=[];
foreach ($result as $arrVal){
$arrNames[]=$arrVal["姓名"];
}
//print_r($arrNames);
$criteriaNames="'".implode("','",$arrNames)."'";
return $criteriaNames;
}
function getClasses($criteriaNames){
global $db;
$sql="select 班级 from newGrp where 姓名 in ($criteriaNames)";
//echo $sql;

$result=$db->query($sql)->fetchAll(PDO::FETCH_ASSOC);

$arrNames=[];
foreach ($result as $arrVal){
$arrNames[]=$arrVal["班级"];
}
//print_r($arrNames);
$criteriaNames="'".implode("','",$arrNames)."'";
return $criteriaNames;

}
function getNextClasses(){
global $db;
$sql="select 班级 from newGrp limit 1";
//echo $sql;

$result=$db->query($sql)->fetchAll(PDO::FETCH_ASSOC);

if(sizeof($result)==0) return '';

$criteriaNames="'".$result[0]["班级"]."'";
return $criteriaNames;

}
function deleteByClasses($classes){

global $db;
$sql="delete from newGrp where 班级 in ($classes)";
$result=$db->query($sql);
return 1;

}
function reGrp($grpId,&$arrGroup,$minClass,$criteriaNames){
if(empty(trim($minClass,"'"))){

        return;
}else{

$criteriaNames=getNamesByClass($minClass);
}
if(!empty(trim($criteriaNames,"'"))){
$arrMinClass=explode("','",trim($minClass,"'"));
foreach($arrMinClass as $aClass){
$arrGroup[$grpId][]=$aClass;
}
deleteByClasses($minClass);
}
$minClass=getClasses($criteriaNames);
if(empty(trim($minClass,"'"))){
$grpId++;
$minClass=getNextClasses();
if($criteriaNames=="''"){
return;
}else{
reGrp($grpId,$arrGroup,$minClass,$criteriaNames);       
}
}else{
reGrp($grpId,$arrGroup,$minClass,$criteriaNames);       
}
}
/*
restoreNewGrp();
$grpId=1;
$arrGroup=[];
$minClass="'1'";
$criteriaNames='';
reGrp($grpId,$arrGroup,$minClass,$criteriaNames);
echo '<pre>';
print_r($arrGroup);
*/
Screenshot_2024-08-02-21-51-26-710_com.mmbox.xbrowser.pro.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 09:44 , Processed in 0.037532 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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