2017-02-04 11 views
0

一般的には希少性によってソートされた項目のリストがありますが、特定のアクションに対してソートする必要があります。マッチ機能のためにそれをソートして、それを元に戻します。しかし、マッチ関数はソート前の行を引き上げています。誰かがこれがどのように修正されるか知っていますか?以下のコード(大文字のソートコードを含む):Excel VBA一致機能更新済みを無視する並べ替え

'Sort for Match Function 
Sheets("Item List").Select 
    Range("L2").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range("L2:U2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Add Key:=Range(_ 
     "L2:L300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
     xlSortNormal 
    With ActiveWorkbook.Worksheets("Item List").Sort 
     .SetRange Range("L1:U300") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 


Dim x As Integer 
x = Application.Match(BuyItem.Value, Range("TraderItems")) 
MsgBox (x) 


'Sort back to Rarity 
Sheets("Item List").Select 
    Range("L2").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range("L2:U2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Add Key:=Range(_ 
     "R2:R300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
     xlSortNormal 
    With ActiveWorkbook.Worksheets("Item List").Sort 
     .SetRange Range("L1:U300") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
+0

は '実際の範囲とTraderItems'を交換できます願っています。 –

+0

'Range(" TraderItems "))'とは何ですか?あなたは名前付きの範囲 "TraderItems"を持っていますか?あなたはどこにそれを設定しますか? –

+0

また、計算をオフにしている場合は、ソート後に力の計算範囲を入れてみてください。 – TheSilkCode

答えて

0

私はマッチ機能に精通していません。だから私はその部分を働かせることができませんでした。オリジナルのサブコードのすべての「選択」コードで混乱しました。だから私は単純に配列の配列に範囲をコピーし、範囲をソートし、使用している値がわからないのでMatchコマンドをバイパスし、元の数値を範囲にコピーし直しました。

私は、これは

Sub tester() 

Dim Arr() As Variant, x As Integer, arr2Rng As Range 
ActiveWorkbook.Worksheets("Item List").Activate 

    Arr = Range("L1:U300") 
    ActiveWorkbook.Worksheets("Item List").Range("L1:U300").Select 

    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Item List").Sort.SortFields.Add Key:=Range(_ 
     "L2:L300"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _ 
     xlSortNormal 
    With ActiveWorkbook.Worksheets("Item List").Sort 
     .SetRange Range("L1:U300") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

    x = Application.WorksheetFunction.Match(BuyItem.Value, Range("TraderItems")) 
    MsgBox (x) 


    Range("L1").Select 
    Set arr2Rng = Range("L1") 
    arr2Rng.Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr 


    End Sub 
関連する問題