2017-10-25 30 views
0

アルファ数値アドレスの整数値が奇数の順であり、与えられた偶数の値が同じ型であるように、データの行をソートしようとしています。VBAの奇数偶数並べ替え

Iは、(半)作業にそれを持っている唯一の方法は、本であった:

-findアドレスの整数が偶数か奇数
ある場合-Addは、EVENまたは細胞にODDという点で対応する行をアドレス指定
EVEN又はODD指定によるデータ-Filterマクロ
-run

このアプローチは理想的ではありません。私はフィルタリングを使用することなく行を並べ替えることに興味があります。

以下はソート方法の例です。

UNSORTED   SORTED 
Address Type  Address Type 
1.1p A   1.1p A 
1.2p A   1.2p A 
1.3p A   1.3p A 
1.4p A   1.4p A 
2.1p A   3.1p A 
2.2p A   3.2p A 
2.3p A   3.3p A 
2.4p A   3.4p A 
3.1p A   5.1p A 
3.2p A   5.2p A 
3.3p A   5.3p A 
3.4p A   5.4p A 
4.1p A   2.1p A 
4.2p A   2.2p A 
4.3p A   2.3p A 
4.4p A   2.4p A 
5.1p A   4.1p A 
5.2p A   4.2p A 
5.3p A   4.3p A 
5.4p A   4.4p A 
6.1p B   7.1p B 
6.2p B   7.2p B 
6.3p B   7.3p B 
6.4p B   7.4p B 
7.1p B   9.1p B 
7.2p B   9.2p B 
7.3p B   9.3p B 
7.4p B   9.4p B 
8.1p B   6.1p B 
8.2p B   6.2p B 
8.3p B   6.3p B 
8.4p B   6.4p B 
9.1p B   8.1p B 
9.2p B   8.2p B 
9.3p B   8.3p B 
9.4p B   8.4p B 
10.1p B   10.1p B 
10.2p B   10.2p B 
10.3p B   10.3p B 
10.4p B   10.4p B 

私はVBAを初めてお使いです。ご提案いただきありがとうございます。

+1

はあなたが与える必要があり、あなたのヘルパー欄にそれへの呼び出しを置きます私たちはもっと具体的です。どのデータ構造/フォーマットが格納されていますか?あなたのコードなどを見てみましょう。 – ApolloSoftware

答えて

0

ソートに使用できる値を格納できるヘルパー列を作成する必要があると思います。

基本的な考え方は、「Adress」列から数値を抽出し、それが偶数であるかどうかを確認し、高い値(たとえば1000)を掛けて、可能な限り高い奇数よりも高いことが保証されるようにします値。

このセルにはの式のいずれかを使用できますが、少し複雑です。あなたのデータは、セルA2で起動すると仮定すると:

Function SortVal(s As String) As Double 
    SortVal = Val(s) 
    If Int(SortVal) Mod 2 = 0 Then SortVal = SortVal * 1000 
End Function 

=VALUE(LEFT(A2, SEARCH("p", A2, 1)-1))*IF(ISODD(VALUE(LEFT(A2, SEARCH("p", A2, 1)-1))),1,1000) 

または書き込み小さなUDFと

=SortVal(A2) 
関連する問題