研究では、列全体を調べ、真の答えがfalseである式を見つけました。しかし、それは私が達成する必要があるものではありません。Excel - 列内の数値を昇順に検索するマクロ
数値の列を選択し、数値がそれよりも大きいときに停止するマクロを実行したい場合は、その数値より大きい数値を入力します。
私は55000の列を、おそらく昇順で順序番号で持っています。私は昇天の間違いを選ぶ必要があります。
ありがとうございました
研究では、列全体を調べ、真の答えがfalseである式を見つけました。しかし、それは私が達成する必要があるものではありません。Excel - 列内の数値を昇順に検索するマクロ
数値の列を選択し、数値がそれよりも大きいときに停止するマクロを実行したい場合は、その数値より大きい数値を入力します。
私は55000の列を、おそらく昇順で順序番号で持っています。私は昇天の間違いを選ぶ必要があります。
ありがとうございました
すべてのソートされていないセルのアドレスを返すために、この機能を使用することができます。としてあなたのメインのコードで使用する
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
あなたは配列式で行うことができます。あなたの列が「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
ありがとうございました - 私の結果はfalse私に語りました - 誤った番号を示していますが、どこですか?私の希望は、エラースポットで列を通過することを止める何かのためです。ある時点でエラーが発生しているはずですが、55000行の検索が問題になり、エラーセルを指摘する解決策を見つけることを願っています。 – Mstuf
@Mstuf VBAマクロを追加してエラーを発見し、すぐにそこに連れて行きます。編集をご覧ください。 –
私はすべての変数を考えていないことをお詫びします - これを編集してアクティブなセルから実行できますか?私はシートの冒頭にいくつかのセルを持っています。これらのセルの前に手紙を置くと、このバージョンはそれを過去にしないでしょう。私の知識が不足していることや申し訳ありませんが、 – Mstuf
これは私のために働くでしょう - ありがとうございます - 私はあなたの知識を羨む。列全体を意図したとおりに実行するために、ワークブックで修正する必要があるいくつかのことが指摘されています。 – Mstuf
あなたは大歓迎です。そして、私を羨ましくはしないでください。 – user3598756