2017-02-01 11 views
-2

研究では、列全体を調べ、真の答えがfalseである式を見つけました。しかし、それは私が達成する必要があるものではありません。Excel - 列内の数値を昇順に検索するマクロ

数値の列を選択し、数値がそれよりも大きいときに停止するマクロを実行したい場合は、その数値より大きい数値を入力します。

私は55000の列を、おそらく昇順で順序番号で持っています。私は昇天の間違いを選ぶ必要があります。

ありがとうございました

答えて

0

すべてのソートされていないセルのアドレスを返すために、この機能を使用することができます。としてあなたのメインのコードで使用する

Option Explicit 

Function IsItSorted(rng As Range) As Variant 
    Dim vals As Variant 
    Dim nErrs As Long, iVal As Long 

    vals = Application.Transpose(rng.Value) 
    ReDim errs(LBound(vals) To UBound(vals)) As String 

    For iVal = LBound(vals) To UBound(vals) - 1 
     If vals(iVal) > vals(iVal + 1) Then 
      nErrs = nErrs + 1 
      errs(LBound(vals) - 1 + nErrs) = rng(LBound(vals) - 1 + iVal).address 
     End If 
    Next 
    If nErrs > 0 Then 
     ReDim Preserve errs(LBound(vals) To LBound(vals) - 1 + nErrs) As String 
     IsItSorted = "Errors at: " & Join(errs, ",") 
    Else 
     IsItSorted = "Sorting: OK" 
    End If 
End Function 

Sub main() 
    MsgBox IsItSorted(Range("B2:B11")) 
End Sub 
+0

これは私のために働くでしょう - ありがとうございます - 私はあなたの知識を羨む。列全体を意図したとおりに実行するために、ワークブックで修正する必要があるいくつかのことが指摘されています。 – Mstuf

+0

あなたは大歓迎です。そして、私を羨ましくはしないでください。 – user3598756

0

あなたは配列式で行うことができます。あなたの列が「A」であると55000行を持っている場合は、任意のセルで、この配列数式を入力します。

=AND(A1:A54999 <= A2:A55000) 

それは、配列数式だ、それを入力し、Ctrl+Shift+Enterを押してください。それは通常の数式のようにEnterを押すだけでは役に立たない。

EDIT

だから、問題はエラーがあるかどうかを知るために、それを発見するだけではありません。ここでは、並べ替えエラーの最初の発生SelectするVBAマクロです、それ以外の場合はエラーを通知します。現在選択されているセルを列の最初のセルとして使用してチェックします。

Sub checkColumnSorting() ' <-- uses current selection as first cell in column 
    Dim firstCell As Range, lastCell As Range, i As Long, ar 
    Set firstCell = Selection 
    With firstCell.Parent 
     Set lastCell = .Cells(.Rows.Count, firstCell.Column).End(xlUp) 
     ar = Application.Transpose(.Range(firstCell, lastCell)) 
     For i = LBound(ar) To UBound(ar) - 1 
      If ar(i) > ar(i + 1) Then 
       .Activate 
       .Cells(i + firstCell.Row, firstCell.Column).Select 
       msgBox "Error in ascending sorting at row " & i + firstCell.Row 
       Exit Sub 
      End If 
     Next 
    End With 
    msgBox "Ascending sorting is Ok" 
End Sub 
+0

ありがとうございました - 私の結果はfalse私に語りました - 誤った番号を示していますが、どこですか?私の希望は、エラースポットで列を通過することを止める何かのためです。ある時点でエラーが発生しているはずですが、55000行の検索が問題になり、エラーセルを指摘する解決策を見つけることを願っています。 – Mstuf

+0

@Mstuf VBAマクロを追加してエラーを発見し、すぐにそこに連れて行きます。編集をご覧ください。 –

+0

私はすべての変数を考えていないことをお詫びします - これを編集してアクティブなセルから実行できますか?私はシートの冒頭にいくつかのセルを持っています。これらのセルの前に手紙を置くと、このバージョンはそれを過去にしないでしょう。私の知識が不足していることや申し訳ありませんが、 – Mstuf

関連する問題