ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 以科目为关键字横向写入各年度数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-16 15:26 | 显示全部楼层 |阅读模式

提取各表B列科目代码不重复值到汇总表B列,提取各表字段中的“借方合计”、“贷方合计”列的字段到本表1、2行横向,对应数据填充到本表。
各年度科目代码不一样。
本表是用数值VLOOKUP实现的,公式不能横向复制,工作量大。
谢谢各位大师!

以科目为关键字横向写入各年度数据.rar

175.46 KB, 下载次数: 29

TA的精华主题

TA的得分主题

发表于 2024-4-16 16:05 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-4-17 09:37 编辑

全表自动生成,附件供参考。。。

{6A329E97-9C29-4205-95CB-B67BC1A02E93}.png

以科目为关键字横向写入各年度数据.7z

114.29 KB, 下载次数: 46

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-16 16:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-16 16:13 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-4-17 09:36 编辑

参与一下。。。
  1. Sub ykcbf()  '//2024.4.17
  2.     Dim arr, brr, d, s
  3.     Application.ScreenUpdating = False
  4.     Application.DisplayAlerts = False
  5.     Set d = CreateObject("scripting.dictionary")
  6.     Set sh = ThisWorkbook.Sheets("汇总")
  7.     ReDim brr(1 To 10000, 1 To 300)
  8.     m = 2: n = 3: bt = 2
  9.     On Error Resume Next
  10.     For Each Sht In Sheets
  11.         If Sht.Name <> sh.Name Then
  12.             k = k + 1
  13.             With Sht
  14.                 r = .Cells(Rows.Count, 1).End(3).Row
  15.                 c = .UsedRange.Columns.Count
  16.                 arr = .Range("a1").Resize(r, c)
  17.                 If k = 1 Then
  18.                     brr(1, 1) = arr(2, 1): brr(1, 2) = arr(2, 2): brr(1, 3) = arr(2, 3)
  19.                 End If
  20.                 For i = bt + 1 To UBound(arr)
  21.                     If arr(i, 1) <> Empty Then
  22.                         s = CStr(arr(i, 2))
  23.                         If Not d.exists(s) Then
  24.                             m = m + 1
  25.                             d(s) = m
  26.                             brr(m, 1) = m - 2
  27.                             brr(m, 2) = s
  28.                             brr(m, 3) = arr(i, 3)
  29.                         End If
  30.                         r = d(arr(i, 2))
  31.                         For j = 4 To UBound(arr, 2) Step 6
  32.                             For x = 1 To 2
  33.                                 s = arr(1, j) & "|" & arr(2, j + x)
  34.                                 If Not d.exists(s) Then
  35.                                     n = n + 1
  36.                                     d(s) = n
  37.                                     brr(1, n) = Format(arr(1, j), "yyyy年m月")
  38.                                     brr(2, n) = arr(2, j + x)
  39.                                 End If
  40.                                 c = d(arr(1, j) & "|" & arr(2, j + x))
  41.                                 brr(r, c) = arr(i, j + x)
  42.                             Next
  43.                         Next
  44.                     End If
  45.                 Next
  46.             End With
  47.         End If
  48.     Next
  49.     With sh
  50.         .UsedRange.Clear
  51.         .Columns(2).NumberFormatLocal = "@"
  52.         .[a1].Resize(m, n - 1) = brr
  53.         .[a1].Resize(2, n - 1).Interior.Color = 49407
  54.         .[a3].Resize(m - 2, 1).Interior.Color = 5296274
  55.         For j = 1 To 3
  56.             .Cells(1, j).Resize(2).Merge
  57.         Next
  58.         For j = 4 To n Step 2
  59.             .Cells(1, j).Resize(1, 2).Merge
  60.         Next
  61.         ActiveWindow.DisplayZeros = False
  62.         Set Rng = .[a1].Resize(m, n - 1)
  63.         With Rng
  64.             .Borders.LineStyle = 1
  65.             .HorizontalAlignment = xlCenter
  66.             .VerticalAlignment = xlCenter
  67.             .Columns.AutoFit
  68.             With .Font
  69.                 .Name = "微软雅黑"
  70.                 .Size = 11
  71.             End With
  72.         End With
  73.     End With
  74.     Set d = Nothing
  75.     MsgBox "OK!"
  76. End Sub

复制代码

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-16 17:12 | 显示全部楼层
JSA代码参与下
  1. function 汇总(){
  2.         let obj={"a01":["序号","科目代码","科目名称"],"a02":[,,,]};
  3.         let k=0;
  4.         [...Sheets].forEach(sh=>{
  5.                 if (!/\d{4}/.test(sh.Name)) return;
  6.                 let arr=sh.Range("a1").CurrentRegion.Value2;
  7.                 let bt1=arr[0],bt2=arr[1];
  8.                 arr.slice(2).forEach(x=>{
  9.                         let temp=obj[`a${x[1]}`]=obj[`a${x[1]}`] || [++k,x[1],null];
  10.                         let n;
  11.                         for (let i=3;i<x.length;i++){
  12.                                 if (bt1[i]!=null){
  13.                                         if (obj["a01"].indexOf(bt1[i])==-1){
  14.                                                 obj["a01"].push(bt1[i],null),obj["a02"].push("借方合计","贷方合计");
  15.                                         }
  16.                                         n=obj["a01"].indexOf(bt1[i]);
  17.                                 }
  18.                                 if (bt2[i]=="借方合计"){
  19.                                         temp[n]=x[i]==null?temp[n]:((temp[n] || 0) + (x[i] || 0));
  20.                                 }else if(bt2[i]=="贷方合计"){
  21.                                         temp[n+1]=x[i]==null?temp[n+1]:((temp[n+1] || 0) + (x[i] || 0));
  22.                                 }
  23.                         }
  24.                 });
  25.         });
  26.         let res=Object.values(obj);
  27.         Sheets.Item("汇总").Activate();
  28.         Cells.ClearContents();
  29.         Range("a1").Resize(res.length,res[0].length).Value2=res;
  30.         res[0].forEach((x,i)=>{
  31.                 if (typeof x=="string"){
  32.                         Cells.Item(1,i+1).Resize(2,1).Merge();
  33.                 }else if(typeof x=="number"){
  34.                         Cells.Item(1,i+1).Resize(1,2).Merge();
  35.                 }
  36.         });
  37.         Range("a1").CurrentRegion.Borders.LineStyle=1;
  38. }
复制代码

TA的精华主题

TA的得分主题

发表于 2024-4-16 17:13 | 显示全部楼层
也是一键汇总,WPS打开测试

以科目为关键字横向写入各年度数据.zip

792.31 KB, 下载次数: 14

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-16 19:53 | 显示全部楼层
ykcbf1100 发表于 2024-4-16 16:05
全表自动生成,附件供参考。。。

这个居然能自动生成,真是没有想到能做到!!

TA的精华主题

TA的得分主题

发表于 2024-4-16 20:03 | 显示全部楼层
jjmysjg 发表于 2024-4-16 19:53
这个居然能自动生成,真是没有想到能做到!!

这个汇总表全自动生成是比较合理的,因为你的年度数据会增加或减少。

TA的精华主题

TA的得分主题

发表于 2024-4-16 22:09 | 显示全部楼层
参与一下
image.png
image.jpg

以科目为关键字横向写入各年度数据.zip

666.44 KB, 下载次数: 33

TA的精华主题

TA的得分主题

发表于 2024-4-16 23:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以科目为关键字横向写入各年度数据.zip (177.71 KB, 下载次数: 27)

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 13:25 , Processed in 0.060284 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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