0

VBA初心者なので、教えていただけると助かります。

文字列全体で特定のテキストの有無に基づいて行を並べ替えたい。

範囲 B の内容:

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

だから私はそれが車、自転車、またはバスであるかどうかに基づいてソートするVBAコードが必要です。

実行後、範囲 B は次のようにソートされます。

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

助けてください。

4

2 に答える 2

0

マクロを使用して、次の手順を記録します。

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)) 
于 2013-06-09T08:23:23.553 に答える
0

このような問題を処理する場合、最初にすべての異なるエンティティを含む配列を作成します。次にできることは、InStr(startsearchingposition, String, searchforvalue) を使用することです。InStr メソッドは、検索値の開始位置を文字列で返します。それ以外の場合は、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() は、私が最もよく使用する 2 つです。

于 2013-06-08T22:43:01.383 に答える