ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 按照条件由1表生成2表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-7 11:22 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
从1表把所有学生的I、J、K、L列成绩相加,并按照组合从高到低排序得到2表。谢谢。 2.rar (89.8 KB, 下载次数: 22)

TA的精华主题

TA的得分主题

发表于 2024-5-7 12:33 | 显示全部楼层
PQ 方案。。。。。。。。。。。。。。

捕获.JPG
捕获2.JPG

TA的精华主题

TA的得分主题

发表于 2024-5-7 12:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Option Explicit

  2. Sub SqlDemo()
  3.     Dim conn As Object, rst As Object, strSQL$, i&, PathStr$, sht As Worksheet
  4.     Set conn = CreateObject("ADODB.Connection")
  5.     Set rst = CreateObject("ADODB.Recordset")
  6.     PathStr = ThisWorkbook.FullName                                     '路径
  7.     Select Case Application.Version * 1
  8.         Case Is <= 11
  9.             conn.Open "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" & PathStr & ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'"
  10.         Case Is >= 12
  11.             conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=0'"
  12.     End Select
  13.     strSQL = "select '' as 序号, 姓名, 班级, 组合2, '' as 名次, total as [4选2总分] from (select 姓名, 班级, RIGHT(组合, 2) as 组合2, iif(化原 is null, 0, 化原)+iif(生原 is null, 0, 生原)+iif(政原 is null, 0, 政原)+iif(地原 is null, 0, 地原) as total From ['1$']) order by total desc"
  14.     rst.Open strSQL, conn, 1, 1
  15.     Set sht = Worksheets.Add(ActiveSheet)
  16.     With sht
  17.         For i = 0 To rst.Fields.Count - 1
  18.             .Cells(1, i + 1) = rst.Fields(i).Name
  19.         Next i
  20.         .Range("a2").CopyFromRecordset rst
  21.         With .Range("B2", .Range("B2").End(xlDown)).Offset(, -1)
  22.             .Formula = "=Row()-1"
  23.             .Value = .Value
  24.             .Offset(, 4).Value = .Value
  25.         End With
  26.     End With
  27.     rst.Close:    conn.Close:    Set conn = Nothing:    Set rst = Nothing
  28.    
  29. End Sub

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-7 12:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
image.png

TA的精华主题

TA的得分主题

