• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA エクセル 列の並び替え)

VBAエクセル列の並び替え

このQ&Aのポイント
  • VBAエクセルで列の並び替えを行う際にエラーが出る問題について教えてください。
  • マクロを使用して、ABC以外の文字が入っている列を削除する処理を組んだのですが、範囲を設定するとエラーが出ます。
  • なぜこのエラーが発生するのか、解決方法を教えてください。

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

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

できるだけご質問のマクロを生かしてみると。 sub macro1()  dim c as long  dim x as variant  for c = range("IV1").end(xltoleft).column to 1 step -1   x = cells(c, 1)   if x <> "A" and x <> "B" and x <> "C" then    cells(c, 1).delete shift:=xlshifttoleft   end if  next c end sub

vitaminQQ
質問者

お礼

行も列も勘違いし、更に題名もいまいちな質問に回答して頂きありがとうございます。 解決しました。 回答を書いて頂き感謝しております。 元々ループで行う必要は無かったんですね。 自分が考えていたよりも、なんだか大変そうですが、知識を増やす為にも、削除後の列の並び替えを行いたいのですがなんとか構文考えてみます。ありがとうございました。 ちなみに私が削除したかったのは、行でした、、、。

その他の回答 (5)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.6

>エラーが出てしまいました。なぜでしょうか?  ⇒Dim rg As Rangeはオブジェクト、rg = Cells(i, 1)はValueなのでデータ型不一致      その他、気になる点です。    (1)データ構成によって削除できない行があります(削除時、変数iは加算?)    (2)Loop Until (i & "1") = ""では無限ループです    (3)Ifの判定条件に<>とAndの組み合わせは判り辛い    (4)DeleteメソッドはRowsオブジェクトの方がすっきりします   因みに変数定義ですが、プロでないのならば省略する方が楽です。   但し、データの型は十分理解して下さい。         

vitaminQQ
質問者

お礼

データ型省略できるんですね、、。 そんな事も知りませんでした。 (3)番が気になるので調べようと思いました。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

エクセルで行を削除したら、例えば第3行目を削除したら、本来第4行目のデータが第3行目に上がってくる。すると 行番号のCells(i,”A”)のiのデータが思っていたものと違うものになる。i+1すると上がってきた行は判別対象からもれるだろう。 こんなことはVBAでDELETEをやると、直ぐ経験することだ。 だから行削除したい場合は最下の行から上の行に向かって処理するのが常套的手法と思う。 質問者が経験不足なだけ。 参考 最下行は Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d End Sub 下からの処理は For i=2 to d step -1など。

vitaminQQ
質問者

お礼

行の削除が実は少し考えなければならない処理だと知りませんでした。 最終行から削除を進めなければならないんですね。 参考になりました。

noname#158634
noname#158634
回答No.3

あ、一つ忘れてた。 初心者のうちはプロパティは明示するように。 rgじゃなくてrg.Value <> "A"とすること。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

なぜでしょうね。 これから、エラーが出るたびに、人に聴くのですか? エラーの内容について、調べてみましたか? http://excelvba.pc-users.net/fol2/2_5.html で。セルの削除について勉強しなおしてください。 Loop Until の条件もおかしいですね。

vitaminQQ
質問者

お礼

今回質問した時に前回よりも時間をかけずに質問をしたのが、見抜かれてしまった!?と思いました。 教えて頂いたHP参考にします。ありがとうございます。

noname#158634
noname#158634
回答No.1

「範囲を設定」ってなに? rg = Cells(i, 1) のことなら、set。

参考URL:
https://www.google.com/search?q=vba+%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%9E%8B
vitaminQQ
質問者

お礼

夜遅く、回答ありがとうございました。 自分が何の知識も無い事を再認識しましたので、教えて頂いたHP含めもう一度勉強します。 本を買ってみましたが、どの本が知識を増やせるのかわかりませんね、、。 私が買った本は、逆引き辞典600ですが、個人のエクセルマクロのHPはそれ以上ためになります。