• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAで表から行の削除)

エクセルVBAで表から行の削除

このQ&Aのポイント
  • エクセルVBAを使用して、表から行を削除する方法について教えてください。
  • 表は名前でソートされており、特定の列の比率をチェックして、100でない行を削除したいです。
  • 同じ名前が複数行に分かれている場合、最大の比率の行を残し、他の行を削除する方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

こんばんは >表はB列の名前でソートされています。 D列もソートすれば楽になると思いますが Sub Test2()   Dim c As Range   Dim LastRow As Long, i As Long   Dim Tot As Long   LastRow = Cells(Rows.Count, "D").End(xlUp).Row   Range("A1:D" & LastRow).Sort _   Key1:=Range("B1"), Order1:=xlAscending, _   Key2:=Range("D1"), Order2:=xlDescending, Header:=xlYes   For i = LastRow To 2 Step -1      If Tot + Cells(i, "D").Value < 100 Then       Tot = Tot + Cells(i, "D").Value       Cells(i, "D").EntireRow.Delete     Else       Tot = 0     End If   Next End Sub

emaxemax
質問者

お礼

watabe007さん、さっそくのご回答ありがとうございます。 なあるほど~! 比率も降順で並べ替えしてしまえば下から順に合計100未満を片っ端から消していけばいいわけですね! 勉強になりました。 ありがとうございます。

その他の回答 (1)

  • TAKA_R
  • ベストアンサー率32% (26/79)
回答No.2

B列が複数あるとき、D列の中の最高値を残す Sub test01() Dim k As Long, g As Long, l As Long, n As Long Dim brng As Range Set brng = Range(Cells(2, 2), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2)) k = 1 Do k = k + 1 g = Application.WorksheetFunction.CountIf(brng, Range("b" & k).Value) If Not g = 1 Then l = Application.WorksheetFunction.Max(Range(Cells(k, 4), Cells(k + g - 1, 4))) n = Application.WorksheetFunction.Match(l, Range(Cells(k, 4), Cells(k + g - 1, 4)), 0) - 1 Rows(k + n).Copy Range("a" & k) Range(Rows(k + 1), Rows(k + g - 1)).Delete End If Loop Until Range("b" & k + 1) = "" End Sub ですが、NO1さんが言っているように「B列昇順、D列降順」で並び替えておくと、 こんなに簡単なコードになります。 Sub test02() Dim k As Long, g As Long k = 1 Do k = k + 1 g = Application.WorksheetFunction.CountIf(Range(Cells(2, 2), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 2)), Range("b" & k).Value) If Not g = 1 Then Range(Rows(k + 1), Rows(k + g - 1)).Delete Loop Until Range("b" & k + 1) = "" End Sub

emaxemax
質問者

お礼

TAKA_Rさん、ありがとうございます。 とても勉強になりました。

関連するQ&A