Vba excel中如何基于列排序插入单元格

Vba excel中如何基于列排序插入单元格,vba,excel,Vba,Excel,如何根据excel中的排序列在特定位置插入具有值的新单元格 例如,如果我在一列中有这个排序数据 abc abcd abcde abcdefg abcdefgh 我想插入一个值为abcdef的新单元格 结果应该是 abc abcd abcde "abcdef" abcdefg abcdefgh 如何使用VBA实现这一点 我只需在末尾添加新值,然后使用列: Sub InsertSorted() NewCellValue = "abcdef" LastRow = Worksheet

如何根据excel中的排序列在特定位置插入具有值的新单元格

例如,如果我在一列中有这个排序数据

abc
abcd
abcde
abcdefg
abcdefgh
我想插入一个值为
abcdef
的新单元格

结果应该是

abc
abcd
abcde
"abcdef"
abcdefg
abcdefgh

如何使用
VBA
实现这一点

我只需在末尾添加新值,然后使用列:

Sub InsertSorted()
    NewCellValue = "abcdef"
    LastRow = Worksheets("Sheet1").Cells(Range("A:A").Rows.Count, "A").End(xlUp).Row
    Worksheets("Sheet1").Cells(LastRow + 1, 1) = NewCellValue
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A:A")
        .Apply
    End With
End Sub

还有其他的方法,但我认为这可能是最简单的。如果这在你的情况下不起作用,请告诉我。还有其他选择。

我认为最简单的方法是将新字符串值添加到第一个空行,然后对列进行排序。以下模块将使用
insertValue
变量指定要添加的文本来完成此操作

Sub Sort()
    Dim insertValue As String
    insertValue = "ab"
    Worksheets("Sheet1").Activate
    Set currentCell = Range("A1")
    Do While Not IsEmpty(currentCell)
      Set currentCell = currentCell.Offset(1, 0)
    Loop
    Range(currentCell.Address).Value = insertValue
    Range("A1").Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo
End Sub

下面的操作将数据加载到数组中,确定插入位置,然后添加值并将结果粘贴回去。没有行插入,但一旦有了索引,就可以调整代码。 刚刚用几个案例对此进行了测试,应该可以根据您的需要进一步定制

Option Base 1
Sub insertString()

    Dim rgRange As Range
    strToInsert = Cells(1, 2).Value
    Set rgRange = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
    m = rgRange.Rows.Count

    Dim arArray() As String
    ReDim arArray(m)

'load data
    For i = 1 To m
        arArray(i) = rgRange(i, 1).Value
    Next i

'determine where add your string
    k = m + 1
    For i = 1 To m
        If strToInsert < arArray(i) Then
            k = i
            Exit For
        End If
    Next i


'shift all upper values +1
    m = m + 1
    ReDim Preserve arArray(m)
    g = k + 1
    For i = m To g Step -1
        arArray(i) = arArray(i - 1)
    Next i

'insert your string
    arArray(k) = strToInsert

'paste results overwriting previous range
    Set rgdest = Range(rgRange(1, 1), rgRange(1, 1).End(xlDown).Offset(1, 0))
    For i = 1 To rgdest.Rows.Count
        rgdest(i, 1).Value = arArray(i)
    Next i



End Sub
选项库1
子插入字符串()
将rgRange变暗为范围
strToInsert=单元格(1,2).值
设置rgRange=范围(单元格(1,1),单元格(1,1)。结束(xlDown))
m=rgRange.Rows.Count
Dim array()作为字符串
雷迪姆·阿拉雷(米)
'加载数据
对于i=1到m
arArray(i)=rgRange(i,1).值
接下来我
'确定添加字符串的位置
k=m+1
对于i=1到m
如果strToInsert
我也认为,在原始范围末尾插入新值并重新排序是一种方法

下面是我的代码

Sub InsertSorted(rng As Range, newVal As String)
    With rng.EntireColumn
        .Cells(.Rows.Count, "A").End(xlUp).Offset(1).value = newVal
        .Sort key1:=.Cells(1, 1), order1:=xlAscending
    End With
End Sub
开发如下

Sub main()
    InsertSorted ActiveSheet.Range("A1"), "abcdef" ' would also work with "Range("A:A")"
End Sub

循环遍历范围,并将要插入的字符串与每个单元格进行比较,直到它变小。然后插入一行并将值放入空单元格。或者只需将其添加到末尾,然后使用范围。