- ベストアンサー
エクセルVBAで質問です。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
・データは必ず上から順番に入力されている(途中に空行はない) ・“データあり”の行はA列に必ずデータがある と、言う条件なら、A列にだけ注目してこんな感じで。 Sub Sample() nRow = Range("A21").End(xlUp).Row + 1 If (nRow <= 20) And (nRow > 5) Then Rows(nRow & ":20").Delete Shift:=xlUp End If End Sub
その他の回答 (7)
- Wendy02
- ベストアンサー率57% (3570/6232)
#3,4の回答者です。 よくある話ですが、たぶん、「不用な空白行」の意味が違っているのでしょうね。空白というのは、VBAでは、空白というのはEmpty のことで、何もないということです。そういう所で意味が違ってしまっているから、出来ないはずです。少なくとも、前回の私のVBAコードでは永久的に出来ません。 質問の段階で、こちらもできると思うから回答しているわけです。そうでなければ、回答などしません。 あまり、とやかくいうつもりはありませんが、結局、他人任せでは本当の解決しないことが多いのではないかと思います。初心者でもないのですから、ご自身でもある程度考えてみるべきだと思います。 '// Sub Test2() Dim rng As Range Dim delRng As Range Dim c As Variant Set rng = Range("A5:E120") On Error GoTo ErrHandler Application.ScreenUpdating = False For Each c In rng.Columns(1).Cells If Len(Replace(c.Value, Space(1), "", , , 1)) = 0 Then If delRng Is Nothing Then Set delRng = c.Resize(, rng.Columns.Count) Else Set delRng = Union(delRng, c.Resize(, rng.Columns.Count)) End If End If Next Application.ScreenUpdating = True With delRng .Select '--開始--邪魔だったら、ここは省く If .Areas.Count = 1 Then If MsgBox("既に空白は削除されていますが、実行しますか", vbQuestion + vbYesNo) = vbNo Then GoTo ErrHandler End If End If '--終了-- If MsgBox("選択された部分を削除します。", vbQuestion + vbOKCancel) = vbOK Then Application.Calculation = xlCalculationManual Application.ScreenUpdating = False .Delete (xlShiftUp) Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End If End With ErrHandler: If Err.Number > 0 Then MsgBox Err.Number & ": " & Err.Description End If rng.Cells(1).Select End Sub 'なお、一行ずつ削除すれば遅いのは当たり前です。 '行全体は削除しません。.Resize(, rng.Columns.Count) 行全体なら、.EntireRow に替える。 '対話型が邪魔なら全て削除してください。分からない話にならないように、削除する部分を見えるようにさせました。
お礼
ありがとうございました。できました。 ただ私なりにやった結果質問に来たわけですし、決め付けは心外ですし、VBAでは云々と仰られても勉強の浅い私には説明のし様がありません。私なりに画像もつけ、説明も誤解のないように文言に気おつけて書いたつもりです。
- aloha88600
- ベストアンサー率17% (10/58)
ん? コードの記載ミスしてませんか? ワタシの環境だときちんと削除されますよ!
- imogasi
- ベストアンサー率27% (4737/17068)
補足要求。 >添付のではAAからGGまでデータが入っていますが 添付画像では、そうではないようだが。A列からE列までが見えている。 >いつもデータ数は違います。ただし20行目 データのある行数のことか?当たり前のことでは。 >データ範囲の5行目から20行目まででおさまります データ範囲内とは。エクセルは、主に、途中に空白行のないデータのかたまりを扱います。わざわざ書いた意味は? >このような条件で、データのない空白行を自動で削除するようにしたいと 「>このような条件」が良くわからない。 ーー データの終わりの次は空白セルばかりでないのか。 データ行 空白行(複数行)<--A データ行 空白行(複数行)<--B ・・ 最終行 のようになっているのか。 上記のようなA,B・・の部分を削除したいのか。 データのある列はA列から何処列までか
補足
>添付のではAAからGGまでデータが入っていますが 添付画像では、そうではないようだが。A列からE列までが見えている。 ■AA、GGは入力している文字列です >いつもデータ数は違います。ただし20行目 データのある行数のことか?当たり前のことでは。 ■当たり前ではないと思います。行数のことです。何行かは固定ではないということです >データ範囲の5行目から20行目まででおさまります データ範囲内とは。エクセルは、主に、途中に空白行のないデータのかたまりを扱います。わざわざ書いた意味は? ■何らかのA列からE列までで行に何らかの入力があればその行は削除の対象にしたくないということです。 >このような条件で、データのない空白行を自動で削除するようにしたいと 「>このような条件」が良くわからない。 ーー ■このような条件とはそれまで書いた条件ということです。 データの終わりの次は空白セルばかりでないのか。 データ行 空白行(複数行)<--A データ行 空白行(複数行)<--B ・・ 最終行 のようになっているのか。 ■意味がわかりません・・・ 上記のようなA,B・・の部分を削除したいのか。 データのある列はA列から何処列までか ■画像を載せてあるようにAからE列です
- Wendy02
- ベストアンサー率57% (3570/6232)
#3の回答者です。 >データ範囲の5行目から20行目まででおさまります あくまでも、20行目という条件で書かれているのであって、それ以外では、うまく行きません。 >Set rng = Range("A5:E129")としてますが・・・ こちらは、削除する全体の範囲を入れるとは書いていません。5~20行なら、現行の方法では、その範囲を129行まで16行ずつ増やしていくしかありません。20行目以降の先がみえているわけではありません。 結果的に129行をどういう状態にしたいのか分かりません。そのような設定にしても、絶対にできるとは思いません。正しく削除する行を選択できれば、一発で消えます。こちらにマクロに必要な情報を正しく伝えていれば、正しく回答はできるますが、それを伝えていなけば、たぷん無理です。いずれかやっていれば当たるかもしれませんが、そこまでは出来ません。
- Wendy02
- ベストアンサー率57% (3570/6232)
たぶん、連続してマクロを使うものだと思いますが、もしそうなら、 Set rng = Range("A5:E20") この部分を換えてください。 '// Sub DeleteRow() Dim r As Range Dim rng As Range Set rng = Range("A5:E20") On Error Resume Next With rng Set r = .SpecialCells(xlCellTypeBlanks) If r Is Nothing Then Exit Sub On Error GoTo 0 r.Delete .Cells(1).Select End With End Sub
お礼
こんばんは。ありがとうございました。 ためさせていただいたのですが、残ってしまう行が出てきてしまいます。 129行まであるので、Set rng = Range("A5:E129")としてますが・・・
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 A5:A20の該当セルが空白の場合、行削除します。 Sub sample() For i = 20 To 5 Step -1 If Cells(i, "A") = "" Then Rows(i).Delete Next End Sub
お礼
こんばんは。No.1の方に間違えてmu2011さんにする御礼コメントを書いてしまいました。。。 うまくいったのですが、時間がかなりかかってしまってます。データ範囲を拡張していくと129行ぐらいありまして・・・
補足
補足させていただきます。 “データあり”の行はA列に年月日は必ずありますが、あとの列の項目には空白のセルもあります。
- aloha88600
- ベストアンサー率17% (10/58)
Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a65536").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub
お礼
こんばんは。ご提示ありがとうございました。うまくいきました! ただデータ範囲を拡張していくと遅くなってしまいかなり時間がかかってしまいました・・・ 実際129行ぐらいありまして・・・
補足
申し訳ございません。No.2の方にお礼するのと間違えてしまいました・・・ スミマセン。 マクロためさせていただいたのですが、削除されずに行が残ってしまいます。 私の説明不足でしょうか・・・
関連するQ&A
- Excel VBAの質問です。
エクセル2010を使用しています。 Excel VBA で二つのシートを比較して合致するレコードの行を削除する方法 値下げ,まとめのシートがありまして、 値下げ:b列に商品コードのデータ まとめ:a列に商品コードのデータ のようなExcelのデータがあります。 ここから、値下げのシートの商品コードを一つ一つ読み込みながら、まとめの商品コードと比較して、合致した値下げの商品コードの行を削除するプログラムを作りたいです。 商品コードのデータ数は毎回違い、値下げとまとめでも商品コードのデータ数は違います。 どなたかご教示いただけないでしょうか? よろしくお願いいたします。
- ベストアンサー
- Excel(エクセル)
- エクセル2003のVBAを教えて
エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、 データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目 (1):種類だけを(C列)に取り出す。 (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。 (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列) 文字(B列) AA あああ BB いいい BB いい BB いいい CC うう CC うう DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列) 文字(B列) あああ AA あああ いいい BB いいい BB いいい BB いいい うう CC うう CC うう ええええ DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ DD ええええ
- ベストアンサー
- Visual Basic
- Excel VBA の質問です
Excel VBA でやりたいことがあるのですが、自分ではわからず困っています。。 データ例として、画像を添付しました。 実行前は、A列に名前、B列にそれぞれ選手の打点(ただし、最初の行は空白)というデータです。 これを実行後のように(A列、B列という場所は変わらずに)、それぞれの選手の打点平均を空白に算出するコードを教えてほしいです(ただし、各打点の入っていたデータはクリア)。 なお、画像例は「中田」までしか載せてませんが、その下にも続いていてデータ最後まで計算させるということをやりたいです。 ぜひ、ご教授願います。
- ベストアンサー
- Visual Basic
- Excel Vba でデータの範囲を知るには?
Excelを使用していますが、マクロ(VBA)で、シートのデータの範囲を知るにはどうすればよいのでしょうか。 印刷プレビューを行うと、自動的にページ数が求めらていますが、これは、シートのデータの範囲(列及び行の最大値)を判別しているからできるのだと思います。 これを、VBAで行、及び列のMAX値を取得したいのですが、そのメソッド(プロパティ)を知りたいのです。 どなたかご教授ください。
- ベストアンサー
- オフィス系ソフト
- エクセル非表示VBA
こんばんわ。 エクセル初心者で勉強中です。 今下記画像のようなデータをエクセル2007で作成しています。 データは2行目から1000行目位まであるとします。 そこで質問なのですが、黄色の行のように その行のすべてのセルの値が空白の場合、行を 非表示にしていくコードはあるのでしょうか。 現在目視で非表示にしているので、できればVBAで素早くしたいのですが。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excel VBAのカウントについて
Excel2003で表を作成しています。 画像のような表を作成しているのですが、 左のデータから右の表に数を入力するのに、VBAで出来ないでしょうか? COUNTIFを使おうと思ったのですが、COUNTの条件が3つありますし、 左のABCの列は500行くらいデータが入っているので出来ればVBAで出来たらと思いました。
- ベストアンサー
- その他MS Office製品
- Excel VBAでデータを自動処理したい
Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excelの集計で65000行のデータが?
Excelの集計で65000行のデータが? 時々、100行位の表の集計で約65000行のデータが出来てしまい、(Ctrl+End を押すと65***行に飛びます)ファイル容量が60Kが20M位になってしまいます。 集計の時に表データの範囲指定をしなくても自動的に範囲指定してくれるはづなのに、自動ではダメな時があるのでしょうか? 後の修復作業ですが、空白のいらない行を削除しても変わらず、範囲指定のコピーをして別のシートに貼りましたが、もっと簡単な方法はありませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA 行のコピー
お世話になります。 添付の表1のデータがあるのですが、これをボタンが押されたら自動で表2のようにしたいのです。 やりたい事・・・ 表1のA3から最下行までREADして品番(A??)と品名(B??)の空白セルを埋めたいのです。(表2黄色部分)各商品は最低でもデータ行が1行あり、各商品の行数は可変です。 最大でも10行程度だと思います。 どなたかご教授いただけますでしょうか? よろしくお願い致します。 環境 Windows XP SP3 Excel2003
- ベストアンサー
- その他MS Office製品
お礼
ありがとうございました。 実行結果がかなり早くコードも短くすごく良かったです。ありがとうこざいました。