2017-01-13 16 views
0

私はあなたが助けてくれることを願っています。 ダイアログボックスを開いて別のExcelシートを選択し、そのExcelシートが選択されると別のコードが呼び出され、B列がアルファベット順にソートされるようなコードがあります。VBA AZの並べ替えが正しく動作しない

私が持っている問題は、私はピック1

PIC 1に結果を得る私はAZのソートボタンをクリックして手動で列を並べ替える場合は、ソートはVBAコード

で正しく起きていないということです

enter image description here

しかし、私はアルファベット順にBの列をソートするコードを実行したとき。あなたは、トップエントリーが正しくないとアン・メッテToftager が正しくソートされていないと、2番目のエントリは、ラインでシートのさらに下のまま見ることができるように私は enter image description here

PIC 2ピック2に

を結果を得ます83

マイコードは以下のとおりです。ソートが正しく行われ、結果が図1の結果と同じになるようにコードを修正することはできますか?

いつもどんな助けも大歓迎です。私はVBAのソートも

MY CODE

Sub Open_Workbook_Dialog() 

Dim my_FileName As Variant 

    MsgBox "Select Denmark File" '<--| txt box for prompt to pick a file 

     my_FileName = Application.GetOpenFilename(FileFilter:="Excel Files,*.xl*;*.xm*") '<--| Opens the file window to allow selection 

    If my_FileName <> False Then 
    Workbooks.Open Filename:=my_FileName 


Call SortColumn  '<--|Calls the Filter Code and executes 

End If 


End Sub 

Public Sub SortColumn() 
    With ActiveWorkbook.Sheets(1) 

    .Unprotect 
    lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    .Range("A1").Resize(79, lastcol).Sort Key1:=Range("B1"), _ 
    Order1:=xlAscending, _ 
    Header:=xlGuess, _ 
    OrderCustom:=1, _ 
    MatchCase:=False, _ 
    Orientation:=xlTopToBottom, _ 
    DataOption1:=xlSortNormal 
End With 
End Sub 
+3

を働く必要があることを指摘しなければならない

PS 'さらに83行目のシートを降ろす'。あなたの 'SortColumn'コードでは、行79にリサイズされただけです - あなたのデータはどの行に終わりますか? – Jordan

+0

こんにちはJordan:私のデータは151行目で終了します。毎日違うかもしれませんし、別の時間帯にデータが少なくてもかまいません。 –

+1

'lastcol'のように' lastrow'変数を作成し、例えば、 'lastcol'変数を設定する場所の下で、' lastrow = .Cells(.Rows.Count、1).End(xlUp).Row'を追加してください。 '.Range(" A1 ")。Resize(lastrow、lastcol).Sort' – Jordan

答えて

2

'選択展開' をしなければならない。これは、あなたのデータが残っていること言及した

Sub SortColumn() 

    With ActiveWorkbook.Sheets(1) 

     Dim LastRow As Long 
     LastRow = .Cells(Rows.Count, 1).End(xlUp).Row 
     Dim LastCol As Long 
     LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     With ActiveWorkbook.Worksheets("Sheet1").Sort 
      .SortFields.Clear 
      .SortFields.Add Key:=Range(Cells(2, 2), Cells(LastRow, 2)), _ 
          SortOn:=xlSortOnValues, _ 
          Order:=xlAscending, _ 
          DataOption:=xlSortNormal 
      .SetRange Range(Cells(2, 1), Cells(LastRow, LastCol)) 
      .Header = xlNo 
      .MatchCase = False 
      .Orientation = xlTopToBottom 
      .SortMethod = xlPinYin 
      .Apply 

     End With 

    End With 
End Sub 
+0

こんにちはJean:はい、これはうまくいきました。変更するだけでしたが、Dim LastRowはLong LastRow2に変更しました。また、LastRow = .Cells(Rows.Count、1).End(xlUp).Rowに変更しなければなりません。 :-)ジョーダンは以前私をそこに連れてきましたが、彼はポイントを望んでいないので、私はあなたの答えを受け入れることを嬉しく思っています。時間をとってくれてありがとう。素晴らしい一日を過ごす –

+0

@PhilipConnell良いもの。お互いを助けることは、それについてです –