- 締切済み
昇順に並べ替え
セルA1に50.1、セルB1にB、セルA2に49.9、セルB2にAと入力されています。 A列は、小数点第一位を四捨五入するので両方とも50と表示されています。 A列が同じ(この場合は50)時は、B列は昇順に並べたいです。 VBAで並び替えすると、数字は50.1と49.9なので1行目と2行目が入れ替わりません。 セルに表示されている数字での並び替えはどうしたら良いのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- keithin
- ベストアンサー率66% (5278/7941)
>セルに表示されている数字での並び替え そういう機能は無いので、ささっと工夫してやってしまいます。 作成例: sub macro1() dim r as long application.screenupdating = false range("A:A").insert for r = 1 to range("B65536").end(xlup).row cells(r, "A") = cells(r, "B").text next r range("A:C").sort key1:=range("A1"), order1:=xlascending, _ key2:=range("C1"), order2:=xlascending, header:=xlno range("A:A").delete shift:=xlshifttoleft application.screenupdating = true end sub #補足 実際には出来ないワケじゃなく、「表示桁数で計算する」の機能でご相談通りに出来る場合もあります。ただし今回のご相談の書き振りでは、「50.1」や「49.9」などの「入力値」を損壊するので使えません。 それを踏まえた上で、例えば次のように細工する事はできます。 sub macro2() on error resume next range("E1").formula = "=1" range("E1").copy with range("A1:A" & range("A65536").end(xlup).row) .pastespecial paste:=xlpasteformulas, operation:=xlpastespecialoperationmultiply activeworkbook.precisionasdisplayed = true range("A:B").sort key1:=range("A1"), order1:=xlascending, _ key2:=range("B1"), order2:=xlascending, header:=xlno activeworkbook.precisionasdisplayed = false range("E1").clearcontents ’理屈が理解できたら次の一行を生かす ’.value = .value end with end sub
- maiko0318
- ベストアンサー率21% (1483/6969)
VBAは知らないのですが、小数点第一位を四捨五入するという演算はないのですか? それがあればこんなとこで聞いてないですよね?
- maiko0318
- ベストアンサー率21% (1483/6969)
昇順でA1が50.1、A2が49.9なら入れ替わらないとおかしいですね。(表示ではなく) VBAのプログラム、間違っていませんか?
お礼
間違っていました。 セルA1が49.9でセルB1がB、 セルA2が50.1でセルB2がAです。 数字は昇順に並んでいますが、四捨五入して50なので、 B列が若い順に並べたいです。
お礼
Round関数は、エクセルとVBAは挙動が違うようです。 エクセルは四捨五入だけど、 VBAは丸め込みになるようです。