Excel 同时转移和插入细胞

Excel 同时转移和插入细胞,excel,vba,Excel,Vba,我遇到了以下问题。我的数据集如下所示: 1 3 4 6 7 1 2 2 4 5 9 5 1 2 3 5 我想取每个表中常见的单个数字,并将它们排列在一列中: 1 2 3 4 5 6 7 9 我对脚本所采用的方法是,识别一行中有多个完整的单元格,然后执行命令将当前范围下的相邻单元格转置。到目前为止,我得到的是: Sub RecordArrangeTest() Dim Rng As Range Dim i As Long Dim n As Long Dim Wholec

我遇到了以下问题。我的数据集如下所示:

1  3  4  6  7
1  2
2  4  5  9
5  
1  2  3  5
我想取每个表中常见的单个数字,并将它们排列在一列中:

1
2
3
4
5
6
7
9
我对脚本所采用的方法是,识别一行中有多个完整的单元格,然后执行命令将当前范围下的相邻单元格转置。到目前为止,我得到的是:

Sub RecordArrangeTest()
Dim Rng As Range
Dim i As Long
Dim n As Long
Dim Wholecolumn As Range
Dim Lastcolumn As Long
Lastcolumn = Range("A1").CurrentRegion.Columns.Count
i = 1

Dim lastRow As Long
lastRow = Range("A1").End(xlDown).row

While i <= lastRow
Set Rng = Range("A" & i)
Set Wholecolumn = Range(Cells(i, i), Cells(1, Lastcolumn))
If IsEmpty(Rng.Offset(0, 1).Value) = False Then
Range(Rng.Offset(1, 0), Rng.Offset(Lastcolumn, 0)).Insert Shift:=xlDown
Wholecolumn.Copy
Rng.Offset(1, 0).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
Wholecolumn.Delete Shift:=xlUp
i = i + 1
Else: i = i + 1

End If
Wend

End Sub
子记录排列测试()
变暗Rng As范围
我想我会坚持多久
长
模糊整列为范围
将最后一列变长
Lastcolumn=范围(“A1”).CurrentRegion.Columns.Count
i=1
最后一排一样长
lastRow=范围(“A1”)。结束(xlDown)。行

当我时,我会使用一个忽略重复项的字典并遍历所有使用的单元格,然后清除整个范围并将字典粘贴回原来的位置

Sub foo()
Dim ws As Worksheet
Set dict = CreateObject("scripting.dictionary")
Dim rng As Range
Dim t
Dim i As Long

Set ws = Sheets("Sheet1")

For Each rng In ws.UsedRange
    If rng <> "" Then
        On Error Resume Next
            dict.Add rng.Value, rng.Value
        On Error GoTo 0
    End If
Next rng

ws.UsedRange.ClearContents
i = 1
For Each t In dict
    ws.Cells(i, "A").Value = t
    i = i + 1
Next t

ws.Range("A1:A" & i).Sort key1:=ws.Range("A1")

End Sub
Sub-foo()
将ws设置为工作表
Set dict=CreateObject(“scripting.dictionary”)
变暗rng As范围
暗t
我想我会坚持多久
设置ws=图纸(“图纸1”)
对于ws.UsedRange中的每个rng
如果rng为“”,则
出错时继续下一步
指令加上rng.Value,rng.Value
错误转到0
如果结束
下一个rng
ws.UsedRange.ClearContents
i=1
对于dict中的每个t
ws.Cells(i,“A”).Value=t
i=i+1
下一个t
ws.Range(“A1:A”和i).排序键1:=ws.Range(“A1”)
端接头

也许不是您的解决方案,但Power Query(获取和转换)将起作用。使用名为“Table1”的5列表格中的源数据,将其粘贴到Power Query中的高级编辑器中:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", Int64.Type}, {"Column3", Int64.Type}, {"Column4", Int64.Type}, {"Column5", type any}}),

    #"Col1" = Table.SelectColumns(#"Changed Type",{"Column1"}),
    #"Rename1" = Table.RenameColumns(Col1,{{"Column1", "ColumnName"}}),

    #"Col2" = Table.SelectColumns(#"Changed Type",{"Column2"}),
    #"Rename2" = Table.RenameColumns(Col2,{{"Column2", "ColumnName"}}),

    #"Col3" = Table.SelectColumns(#"Changed Type",{"Column3"}),
    #"Rename3" = Table.RenameColumns(Col3,{{"Column3", "ColumnName"}}),

    #"Col4" = Table.SelectColumns(#"Changed Type",{"Column4"}),
    #"Rename4" = Table.RenameColumns(Col4,{{"Column4", "ColumnName"}}),

    #"Col5" = Table.SelectColumns(#"Changed Type",{"Column5"}),
    #"Rename5" = Table.RenameColumns(Col5,{{"Column5", "ColumnName"}}),

    #"AppendQueries" = Table.Combine({Rename1,Rename2,Rename3,Rename4,Rename5}),

    #"RemoveDuplicates" = Table.Distinct(#"AppendQueries"),
    #"SortRows" = Table.Sort(#"RemoveDuplicates",{{"ColumnName", Order.Ascending}})
in
    #"SortRows"

谢谢我首先得到一个“Set Dict”的编译错误。我需要先设置尺寸线吗?它对我来说可以正常工作,您可以尝试在之前添加
尺寸线作为对象@用户1996971