• ベストアンサー

VBA ソートすると、1、11、2,3になって・・

VBAにて下記のようなコードでソートすると、1、11、2,3になってしまいました。 数字ではなく、文字として認識していると、このようになると書かれていました。 どうすれば、1、2、3、11と並び替えれるのしょうか? If Numbers1(i) > Numbers1(j) Then

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

>どうすれば、1、2、3、11と並び替えれる 方法1) 自作プログラムでソートせず、エクセルに任せます。 sub macro1() range("A:A").sort key1:=range("A1"), order1:=xlascending, header:=xlno, dataoption1:=xlsorttextasnumbers end sub 方法2) 変更前: If Numbers1(i) > Numbers1(j) Then 変更後: If Numbers1(i) - Numbers1(j) > 0 then

mk1234
質問者

お礼

回答ありがとうございます。 方法2がシンプルで良さそうですね。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

No3です。訂正 Numbers ↓ Numbers1(i)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

なんか数字が全角ぽいので Val(StrConv(Numbers, vbNarrow)) の方がいいかもしれません。

mk1234
質問者

お礼

回答ありがとうございます。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

Val(Numbers1(i)) とかにして数値に変換してください。

mk1234
質問者

お礼

回答ありがとうございます。 こうすればよいのですね。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

もし、Numbers1の桁数がすべて10桁以内であるなら、 If Right("0000000000" & Numbers1(i), 10) > Right("0000000000" & Numbers1(j), 10) Then とすれば、1、2、3、11となる。

mk1234
質問者

お礼

回答ありがとうございます。 このような方法で、なぜ数字とみなすようになるのでしょうか?

関連するQ&A