如何在excel中基于列sorting插入单元格

我怎样才能插入一个新的单元格的值在特定的位置基于sorting的列在Excel中?

例如,如果我有这个sorting的数据在一列。

abc abcd abcde abcdefg abcdefgh 

我想插入一个值为abcdef的新单元格。

结果应该是。

 abc abcd abcde "abcdef" abcdefg abcdefgh 

怎样才能实现使用VBA

我也相信,在原始范围结束时插入新的值,并重新sorting是方法

这里跟着我的代码

 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 

我只是在最后添加新的值,然后求助于列:

 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 

还有其他方面可以去做,但我认为这可能是最简单的。 如果这不适合你的情况,请告诉我。 还有其他的select。

我认为最简单的做法是将新的string值添加到第一个空行,然后对列进行sorting。 以下模块将执行此操作, insertValuevariables指定要添加的文本。

 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 

这下面将数据加载到数组上,确定插入的位置,然后添加值并粘贴结果。 没有行插入,但一旦你有索引,你可以调整代码。 刚刚testing过几个例子,应该根据您的需要进一步定制

 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