基于字符串的VBA排序

时间:2013-06-08 14:29:12

标签: vba

作为VBA的新手,如果有人能帮助我,我将感激不尽。

我想根据整个字符串中是否存在特定文本对行进行排序。

范围B包含:

Audi Car, Suzuki Bike, Honda Car, Volvo Bus, Benz Car, Yamaha Bike

所以我想要VBA代码,根据它是CAR,BIKE还是BUS进行排序。

执行后,范围B应按此方式排序:

Audi Car, Benz Car, Honda Car, Suzuki Bike, Yamaha Bike, Volvo Bus

请帮忙。

2 个答案:

答案 0 :(得分:0)

如果我在哪里处理这样的问题,我首先要制作一个包含所有不同实体的数组。 接下来你要做的就是使用InStr(startsearchingposition,String,searchforvalue)。 InStr方法在String中返回searchvalue的起始位置,否则返回0或NUll。 因此,如果它有记录,则Instr返回的值大于1.

Dim myArray(1 to 3) As Variant, i, number_of_element As Integer, y as String
Dim ws As Worksheet: Set ws = ActiveSheet
myArray(1) = "Car"
myArraY(2) = "Bus"
myArraY(3) = "Bike"

'Lets assume that all you data is in column A
For i = 1 To ws.Cells(rows.count, 1).end(xlup).row
y = ws.Cells(i,1).value
number_of_element = 1
For Each element in myArray

If InStr(1, y, element) > 1 Then
ws.cells(i, number_of_element +1).value = y
Exit For
Else
number_of_element = number_of_element + 1
End if

Next 
Next i

也许这并不能完全满足你的标准,但至少所有不同的实体现在已经分开了。 您可以做的下一件事是对每个实体中的所有元素进行排序,然后将它们重新组合在一起。

VBA有一些有用的方法可用于解析某个字符串。 Mid()和InStr()是我用得最多的两个。

答案 1 :(得分:0)

使用Macro记录以下步骤:

1.paste data vertically in column A (paste special - transpose) 

2.insert function Split by Space to column B (return value eg: bike, car)  

3.sort column A and B in the order you like

4.copy column A and paste special - transpose

5.stop Macro recording, change all cells (eg: .range(row,col)) 
相关问题