|
あれあれ、最初の例題とだと条件が違うのですね。
行を削除という行為を取っていいのですか?
1行目はヘッダーのようですね。
それなら、もし、SpecialCellsメソッドで削除行が取得できるくらいの行数なのであれば、
オートフィルターを使って空白行に絞込み、削除するってでのいいかもしれません。
手操作による記録でも取ってみて下さい。
表題から、行削除は行わず、整列させるのみと解釈したのですが、そうじゃないんでしょうか?
で、最初に提示したコード例ですが、
>新規シートで動作させて見るとB列で作業しているように見えました。
とのことですが、
>Set r=Set r = Range("A1:A8")
として、rを特定した上で、
>r.EntireColumn.Insert xlShiftToRight
とA列の左に新しい列を挿入している積もりなんですが、B列で作業しましたか?
そうなっちゃいますかね?
本当にそうなのか、もう一度Step実行して確認してみてくれませんか?
Sortという手法を取っていますが、結果的には、
空白行を下方に集合させるだけで、元の並びは保障したつもりなんですけどね〜。
あと、
>廃番のコードをクリアして整列させたい訳けでが入力順番は
>変えたくありません。(ソートすると順番が変わってしまいます)
廃番のコードとか、例示にない項目をいきなり登場させられても分からんのです。
一応、2度目の提示のあたデータ例をもとに、かってに
A列が空白の行を対象に下方に持っていくというコードにしてみると、
Sub sample2()
Dim Target As Range
Dim tmpR As Range
Dim r As Range, c As Range
With ActiveSheet
Set r = .Range("A" & .Rows.Count).End(xlUp) '☆
Set r = .Range(r.EntireColumn.Cells.Item(1), r)
Set Target = Intersect(r.EntireRow, .Columns("A:G"))
End With
r.EntireColumn.Insert xlShiftToRight
With r.Offset(, -1)
.Item(1).Value = 1
.DataSeries
For Each c In r
If IsEmpty(c) Then c.Offset(, -1).ClearContents
Next
Union(Target, .Cells).Sort Key1:=.Columns(1), Order1:=xlAscending, _
Header:=xlNo, Orientation:=xlTopToBottom
.EntireColumn.Delete xlShiftToLeft
End With
End Sub
もし、調査対象が、A列じゃなくB列の空白をってことなら、☆のステップをB列に変更して下さい。
なお、ichinoseさんの以下は、私向けですか?
>質問者さんの記述が悪いと一概には言えませんね!!
私は、別に悪いと言った訳ではありません。
最初の例示は、1列だけだったのでそれを鵜呑みにしたコード例を提示しましたが、
どうも2回目の質問では、複数列の話なんだなってことまでは分かったので、
それなら、同様にちゃんとデータ例を提示してもらいたいと思ったまでです。
なお、
>ただ、整列は一般的にソート(並べ替え)と解釈されますからね。
私がSortで整列させようとしていると思われたのでしょうか?
それについては、もちろん、並び替えないでという条件は最初の提示例で認識してましたよ。
|
|