发表于 2024-5-7 13:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-7 13:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

  1. Sub test1() '纯个人练习
  2.   
  3.   Dim data, i As Long, j As Long, pos As Long, col As Long
  4.   
  5.   With Worksheets("1").Range("A1").CurrentRegion
  6.     data = Range(.Cells(1), .Offset(1)).Value
  7.   End With
  8.   
  9.   col = 3
  10.   For j = 0 To 2
  11.     col = col + 1
  12.     data(1, col) = Split("组合2 名次 4选2总分")(j)
  13.   Next
  14.   
  15.   For i = 2 To UBound(data) - 1
  16.     For j = 4 To col
  17.       data(i, j) = ""
  18.     Next
  19.     For j = 9 To 12
  20.       If Val(data(i, j)) Then
  21.         data(i, col) = Val(data(i, col)) + Val(data(i, j))
  22.         data(i, 4) = data(i, 4) & Left(data(1, j), 1)
  23.       End If
  24.     Next
  25.   Next
  26.   
  27.   pos = 1
  28.   QuickSort data, pos + 1, UBound(data) - 1, 1, col, 4, False
  29.   For i = pos + 1 To UBound(data) - 1
  30.     If data(i, 4) <> data(i + 1, 4) Then
  31.       QuickSort data, pos + 1, i, 1, col, col, True
  32.       CustomRank data, pos + 1, i, 6, 5, False
  33.       pos = i
  34.     End If
  35.   Next
  36.   
  37.   With Worksheets("2").Range("A1")
  38.     .CurrentRegion.Clear 'Contents
  39.     With .Resize(UBound(data) - 1, col)
  40.       .Borders.LineStyle = xlContinuous
  41.       .HorizontalAlignment = xlCenter
  42.       .Font.Name = "宋体"
  43.       .Font.Size = 12
  44.       .Value = data
  45.     End With
  46.   End With
  47.   
  48.   Beep
  49. End Sub

  50. Function CustomRank(ar, upper As Long, lower As Long, src As Long, dst As Long, Optional CHI As Boolean = False)
  51.   Dim i As Long, rank_ As Long
  52.   rank_ = 1
  53.   ar(upper, dst) = 1
  54.   For i = upper + 1 To lower
  55.     If Not CHI Then
  56.       rank_ = rank_ + 1
  57.     Else                   '(ChineseStyle)
  58.       If ar(i, src) <> ar(i - 1, src) Then rank_ = rank_ + 1
  59.     End If
  60.     If ar(i, src) <> ar(i - 1, src) Then
  61.       ar(i, dst) = rank_
  62.     Else
  63.       ar(i, dst) = ar(i - 1, dst)
  64.     End If
  65.   Next
  66. End Function

  67. Function QuickSort(ar, u As Long, d As Long, l As Long, r As Long, pCol As Long, Optional Flag As Boolean = True)
  68.   Dim t As Long, b As Long, x As Long, pivot, swap
  69.   t = u
  70.   b = d
  71.   pivot = ar((u + d) \ 2, pCol)
  72.   While t <= b
  73.     If Flag Then        'Order by number DESC
  74.       Do
  75.         If ar(t, pCol) > pivot Then t = t + 1 Else Exit Do
  76.       Loop While t < d
  77.       Do
  78.         If ar(b, pCol) < pivot Then b = b - 1 Else Exit Do
  79.       Loop While b > u
  80.     Else                'Order by text ASC
  81.       Do
  82.         If StrComp(ar(t, pCol), pivot, vbTextCompare) = -1 Then t = t + 1 Else Exit Do
  83.       Loop While t < d  'vbTextCompare 1  vbBinaryCompare 0
  84.       Do
  85.         If StrComp(pivot, ar(b, pCol), vbTextCompare) = -1 Then b = b - 1 Else Exit Do
  86.       Loop While b > u
  87.     End If
  88.     If t < b Then
  89.       For x = l To r
  90.         swap = ar(t, x): ar(t, x) = ar(b, x): ar(b, x) = swap
  91.       Next
  92.       t = t + 1: b = b - 1
  93.     Else
  94.       If t = b Then t = t + 1: b = b - 1
  95.     End If
  96.   Wend
  97.   If t < d Then QuickSort ar, t, d, l, r, pCol, Flag
  98.   If b > u Then QuickSort ar, u, b, l, r, pCol, Flag
  99. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-7 13:40 | 显示全部楼层
附件供参考。。。

2.7z

88.28 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-5-7 13:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
参与一下。。。

  1. Sub ykcbf()  '//2024.5.7
  2.     With Sheets("1")
  3.         r = .Cells(Rows.Count, 1).End(3).Row
  4.         arr = .[a1].Resize(r, 13)
  5.     End With
  6.     ReDim brr(1 To r, 1 To 6)
  7.     For i = 2 To UBound(arr)
  8.         m = m + 1
  9.         For j = 1 To 3
  10.             brr(m, j) = arr(i, j)
  11.         Next
  12.         brr(m, 4) = Mid(arr(i, 13), 2)
  13.         brr(m, 6) = arr(i, 9) + arr(i, 10) + arr(i, 11) + arr(i, 12)
  14.     Next
  15.     With Sheets("2")
  16.         .UsedRange.Offset(1).Clear
  17.         .[a2].Resize(m, 6) = brr
  18.         Set Rng = .[b2].Resize(m, 5)
  19.         Rng.Sort key1:=.[d2], order1:=1, key2:=.[f2], order2:=2, Header:=2
  20.         For i = 2 To m + 1
  21.             If .Cells(i, 4) = .Cells(i + 1, 4) Then
  22.                 n = n + 1
  23.                 .Cells(i, 5) = n
  24.             Else
  25.                 .Cells(i, 5) = n + 1
  26.                 n = 0
  27.             End If
  28.         Next
  29.         With .[a2].Resize(m, 6)
  30.             .Borders.LineStyle = 1
  31.             .HorizontalAlignment = xlCenter
  32.             .VerticalAlignment = xlCenter
  33.         End With
  34.     End With
  35.     MsgBox "OK!"
  36. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-7 13:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-7 14:02 | 显示全部楼层
参与一下....

22.rar

94.73 KB, 下载次数: 4

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-5-20 07:32 , Processed in 0.047679 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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