[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル位置を変えずに並べ替えるには?』(甘太郎)
下記の様な表があったとして、エクセルの並べ替え機能(降順)を使うと、
結果としてセル位置がA1からA5にずれて並べ替えられてしまいますが、
これをセルの位置は変えずにそのままの位置で降順に並び替える方法(VBAコード)を教えて下さい。
なお、この数値データはA列の不特定の位置にあるという条件でお願いします。
version: Excel2002
OS:WindowsXP
A
1
2
3
4 500
5 600
6 700
7
8 200
9 300
よくわからないのですが、、、
[A] [A]
[1]
[2]
[3]
[4] 500 200
[5] 600 → 300
[6] 700 500
[7]
[8] 200 600
[9] 300 700
こう言う事でしょうか?
参考程度にって事で・・・
Sub TEST()
Dim i As Long, n As Long
Dim MyA As Variant, x() As Variant
With Range("B:B")
.Value = Range("A:A").Value
.Sort Key1:=Range("B1")
MyA = Range("B1", Range("B" & Rows.Count).End(xlUp)).Value
.ClearContents
End With
ReDim x(1 To Range("A" & Rows.Count).End(xlUp).Row, 1 To 1)
For i = 1 To UBound(x, 1)
If Len(Cells(i, 1)) Then
n = n + 1
x(i, 1) = MyA(n, 1)
End If
Next i
Range("B1").Resize(UBound(x, 1)) = x()
Erase MyA, x()
End Sub
A列にあるデータを、B列に出しています。
A列に出したいのであれば適当に変更してください。
(キリキ)(〃⌒o⌒)b
参考までにA列の数値をその右のB列にB1から下に数式で昇順で配置させるものです。(pensioner)
B1に=IF(COUNT(A1),SMALL(A:A,COUNT(A$1:A1)),"")として下にフィルドラッグです。
A B
1
2
3
4 500 700
5 600 600
6 700 500
7
8 200 300
9 300 200
B4=IF(A4="","",LARGE(A:A,COUNTIF($A$4:A4,"<>"))) ★下にコピー (Maron)
[返信・編集]から返信を行う際は 既に入っているコメントの下に【書き足して】ください。 (全て消して書き換えて仕舞うと、これまでのコメントが消えてしまいます。)
返信は下のコメント欄から行って頂くのが 宜しいかと思います。
ちなみに、「グループ毎に降順に」が分かりやすい例を挙げられるのが 宜しいかと思います。 [A] [B] [1] [2] [3] [4] 500 700 [5] 100 500 [6] 700 100 [7] [8] 200 300 [9] 300 200 と言う事ではないのですか?
説明不足の点は「昇順ではなく降順が希望だった。」 と言うだけなら良いですけど。
(HANA)
こういうことですか?
Sub test()
Dim myAreas As Areas, myArea As Range
With Selection
On Error Resume Next
Set myAreas = .SpecialCells(2).Areas
On Error GoTo 0
If myAreas Is Nothing Then Exit Sub
For Each myArea In myAreas
myArea.Sort key1:=myArea.Cells(1), order1:=xlDescending, Header:=xlNo
Next
End With
End Sub
(seiya)
とりあえず修正
seiyaさんのコードは実行して見られましたか? そこから改造したら出来そうに思いますが。
(HANA)
(処理前)
[I] [J] [K] [L] [M] [N] [O] [P] [Q] [R]
[1]
[2]
[3]
[4] 500
[5] 100
[6] 700
[7]
[8] 200
[9] 300
(処理後)
[I] [J] [K] [L] [M] [N] [O] [P] [Q] [R]
[1]
[2]
[3]
[6] 700
[4] 500
[5] 100
[7]
[9] 300
[8] 200
(甘太郎)
数値のみを対象にするなら
Set myAreas = .SpecialCells(2).Areas
を
Set myAreas = .SpecialCells(2,1).Areas
^^^
に変更するか、その部分を選択しなければ済むのでは?
(seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.