Vba excel中如何基于列排序插入单元格
如何根据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
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
循环遍历范围,并将要插入的字符串与每个单元格进行比较,直到它变小。然后插入一行并将值放入空单元格。或者只需将其添加到末尾,然后使用范围。