作为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
请帮忙。
答案 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))