Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1682 / 13646 ツリー ←次へ | 前へ→

【72654】ある行以下を削除 まこと 12/8/30(木) 23:49 質問[未読]
【72655】Re:ある行以下を削除 kanabun 12/8/31(金) 0:06 発言[未読]
【72656】Re:ある行以下を削除 ドカ 12/8/31(金) 8:21 回答[未読]
【72675】Re:ある行以下を削除 まこと 12/9/2(日) 13:42 お礼[未読]

【72654】ある行以下を削除
質問  まこと  - 12/8/30(木) 23:49 -

引用なし
パスワード
   皆様のお知恵を貸してください。EXCEL のVerは2003です。

いまBとC列に以下のように

  B   C
1 山口  20
2 斉藤  35
3 山田  59
4 林   66
5 仰木  45
6 内田  33
   ・   ・
  ・   ・
  ・   ・
と名字と数値が入力されているとします。
ここでたとえばB列の林が現れた行を含む以降の行をデータの終わりの行まで
すべて削除したいのです。(できればVBAで)
ただし林は上の表では4行目に現れていますが、いつも4行目とは限りませんし、
入力している行も変動します。よろしくお願いいたします。

【72655】Re:ある行以下を削除
発言  kanabun  - 12/8/31(金) 0:06 -

引用なし
パスワード
   ▼まこと さん:

>ここでたとえばB列の林が現れた行を含む以降の行をデータの終わりの行まで
>すべて削除したいのです。(できればVBAで)

ワークシート関数のMatchをVBAで使ってみました。

Sub Try1()
  Dim r As Range
  Dim m

  'B列データ範囲
  Set r = Range("B1", Cells(Rows.Count, 2).End(xlUp))
  'このなかにある「林」を見つける
  m = Application.Match("林", r, 0)
  If IsNumeric(m) Then    'Matchは見つかると相対行番号を返す
     'その行から最終行までを行削除する
    Range(r.Item(m), r.Item(r.Count)).EntireRow.Delete
  End If
  
End Sub

【72656】Re:ある行以下を削除
回答  ドカ  - 12/8/31(金) 8:21 -

引用なし
パスワード
   ▼まこと さんへ
一応作ってみました。
私のやり方は、セルを一つ一つ調べる方法です。
処理時間は掛かりますが、これを知っておくと、セルを上下、左右に動きながら、色々な処理が出来ると思います。


Sub test()

'B列でデータがある最終行を求める
r_end = Cells(Rows.Count, 2).End(xlUp).Row

'B列セルの上から値がある最終行までの間で”林”をさがす
For i = 1 To r_end
  '林が見つかったら、その行番号からデータがある最終行までを削除
  If Cells(i, 2) = "林" Then
    r = Cells(i, 2).Row
    Range(Rows(r), Rows(r_end)).Delete '削除
    Exit Sub '最初の林が見つかったら処理をやめる
  End If
Next

End Sub

【72675】Re:ある行以下を削除
お礼  まこと  - 12/9/2(日) 13:42 -

引用なし
パスワード
   kanabunさん、ドカさん、ありがとうございました。
お二人のコードを参考にして、望み通りの動作をさせることが
できました。お二人には本当にお世話になりました。
重ね重ね厚くお礼を申し上げます。

1682 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free