• 締切済み

ExcelVBAを使って、行の削除と削除した行の分だけ残りの行を上につめるプログラムを作りたいのですが...

ExcelVBAを使って、行の削除と削除した行の分だけ残りの行を上につめるプログラムを作りたいのですが... 例えば、 A 1 ○ ------- B 2 ○ ------- C 3 × ------- D 4 ○ ------- E 5 × ------- F 6 × という表があったとして、コマンドボタンをクリックすると×がついている行を削除して、 A 1 ○ ------- B 2 ○ ------- D 4 ○ という風に×のあった行をつめるようなプログラムを組みたいです。 私が作ったのはループをまわす中で×を見つけるとその、下の行のセルを各々ひとつ上に上げていくというプログラムです。これだとひとつのセルごとに処理していくのでデータが多いとボタンを押してから処理が終わるまでに時間がかかってしまいます。 行をまとめて消して、その下の行を上に持ち上げる方法だと処理が早くなりそうなのですがそのプログラムがイマイチわかりません。 お分かりになるかたがいらっしゃれば、ご教授お願いします。  

みんなの回答

回答No.1

Sub test() Range("C1").Select Selection.Sort Key1:=Range("C1"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Cells.Find(What:="×", After:=ActiveCell, LookIn:=xlValues, LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _ True).Activate Range(Selection, Selection.End(xlDown)).Select Selection.EntireRow.Delete End Sub

関連するQ&A

  • ExcelVBA 行削除

    ExcelVBA 行削除 行削除マクロを組んでみようと、以下のソースを書きましたが エラーが出てしまいます。理由分かりますか?? ==ソース========================= Sub DeleteRows() Dim Va1 As Integer, Va2 As Integer, Va3 As Integer Worksheets("Sheet1").Activate Va1 = Selection.Row Va2 = Application.InputBox(Prompt:="何行消しますか??", Type:=1) Va3 = (Va1 + Va2) - 1 Rows("Va1:Va3").Delete End Sub ============================== やりたい事は、選択されているセルの行から数行(行数は数値指定)下までを選択して、 それを削除したいだけです。

  • 不要行を削除して上に詰めていく

    エクセルマクロでA~D列の4列につながる4行一組が繰り返される同じパターンの色帯でA列の「生」という一文字の下に無色がなければ4行ごと削除していって上に詰めていってください。

  • ExcelVBA 表に空白があれば行単位で詰めたい

    初心者です。 ExcelVBA2007で、A3:G15の表があります。(さらに実際は横にも同じようにI3:O3にもさらに下にも同じような表がいくつかあります) この表は、行ごとに1セットになっています。(例えばA3に分類、B3に商品名・・・G3に数のように) この表の所々に空欄があるのですが、一つの表の中の行がすべて空欄であれば上に詰めていきたいと思っていますがうまくいきません。後、D列には数式が入っているのですが処理がかわってくるのでしょうか?(今後数式を入れない方向に変えようかとも思っています) どうすればよいでしょうか? もしよかったら、同じ表に対する繰り返し処理のスマートな表記があれば教えていただければありがたいです。 申し訳ございませんが、ご教授よろしくお願いいたします。

  • 不要行を削除したい

    『B列のとあるセルに「あああ」と入力されているなら B1から「あああ」の一つ上の行まで削除する』というコードが知りたいです。 なので例えば 「あああ」がB100に入力されているとしたら 1行目から99行目まで削除して「あああ」を「B1」に持ってくるようにしたいです。 よろしくお願いします。

  • ExcelVBAマクロで記号のみセルごと削除方法

    ExcelVBAマクロについて確認させてください。 ExcelでA列から行方向に漢字、記号(環境依存文字も含む)のデータが1文字ずつ入力されてあり、漢字は削除しないで記号のみセルごと削除するプログラムを作りたいのですが、その方法はありますでしょうか。 [例] 科 削除しない (1) セルごと削除 加 削除しない ☆ セルごと削除

  • ExcelVBA 行毎の重複検索と削除

    ExcelVBA 行毎の重複検索と削除 画像を確認いただきたいのですが、 赤くなっているところが、一行毎の重複セルとなりますが、 これを自動的に検索して削除し、左詰めを行う、 というVBAコードを知りたいです なにぶん初心者なもので、できれば一つ一つの動きが分かるような コメント付きで頂けるとありがたいです。 お手数ですが皆様よろしくお願いします。  

  • Excelvba表に空白行があれば上に詰める重い

    いつもお世話になっております。 列がD列からK列で、行が4行目から23行までの表があります。 その表で1行まるまる空白の時(4行目にには数式が入っていますがそれは除く) 上の行に詰めるようにしてあります。行はそのまま空白のまま残して、値のみ上に詰めるようにしています。 このような表が同じ列に4か所×3=12か所あるので、今はそれぞれ下のコードの行、列を変更して処理しています。 上の表と下のの表の間隔は、上が4~23行までで、下は30~49、と6行間隔です。結合セルも間にあるため5行空きがあります。 列と列の間隔は、左側から、D列~K列、続いて、N列~U列と続きます。2列空きがあります。 家で試した時は一応問題なく動いたのですが、 会社でした時フリーズしてしまい、うまくいきませんでした。 その後、家でしてもなぜかうまく動作しなくなりました。 12の表は多いのかと思い、1つで試してもだめになりました。 同じような作りの別のファイルは動いています。 念のため、新しいファイルにコピーし直してやりましたが、駄目でした。 コードもあまり良くないのかもしれません。 一応家ではVISTAの2007で試し、会社は7(32ビット)の2013です。 もう少し負担が少なくなるようなやり方があればと思っています。 もう少し、いいやり方があればお手数ですが、ご教授ください。 よろしくお願いいたします。 Sub 表の空白行は上に詰める() Dim i As Integer, x As Integer, y As Integer, CSUM As Integer Dim flag As Boolean Application.ScreenUpdating = False flag = 0 '1回だけの処理で使うフラグ For x = 22 To 4 Step -1 '23行→4行まで処理をします。 CSUM = 0 '列の文字数を数える変数CSUMを用意し、初期値0とします。 For y = 4 To 11 'D列→K列まで処理をします。 CSUM = CSUM + Len(Cells(x, y)) 'CSUMにセル(x,y)の文字数を足します。 Next '列処理繰り返し If CSUM = 0 Then Range(Cells(x + 1, 4), Cells(23, 11)).Copy '空白行の1行下から23行目までをコピー Cells(x, 4).PasteSpecial '空白行の1列目のセルを基点として貼り付け If flag = 0 Then '23行目の値クリア処理 1回だけの処理 Cells(23, 5) = 1 '23行目がすっからかんのときエラーになるので、暫定入力 Range(Cells(23, 4), Cells(23, 11)).SpecialCells(xlCellTypeConstants).ClearContents End If '1回だけの処理 ここまで flag = 1 '1回だけの処理させないためフラグ値変更 End If Application.CutCopyMode = False Next '行処理繰り返し End Sub

  • 行削除のマクロ

    B列~F列にデータが入っていてB列の最終行の下セルを選択しクリップボードのデータを貼り付けた後、貼り付けたデータの最初の3行を削除するマクロを作っています。 Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub これでB列の最終行の下にデータを貼り付けることまで出来たのですが貼り付けた最初の3行の削除の仕方がわかりません。 いい方法があれば教えていただけないでしょうか。  例えばB列の10行目まで既に入力されていた場合、11行目からクリップボードのデータを貼り付け(ここまでは上のプログラムで出来ました。)、11行目から13行目を削除したいのですがどうしたらいいでしょうか?

  • Spread.NETの行削除について

    VB.NETでSpread.NETを用いて開発しているのですが、 行削除のロジックが分かりません。 やりたい事を詳しく説明しますと、空白セルがある 行をコマンドボタンを押下した際に削除したいのです。 仮に、行が3行あると想定し2行目が上記の削除対象の行 とした場合、コマンドボタンを押下した際に削除するには どういうロジックを記述したらいいのでしょうか? 又、削除した際に1行目と3行目の間に削除した2行目の データが空セルとして残ってしまうようならば、 3行目のデータを2行目に上げたい(Excelの行削除イメージ) のですが、どのようなロジックを記述すればいいでしょうか? 開発中でその部分がわからず困ってます。 どなたか助けて頂けないでしょうか?宜しくお願いします。

  • 削除して空白になった行を下から詰めたい

    A行には項目の名前があり、A列には番号が上から1,2,3・・と振られています。 そして、B2からR999までにはそれぞれデータが入っています。 このとき、任意のR列のセルを選択したまま、マクロを実行すれば、 任意の行のB列からR行が削除されて、下から上に詰めるように(空白にならないように) するマクロを作りたいです。(A行に割り振っている番号を消してしまうと 連番が崩れるので、B列からR列までを詰めていくような感じです) 例: 今、R11のセルを選択しています。希望のマクロを実行すると、C11~R11が削除されて    C12以降のデータが丁度上に移行するような感じです。 どのようなコードを作れば良いのか、お力をかしていただければ幸いです(/_;)

専門家に質問してみよう