質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

15776閲覧

VBA 空白行削除して上につめる

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/01/01 07:52

編集2017/01/01 07:58

今年一発目の質問です。よろしくお願い致します。

作業後の差分だけを抜き出したら、空白ができました。
この空白を消して、上に詰めるには、どうしたらいいでしょう?

vba

1Range(cells(x1,y2),cells(x2,y2)).Delete Shift := xlShiftUp

を使えばいいのは、わかっているのですが・・・・
一時的に空白行のアドレス番地を格納しておいて削除するとかですかね?
ちなみに、まだ、コレクションとか、配列は美学習です。
(まだまだ超初心者ですので・・・)

イメージ説明

ちなみに全体のコードは以下です。

vba

1'差分抽出マクロ 2 3Sub test1() 4Dim i As Long '作業前用カウンタ変数 5Dim j As Long '作業後用カウンタ変数 6Dim diff As Long '差分書き出し用変数 7Dim A_MaxRow As Long 8Dim D_MaxRow As Long 9 10'作業前のMACを元に作業後のMACアドレスの比較を行う 11i = 3 12 Do While Cells(i, 1).Value <> "" 13 j = 3 14 Do While Cells(j, 4).Value <> "" 15 If Cells(i, 1) = Cells(j, 4) Then 16 Cells(i, 3).Value = "after_match" '作業後のMAC有り 17 End If 18 j = j + 1 19 Loop 20 i = i + 1 21 Loop 22 23'作業後のMACを元に作業前のMAアドレスんの比較を行う 24j = 3 25 Do While Cells(j, 4).Value <> "" 26 i = 3 27 Do While Cells(i, 1).Value <> "" 28 If Cells(j, 4) = Cells(i, 1) Then 29 Cells(j, 6).Value = "befor_match" 30 End If 31 i = i + 1 32 Loop 33 j = j + 1 34 Loop 35 36'xx_matchが無いものが差分なので別セルへ抜き出す 37'作業前でafter_matchが無いMACとホスト名を別セル(h列、i列)へ抜き出す 38diff = 3 39A_MaxRow = Cells(Rows.Count, 1).End(xlUp).Row 40 41 For i = 3 To A_MaxRow 42 If Cells(i, 3).Value <> "" Then 43 44 Else 45 Range(Cells(i, 1), Cells(i, 2)).Cut Destination:=Range(Cells(diff, 8), Cells(diff, 9)) 46 diff = diff + 1 47 End If 48 Next i 49 50 51'作業後でbefor_matchが無いMACとホスト名を別セル(j列、l列)へ抜き出す 52diff = 3 53D_MaxRow = Cells(Rows.Count, 4).End(xlUp).Row 54 55 For j = 3 To D_MaxRow 56 If Cells(j, 6).Value <> "" Then 57 58 Else 59 Range(Cells(j, 4), Cells(j, 5)).Cut Destination:=Range(Cells(diff, 10), Cells(diff, 11)) 60 diff = diff + 1 61 End If 62 Next j 63 64 65'空白行を削除して上に詰める 66 67'まったくわからない~ 68 69End Sub 70

差分比較データー
イメージ説明

ご教授下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

年始にお疲れ様です。

空白行を削って詰める場合は
一番下の列から見て、空白セルを見つけたら削る、のがいいですよ。
step=-1 で for~nextの値が増減が決められます
ご参考になりましたら。

for Row=最終行 to 対象の一番上の列番号 step=-1 if 対象セル="" then 空白セルを削る処理 end if next

投稿2017/01/01 22:26

macinspire

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/01 22:52

なるほど!! やっぱりプログラム出来る人って、思考が凄い!! 有難うございます!!無事解決できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問