Excelにて特定の列のみの空白を上に詰めるVBAを組んだのですが、
全ての列に適用してしまって困っております。
Sub 空白を上に詰める()
Dim Lrow, i As Long
Dim myRange As Range
Lrow = Range("AH65536").End(xlUp).Row
Set myRange = Rows(Lrow + 1)
For i = 1 To Lrow
If Cells(i, 34) = "" Then
Set myRange = Union(myRange, Rows(i))
End If
Next i
myRange.Delete
End Sub
上記のように「AH」列にのみ適用するように組みましたが、
うまくいきません。
VBAは初心者レベルです。
VBAにお詳しい方のご意見をお聞かせ願えますでしょうか。
宜しくお願い致しますm(_ _)m
No.1ベストアンサー
- 回答日時:
ざっとコードを拝見したところでは、
> Set myRange = Rows(Lrow + 1)
ここで、行番号Lrow+1の行全部のセルをmyRangeに格納し、
> Set myRange = Union(myRange, Rows(i))
ここで、行番号iの行全部のセルとmyRangeとをUnionしています。
AH列のみの適用にするのなら、これらを
Set myRange = Cells(Lrow + 1, 34)
Set myRange = Union(myRange, Cells(i, 34))
にすると上手くいくはずです。
ご参考までに、定義部分で
> Dim Lrow, i As Long
は、
Dim Lrow As Long, i As Long
としたほうがいいですよ。
> Dim Lrow, i As Long
ですと、LrowがVariant型で定義されてしまうんです。
Set myRange = Cells(Lrow + 1, 34)
Set myRange = Union(myRange, Cells(i, 34))
とするのですね。
完全に間違えておりました。
Dim Lrow, i As Long
も見落としておりました。
とても参考になりました。
もっと勉強しようと思います。
ありがとうございましたm(_ _)m
No.2
- 回答日時:
>全ての列に適用してしまって困っております。
[回答番号:No.1] の ok2007 さんがご指摘になっているように、
Set myRange = Rows(Lrow + 1)
Set myRange = Union(myRange, Rows(i))
では myRange に 行の集合体が格納されてしまいます。
次に、Delete メソッド の構文は
expression.Delete(Shift)
で、引数 Shift については、
>この引数を省略すると、セル範囲の形に適応した方向にシフトされます。
とヘルプに出ていますので、
>空白行を上に詰め
たいのであれば、キチンと「xlUp」を付けた方がよいかと存じます。
で、別の方法としては、
myRange.Delete
ではなくて、収集した行の集合体である myRange と AH列との共有セル範囲を上方向に削除する、という考え方で
Application.Intersect(Columns("AH"), myRange).Delete xlUp
というのはいかがでしょうか?
ちなみに、お示しの例でしたら、エクセル上で、[新しいマクロの記録] により
1)AH列を選択
2)ジャンプメニュー で [空白セル(K)] を選択
3)上方向に削除
を記録し、整理すると、
Columns("AH").SpecialCells(xlCellTypeBlanks).Delete xlUp
Range("AH1").Select
だけで、すべて実行できます。
ご回答ありがとうございます。
皆様の回答を試した結果、あっさりと
解決してしまいました。
ずいぶん難しく考えていたようです。
VBAの使い方も大変参考になりました。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBA 空白セルを削除ではない方法で詰めるやり方
Visual Basic(VBA)
-
Excel VBA 空白行をつめる
Excel(エクセル)
-
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
-
4
エクセルで空白行を削除する 2列とも空白の場合のみ
その他(Microsoft Office)
-
5
マクロで#N/A"のエラー行を削除したい"
Visual Basic(VBA)
-
6
エクセルVBAのIF文の否定の複数条件
Excel(エクセル)
-
7
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
8
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
9
【vba】指定範囲の中に任意の文字があるときの条件分岐
Excel(エクセル)
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル関数で {=TABLE(,セル...
-
エクセルで離れたセルを離れた...
-
リース初心者です 利子率の計...
-
Excelの基本を1週間で覚えたい
-
VBA 条件が一致した場合の...
-
プルダウンで選択すると隣のセ...
-
Excel2010の並べ替えで行の高さ...
-
エクセルで関数を一度いれたセ...
-
エクセルで複数の勤務時間ごと...
-
Excelのセル内にある特定文字で...
-
エクセルの行高さが、挿入作業...
-
曜日別の売上平均値をだしたい...
-
30分単位、30分未満切捨て
-
基本的なエクセル操作とは?
-
Excelのオートカルクの結果をコ...
-
エクセルを使った分配比率の求...
-
データを任意の場所【台帳】へ...
-
EXCELの[データ]→[外部データの...
-
エクセルで納品書作成の件
-
Excelハイパーリンクのアドレス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2010の並べ替えで行の高さ...
-
リース初心者です 利子率の計...
-
エクセル関数で {=TABLE(,セル...
-
エクセルで離れたセルを離れた...
-
プルダウンで選択すると隣のセ...
-
エクセルで複数の勤務時間ごと...
-
エクセルで作った書類に、パン...
-
60進法で複数セルの足し算、引...
-
VBA 条件が一致した場合の...
-
エクセルデータをワードへ反映...
-
EXCELでR1C1参照形式の絶対参照...
-
エクセルの行高さが、挿入作業...
-
Excelハイパーリンクのアドレス...
-
エクセルを使った分配比率の求...
-
今日の日付が第n曜日かを求める
-
エクセルで一番下の日付や時刻...
-
Excelのオートカルクの結果をコ...
-
Excelの空白行を上に詰めるVBA...
-
至急! Excelで歩合計算
-
エクセルデータを拡大/縮小して...
おすすめ情報