「夫を成功」へ導く妻の秘訣 座談会

こんにちは! いつもこちらで勉強させていただきています。
空白行の削除について教えて下さい。
左図のようA~D,E~F,G~J,K~Mがそれぞれ1段づつずれているデータを空白行をなくして
右図のように詰めたいです。
A~Dで作成してE~F,G~J,K~Mをそれぞれ別で行おうと考え、まずはA~Dで作成をしようと
以下のコードで試したところ「型が一致しませんという」エラー表示がでました。
エラーからIF以降のコードの書き方が間違っているのかと思いますが調べても良く理解できず
立ち止まっています。
お手数ですがどなたかご教授下さい。(下記のコードは色々調べて作成してみました)

Sub 行間()
Dim i As Long
Dim s As Long
Dim t As Long

s = 1
t = 30

For i = t To s Step -1
If ActiveSheet.Range(Cells(i, "A"), (Cells(i, "D"))) = "" Then
Application.Rows(i).Delete
End If
Next

End Sub

「VBA 空白行の削除」の質問画像

A 回答 (3件)

次回からエクセルのバージョンは書くようにしてください。



If ActiveSheet.Range(Cells(i, "A"), (Cells(i, "D"))) = "" Then
でエラーとなっています。
左辺はRange型であり、右辺はString型であるため質問にあるメッセージが出ています。

以下に変更すればいけるはずです。
If WorksheetFunction.CountA(ActiveSheet.Range(Cells(i, "A"), Cells(i, "D"))) = 0 Then

Office2016なら以下でもいけます。
If WorksheetFunction.TextJoin("", True, ActiveSheet.Range(Cells(i, "A"), Cells(i, "D"))) = "" Then
    • good
    • 0
この回答へのお礼

nekoronda様 バージョンのご指摘有難うございます。
また、左辺と右辺の型に関してはまだそれぞれの型を勉強しきれていません。
ご指摘を元に勉強します。
やりたい事も解決しました。

また、ご指摘&解決しましたのでnekoronda様をベストアンサーとさせて頂きまsジュ。
本当に有難うざいました。

お礼日時:2020/08/23 20:53

こんにちは!



範囲はA1~M30セルと決まっているのですかね?
そしてお示しの画像を拝見すると行方向に関しては重なりはないようなので、一例です。

空白セルは数式などは入っていないという前提で!

Range(Cells(1, 1), Cells(30, "M")).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp

の1行だけで処理できそうです。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04様 ご回答有難うございます。
私は1つの処理を繰り返すことしか思いつきませんでしたが
(それすら出来ていませんが)
tom04様のよう簡略化できることにあこがれます。
本当に有難うございました。

お礼日時:2020/08/23 21:04

こんにちは。


以下、手を加えてみました。
確認してみてください。

Sub 行間()
Dim i As Long
Dim s As Long
Dim t As Long
Dim x As String '←追加


s = 1
t = 30

For i = t To s Step -1
'If ActiveSheet.Range(Cells(i, "A"), (Cells(i, "D"))) = "" Then'←削除

x = Cells(i, 1) & Cells(i, 2) & Cells(i, 3) & Cells(i, 4) '←追加
If x = "" Then '←追加

Application.Rows(i).Delete
End If
Next
    • good
    • 0
この回答へのお礼

kamejiro様 ご回答有難うございます。
今後の応用も効く内容のご回答を頂き、日々の事務作業にも生かせそうです。
本当に有難うございました。

お礼日時:2020/08/23 20:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング