请问用公式怎么将左边的表格转换成右边的表格
vba吧
全部回复
仅看楼主
level 1
hgh20xx 楼主
请问用公式怎么将左边的表格转换成右边的表格,根据柜体名称前面的数字是否相同进行归类,如若不同,下一行补空行,并且空行下一行最左边的序号重置为1开始计数,同时需要检测到下面没有内容时自动停止输出。
2024年12月05日 11点12分 1
level 12
哈哈,楼主,我又来了,等我解决
2024年12月05日 11点12分 2
level 12
Sub 插入空行并重定序号()
Dim ws As Worksheet
Dim i%, iEnd%, sName$, idex%
Set ws = ThisWorkbook.Sheets("你的表名")
iEnd = ws.Range("B65536").End(xlUp).Row
With ws
'排序:
'.Range("A3:M" & iEnd).Sort key1:=.Range("B3").Value, order1:=xlAscending, Header:=xlNo
.Range("A3:M" & iEnd).Sort key1:=.Range("B3"), order1:=xlAscending, Header:=xlNo
sName = .Range("B3").Value
For i = 3 To iEnd + 10000
If .Cells(i, 2).Value2 = "" Then Exit For '遇空格结束循环
If .Cells(i, 2).Value2 <> sName Then
idex = 1
sName = .Cells(i, 2).Value2
Rows(i).Insert ' 插入行
iEnd = iEnd '发现iEnd更新,但不知道为何最后几行不动,我把iEnd在循环终值+100,就能正确得出结果.但我在本行就是+10,也无法循环到最后
i = i + 1
' 网页链接 i
Else
idex = idex + 1
End If
.Cells(i, 1).Value2 = idex
Next
End With
网页链接 iEnd '
End Sub
2024年12月05日 12点12分 4
看了for循环的终值是固定的,无法改变,我懒得再换其它方式循环,就直接终值加1万,遇到空格跳出循环。多余的列自己手动删除,将就用吧。
2024年12月05日 12点12分
level 12
哦,看错了,你不是根据名称不同,而是根据名称前面的数字不同。看来白忙活了,要再考虑
2024年12月05日 12点12分 5
level 12
Option Explicit
Sub 插入空行并重定序号()
Dim ws As Worksheet
Dim i%, iEnd%, sName$, idex%, sTempName$
Set ws = ThisWorkbook.Sheets("你的表名")
iEnd = ws.Range("B65536").End(xlUp).Row
With ws
'排序:
'.Range("A3:M" & iEnd).Sort key1:=.Range("B3").Value, order1:=xlAscending, Header:=xlNo
.Range("A3:M" & iEnd).Sort key1:=.Range("B3"), order1:=xlAscending, Header:=xlNo
sName = 取得头部数字部分(.Range("B3").Value)
For i = 3 To iEnd + 10000
If .Cells(i, 2).Value2 = "" Then Exit For '遇空格结束循环
sTempName = 取得头部数字部分(.Cells(i, 2).Value2)
If sTempName <> sName Then
idex = 1
sName = sTempName
Rows(i).Insert ' 插入行
iEnd = iEnd '发现iEnd更新,但不知道为何最后几行不动,我把iEnd在循环终值+100,就能正确得出结果.但我在本行就是+10,也无法循环到最后
i = i + 1
' 网页链接 i
Else
idex = idex + 1
End If
.Cells(i, 1).Value2 = idex
Next
End With
网页链接 iEnd '
End Sub
Function 取得头部数字部分(ByVal str As String) As String
Dim i%, num$
For i = 1 To Len(str)
If IsNumeric(Mid(str, i, 1)) Then
num = num & Mid(str, i, 1)
' 网页链接 num
Else
取得头部数字部分 = num
Exit Function
End If
Next
取得头部数字部分 = num
End Function
Sub test()
Dim str
str = "01016左次卧书112桌衣柜B"
'IName = Evaluate(sStr) 'Error 2015
网页链接 取得头部数字部分(str)
End Sub
2024年12月05日 13点12分 6
这回是根据头部数字来确定了
2024年12月05日 13点12分
@烟雨江南ooo 非常好,感谢大佬[真棒]
2024年12月07日 01点12分
2024年12月07日 02点12分
1