使用二维数组和字典去重,VBA实现Excel工作表行列数据转换
创作时间:
作者:
@小白创作中心
使用二维数组和字典去重,VBA实现Excel工作表行列数据转换
引用
CSDN
1.
https://blog.csdn.net/BeijixingVBA/article/details/139237293
在处理Excel数据时,经常会遇到需要将行和列的数据进行调换的情况。本文将介绍如何使用VBA编程语言,通过二维数组和字典去重的方法,实现Excel工作表中行、列数据的转换。
一、效果如图:
如果手动调整的话,就需要“筛选”—“复制粘贴”,假如“姓名”列不一致,还可能要用到VLookUP或其他函数,总不能一个个数值对应的去复制粘贴吧。
还是用VBA代码吧,只要你能想到,几乎都能做到。
二、操作思路:
1、运用字典,对“姓名”列的人员名单去重,并将去重后的姓名保存在一维数组内;
2、定义二维数组,分别保存姓名及对应的“科目”“分数”;
3、创建新工作表,将所有科目名称放在第一行;
4、将所有去重后姓名放在新工作表“姓名”列,并添加序号,并将二维数组的数值依次放到对应单元格。
三、代码如下:
1.创建二维数组并赋值
Function ArrTwo(arrA() As String, RowsCount As Integer) '创建二维数组并赋值
ReDim arrA(RowsCount, 3)
For i = 2 To RowsCount
arrA(i - 2, 0) = ActiveSheet.Cells(i, 2).Value
arrA(i - 2, 1) = ActiveSheet.Cells(i, 3).Value
arrA(i - 2, 2) = ActiveSheet.Cells(i, 4).Value
Next
End Function
2.字典去重
Function dcArr(arr() As String, RowsCount As Integer, Col As String, nameKm As String) '字典去重
Dim rng As Range
Dim rng1 As Range
Dim d As Object
Dim ws As Worksheet
Dim c As Integer
ReDim arr(RowsCount)
On Error Resume Next
Set rng = Sheets("学生成绩表").Range(Col, Sheets("学生成绩表").Range(Col).End(xlDown))
Set d = CreateObject("Scripting.Dictionary")
For Each rng1 In rng
If rng1.Value <> nameKm And Not d.Exists(rng1.Value) Then
d.Add rng1.Value, 0
arr(c) = rng1.Value
c = c + 1
End If
Next rng1
End Function
3.新工作表创建及赋值
Function RowsAndCol() '新工作表创建及赋值
Dim sheetNameS As String
Dim sheetNameF As String
Dim arrA() As String
Dim arrName() As String
Dim arrKM() As String
Dim RowsCount1 As Integer
Dim RowsCount2 As Integer
Dim Xuhao As String
Dim Name As String
Dim KeMu As String
Dim RowFinal As Integer
Dim ColFinal As Integer
Dim i, j, m As Integer
Dim ws As Worksheet
Dim WsExist As Boolean
WsExist = False
sheetNameS = "学生成绩表"
sheetNameF = "学生成绩表修改后"
Xuhao = Sheets(sheetNameS).Cells(1, 1).Value
Name = Sheets(sheetNameS).Cells(1, 2).Value
KeMu = Sheets(sheetNameS).Cells(1, 3).Value
RowsCount1 = Sheets(sheetNameS).[B1].End(xlDown).Row
RowsCount2 = Sheets(sheetNameS).[B1].End(xlDown).Row
Call ArrTwo(arrA(), RowsCount1)
Call dcArr(arrName(), RowsCount2, "B1", Name)
Call dcArr(arrKM(), RowsCount2, "C1", KeMu)
For Each ws In Worksheets
If ws.Name = sheetNameF Then '判断工作表是否存在
WsExist = True
End If
Next
If WsExist = False Then '添加修改后工作表
Worksheets.Add before:=Worksheets(1)
ActiveSheet.Name = sheetNameF
ActiveSheet.Cells(1, 1) = Xuhao
ActiveSheet.Cells(1, 2) = Name
End If
For i = 0 To RowsCount2 '姓名
If arrName(i) <> "" Then
Sheets(sheetNameF).Cells(i + 2, 2) = arrName(i)
Sheets(sheetNameF).Cells(i + 2, 1) = i + 1 '序号
Else
Exit For
End If
Next
For i = 0 To RowsCount2 '科目
If arrKM(i) <> "" Then
Sheets(sheetNameF).Cells(1, i + 3) = arrKM(i)
Else
Exit For
End If
Next
RowFinal = Sheets(sheetNameF).[B1].End(xlDown).Row
ColFinal = Sheets(sheetNameF).Range("A1").End(xlToRight).Column
For m = 0 To RowsCount1
For i = 2 To RowFinal
For j = 3 To ColFinal
If Sheets(sheetNameF).Cells(i, 2).Value = arrA(m, 0) And Sheets(sheetNameF).Cells(1, j).Value = arrA(m, 1) Then
Sheets(sheetNameF).Cells(i, j) = arrA(m, 2)
End If
Next
Next
Next
Sheets(sheetNameF).UsedRange.Borders.LineStyle = xlContinuous '添加边框
End Function
Sub transform()
RowsAndCol
End Sub
热门推荐
厦门一日游经典路线,多条线路供你选择!
紫玉兰,牢记种植方法和注意事项,打造庭院中的芬芳仙子
警惕!这些花不能乱吃
秋冬桃树施肥秘籍:专家详解施肥要点与土壤改良技术
桃树施肥秘籍:让你的桃树硕果累累
春季桃树施肥攻略,你get了吗?
智慧环保:为城市可持续发展注入新动力
苏轼、辛弃疾、李白的“想”:三位文学巨匠的情感世界
中国移动App降级套餐攻略:从入门到放弃?
泡菜等发酵食品真的对肠道有益吗?
拼音学习新姿势:游戏化+多感官互动
七年级拼音学习攻略:从难点突破到趣味教学
掌握这些方法,轻松学好汉语拼音!
汉语拼音:从400年前的创举到现代语言学习的金钥匙
湖南妹子的“辣”性格,你get到了吗?
2024年万爆铠最新出装有哪些?如何选择最佳装备?
2024年万爆铠最新出装有哪些?如何选择最佳装备?
邯郸历史名人,河北邯郸历史名人
邯郸名人历史故事
职场冲突?试试积极倾听吧!
职场冲突处理秘籍:五步搞定办公室矛盾
为什么医生建议你打颈阔肌?颈阔肌放松有什么作用!有助改善下颌线轮廓!提升下颌缘
呆头的火星思维:《爆笑校园》里的幽默担当
手机操作新体验:教你如何个性化设置虚拟按键
大妈洗碗50年,从来不用洗洁精,这种天然材料,干净、省钱又环保
被中年阿姨的生活智慧惊呆了,不花一分钱,家里干净到飞起,厉害
沈阳南站:地铁脉动下的复兴序曲与未来展望!
蜂蜜止咳,冬季必备的天然良方
冰糖炖梨:冬季止咳的科学解读与实用指南
梨和蜂蜜水,感冒咳嗽救星?