2015-10-13 73 views
0

我想根據另一個單元(」sheet2「)對單頁(」sheet1「)進行排序,因此將單元格相應地移動到另一個單元格中的單元格移動。「根據另一個(excel 2011)」排序「VBA單頁(excel 2011)

例子:

Sheet1: A45 contains number: 3 
sheet2: A45 contains number: 200 

排序(全部)Sheet2的(升序,按列)(它代表百餘列)

sheet2 A45 (200) moves to A98 

我想它做的舉動:

sheet1 A45 (3) to A98 

今天我正在嘗試這個,我知道它的工作原理,但只有PC excel 2003(法語),我不知道爲什麼它d OES與Mac的Excel 2011(英文)工作:

Sub Test() 
  
    Dim PlageFe1 As Range 
    Dim PlageFe2 As Range 
    Dim Tbl() 
    Dim I As Long 
  
    'plage en colonne A de la Feuille "Feuil1" 
    With Worksheets("Feuil1") 
  
     Set PlageFe1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
  
    End With 
  
    'plage en colonne A de la Feuille "Feuil2" 
    With Worksheets("Feuil2") 
  
     Set PlageFe2 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
  
    End With 
  
    'dimensionne le tableau par rapport à une des deux plages (ici la 1) 
    ReDim Tbl(1 To 2, 1 To PlageFe1.Count) 
  
    'fusionne les deux plages dans le tableau 
    For I = 1 To UBound(Tbl, 2) 
  
     Tbl(1, I) = PlageFe1(I) 
     Tbl(2, I) = PlageFe2(I) 
  
    Next I 
  
    'effectue le tri (adapter le signe <ou> dans la porc "Tri") 
    Tri Tbl() 
  
    'puis réaffecte les valeurs 
    For I = 1 To UBound(Tbl, 2) 
  
     PlageFe1(I) = Tbl(1, I) 
     PlageFe2(I) = Tbl(2, I) 
  
    Next I 
  
End Sub 
  
Sub Tri(Tbl()) 
  
    Dim Tempo1, Tempo2 
  
    Dim I As Long, J As Long 
      'éffectue un tri décroissant "<" 
      'pour un tri croissant ">" 
    For I = 1 To UBound(Tbl, 2) - 1 
  
     For J = I + 1 To UBound(Tbl, 2) 
  
      'tri sur l'index 1 
      If Tbl(1, I) > Tbl(1, J) Then 
  
       Tempo1 = Tbl(1, J) 
       Tempo2 = Tbl(2, J) 
       Tbl(1, J) = Tbl(1, I) 
       Tbl(2, J) = Tbl(2, I) 
       Tbl(1, I) = Tempo1 
       Tbl(2, I) = Tempo2 
  
      End If 
  
    Next J, I 
  
End Sub 
+0

兩張表如何相互關聯?兩張表中是否有一列或多列具有相同的唯一值?或者他們只是按照現在的位置相關聯? –

+0

本網站不適用於整個代碼項目的請求;這是針對具體問題。你有沒有嘗試過,並在特定的時間點失敗?你成功/失敗的地方在哪裏? –

+0

這兩張表都沒有關係,所以例外的位置。我很抱歉,但我是VBA的新手,自3周以來我一直在努力尋找網絡。從那時起我已經做了幾次嘗試(主要使用間接... ... – user5441091

回答

0

也許你可以試試這個:

Sub SpecialSort() 

Dim Rng1 As Range, Rng2 As Range, Rng3 As Range 

' Current Selection 
Set Rng1 = Selection 
' Equivalent Selection on sheet 1 
Set Rng2 = Sheets(1).Range(Rng1.Address) 

' Cut the part from the first sheet 
Rng2.Cut 
' Insert it before the range to be sorted 
Rng1.Insert Shift:=xlToRight 
' Keep track of this new inserted part 
Set Rng3 = Rng1.Parent.Range(Rng2.Address) 
' Sort by the column in question 
With Rng1.Parent.Sort 
    .SortFields.Clear 
    .SortFields.Add Key:=Rng1, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    .SetRange Union(Rng1, Rng3): .Header = xlNo: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply 
End With 
' Cut the sorted part 
Rng3.Cut 
' Put it back 
Rng2.Parent.Select: Rng2.Select 
ActiveSheet.Paste 
' Delete the section you cut 
Rng3.Delete Shift:=xlToLeft 

Set Rng1 = Nothing: Set Rng2 = Nothing: Set Rng3 = Nothing 

End Sub 

它可以通過選擇範圍(包括整列),找到等效範圍在第一張紙上,並根據選擇的排序方式(使用第一列作爲關鍵字)對第二範圍進行排序。

即使這不是你所需要的,也許你可以相應地修改它。

+0

是的,我嘗試過類似的方法:每兩行插入一個然後使用間接排序,然後使用間接將已排序的數據複製到新工作表中,但是接下來我的問題是:我如何才能對每兩列進行排序,包括最後一列和最後一列 – user5441091

+0

,並將其作爲VBA重複每兩行數太多(超過一百行) – user5441091

+0

對不起,我無法提供幫助,我想我很難理解你想要做什麼以及它與我的解決方案有什麼不同。祝你好運,希望別人能夠更好地協助。 – Demetri