EXCEL 批量生成sheet表+生成超链接目录+某列按多条件去重罗列+提取单元格中的字母、数字


前言

工作中总会有一些麻烦的问题想要用一套公式解决,在度娘查询到答案后,这些让人眼前一亮的公式总是一用就忘,下次继续度娘,这就很不高效了,因此从今天开始做总结记录,一遍更好地掌握知识。
注:标题先后顺序只是因记录顺序不同而这样,每个标题下的内容都可以看做独立内容。


一、EXCEL 公式实现多个条件值匹配

场景模拟:当我需要将某一行的连续区域内的单元格作为条件去匹配对应区域内的值,并将在指定的目标区域返回所得的匹配结果作为文本拼接起来形成一个新的字符串。

模拟数据如下:
在这里插入图片描述

期望结果如下:
在这里插入图片描述

直接上伸手党公式:

=SUBSTITUTE(TEXTJOIN("",TRUE,IF((TRANSPOSE($A$1:$E$100)=TRANSPOSE(L2:P2),""),TRANSPOSE($F$1:$J$100),)),0,"")
然后数组三键

公式解析:
拿如下数据举例。

1.TRANSPOSE()是将区域转置的函数,可将EXCEL中的区域当做矩阵来看,这里TRANSPOSE()主要作用是调整返回结果的顺序,作用解释完下面的原理再提。
2.TRANSPOSE($A$1:$E$100)=TRANSPOSE(L2:P2)返回的是一个100 X 5(跟区域的行列数一样)的一个只有TRUE,FALSE的逻辑矩阵,设为A。
如下所示
在这里插入图片描述博主学渣,忘了这种求出0,1(FALSE,TRUE相当于0,1)的方式在矩阵里叫什么了,大概就是这个原理,嗯…

3.将TRANSPOSE($F$1:$J$100)设为矩阵B,那么IF函数可转化为IF(A,B,"")。而EXCEL中关于IF()函数的定义为:

判断是否满足一个条件:如满足返回一个值,如果不满足返回另一个值。

把他转化为矩阵去理解,其实际效果相当于A*B,结果为TRUE的返回B原来的对应的值,结果为FALSE的返回空白值""(空白可以看做一个值,也就是空白值"")。
如下所示:
在这里插入图片描述4.再用TEXTJOIN()将结果进行拼接,这里注意了,TEXTJOIN是按行拼接的,那要是不转置,那按图中的结果那就是TEXTJOIN("",TRUE,{“置物架”,"","",“4格”,""},{"",“铁网”,“白色”,"",""},{"","","","",""},{"","","","",""},…,{ {"","","","",""}}) = 置物架4格铁网白色,但我的需求是将结果按级数的顺序进行拼接,也就是一级分类在结果字符串中的第一个,二级分类在结果字符串中的第二个…以此类推,将这个需求转为图中就是要想办法按列拼接,但TEXTJOIN只能按行拼接,那我们换个思路,我们将结果转置一下,那原来的列不就变成行了吗?那么此时进行的按行拼接其实际效果就相当于我们需要的按列拼接

公式应用注意事项:
1.条件、条件区域、结果区域列数要一致,可以观察公式中的几个区域,都是五列(当然也可以其他的相同列数)。
2.条件区域、结果区域的行数要一致,且不能太长。本人随机测试了下,一万行是可以的,更多行的区域需要使用者自主发现和调节。

二、EXCEL 工作薄下SHEET表太多时你可以这样做

场景模拟:
1.根据单元格对应的名称批量生成对应SHEET表,且保持表头一致。
2.有一个数据总表,有大量的SHEET子表,想要快速定位到指定的SHEET表。

1.生成多个相同表头的SHEET表

1.1.批量生成SHEET表

1.首先打开我们Excel,将我们要新建工作表的名称粘贴复制进Excel单元格中

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,可以使用Apache POI库来读取Excel文件,以下是Java代码示例: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExtractDataFromExcel { public static void main(String[] args) throws IOException { // 打开Excel文件 FileInputStream inputStream = new FileInputStream(new File("path/to/excel/file.xlsx")); Workbook workbook = WorkbookFactory.create(inputStream); // 获取第一个工作 Sheet sheet = workbook.getSheetAt(0); // 遍历每一行 for (Row row : sheet) { // 获取某一列的单元格 Cell cell = row.getCell(2); // 假设列索引为2 if (cell != null) { String value = cell.getStringCellValue(); // 正则达式提取数字和公斤 String regex = "(\\d+\\.?\\d*)公斤"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(value); if (matcher.find()) { String number = matcher.group(1); System.out.println(number); } } } // 关闭文件流和工作簿 inputStream.close(); workbook.close(); } } ``` 这个代码片段会读取Excel文件第一个工作的第二列,然后使用正则达式提取每个单元格数字和公斤,最后输出提取到的数字。注意,这里假设公斤的单位始终为“公斤”,如果有其他单位可能需要调整正则达式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值