- ベストアンサー
エクセルマクロで範囲内の数字を最初の数字を残して削除
A列B列に10個のセルでできた範囲が縦に並んでいます。 最初の範囲はA1からB10、次の範囲はA11からB20・・といった具合です。 その中に、数字が順不同で複数個入力されています。空白のセルもあります。 この範囲をそれぞれA1→B1→A2→B2→・・・・→・・・→A10→B10 という順にセルを調べて、最初に入力されている数字だけを残して、残りの数字を消去したいのです。 最初の範囲が処理できたら、下の範囲に移って同じことを繰り返します。 この10個のセルの範囲が縦に数百個並んでいるので、できればマクロを作って処理したいと思っています。 条件分岐を使用するととても複雑になりそうです。 簡便な方法があれば教えてください。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどうでしょう? 範囲内の20個のセルが全部空白なら終了します。 Sub test01() Set myRng = Range("A1:B10") '最初の範囲設定 Do While Application.CountA(myRng) <> 0 '範囲内がすべて空白になるまで繰り返す For i = 1 To 20 '一番目から順に20番目まで If myRng.Cells(i).Value <> "" And IsNumeric(myRng.Cells(i).Value) Then '数値を発見したら For n = i + 1 To 20 'その一つ先から20番目までを myRng.Cells(n).ClearContents 'クリア Next n Exit For 'ForNextを抜ける End If Next i Set myRng = myRng.Offset(10) '範囲を10行下げる Loop '繰り返す End Sub
その他の回答 (1)
- kenpon24
- ベストアンサー率64% (66/102)
Sub test() Dim i As Long Dim j As Integer Dim myRange As Range i = 1 Application.ScreenUpdating = False '行の10分の1の数だけ繰り返す For j = 1 To (Range("A65536").End(xlUp).Row / 10) 'iから10行2列の範囲繰り返す For Each myRange In Range(Cells(i, 1), Cells(i + 9, 2)) '空白を無視 If myRange <> "" Then '1文字取り出す myRange = Left(myRange, 1) End If Next '10足す i = i + 10 Next j Application.ScreenUpdating = True End Sub
お礼
ありがとうございました。とても参考になりました。
お礼
ありがとうございます。 いろいろな考え方があってとても勉強になります。