Excel VBA質問箱 IV

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

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


5098 / 13644 ツリー ←次へ | 前へ→

【52626】多数Rowを削除する方法 Yumi 07/11/21(水) 20:50 質問[未読]
【52627】Re:多数Rowを削除する方法 マクロマン 07/11/21(水) 21:08 発言[未読]
【52628】Re:多数Rowを削除する方法 マクロマン 07/11/21(水) 21:12 発言[未読]
【52629】Re:多数Rowを削除する方法 かみちゃん 07/11/21(水) 21:15 発言[未読]
【52633】Re:多数Rowを削除する方法 りん 07/11/22(木) 6:37 発言[未読]

【52626】多数Rowを削除する方法
質問  Yumi  - 07/11/21(水) 20:50 -

引用なし
パスワード
   多数行のデータを消す場合、
  Rows(11).ClearContents
  Rows(18).ClearContents
  Rows(22).ClearContents
  Rows(26).ClearContents
現在このようなコードを使っています。
行の間隔が規則性が無いのですが、もっとシンプルなコードを
作成できないかと…思案中です。
Arrayが使えないかと思いましたがエラーが出ます。
 Dim MySum
  MySum = Array("11", "18", "22", "26")
  Rows(MySum).ClearContents
こんな使い方は出来ないのですね。
何か良い方法がありましたら、教えてください。

【52627】Re:多数Rowを削除する方法
発言  マクロマン  - 07/11/21(水) 21:08 -

引用なし
パスワード
   無理矢理な方法です。
配列に格納された文字数が256以上(だったかな)
になったらエラーになります。

Dim MySum As Variant
Dim i As Integer
MySum = Array("11", "18", "22", "26")
For i = 0 To UBound(MySum)
 MySum(i) = "A" & MySum(i)
Next i
Range(Join(MySum, ",")).EntireRow.ClearContents

下の行からループで処理した方がいいかもしれません。

【52628】Re:多数Rowを削除する方法
発言  マクロマン  - 07/11/21(水) 21:12 -

引用なし
パスワード
   配列とループを使った例です。

Dim MySum As Variant
Dim i As Integer
MySum = Array("11", "18", "22", "26")
For i = UBound(MySum) To 0 Step -1
 Rows(MySum(i)).ClearContents
Next i

配列に格納された行番号が昇順、あるいは降順
になっていない場合は、何らかの方法でソート
しておく必要があります。

【52629】Re:多数Rowを削除する方法
発言  かみちゃん  - 07/11/21(水) 21:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

マクロマンさんからもコメントがついていますが、私も考えていましたので、
コメントさせていただきます。

>多数行のデータを消す場合、
>  Rows(11).ClearContents
>  Rows(18).ClearContents
>  Rows(22).ClearContents
>  Rows(26).ClearContents
>現在このようなコードを使っています。
>行の間隔が規則性が無いのですが、もっとシンプルなコードを
>作成できないかと…思案中です。

以下のような感じではいかがでしょうか?
 Union(Rows(11), Rows(18), Rows(22), Rows(26)).ClearContents

また、配列を使うなら、以下のような感じでもできると思います。
Sub Sample2()
 Dim i As Integer
 Dim MySum
 Dim rngClear As Range
 MySum = Array("11", "18", "22", "26")

 For i = 0 To UBound(MySum)
  If rngClear Is Nothing Then
   Set rngClear = Rows(MySum(i))
  Else
   Set rngClear = Union(rngClear, Rows(MySum(i)))
  End If
 Next
 If Not rngClear Is Nothing Then
  rngClear.ClearContents
 End If
End Sub

【52633】Re:多数Rowを削除する方法
発言  りん E-MAIL  - 07/11/22(木) 6:37 -

引用なし
パスワード
   Yumi さん、おはようございます。

>Arrayが使えないかと思いましたがエラーが出ます。
> Dim MySum
>  MySum = Array("11", "18", "22", "26")
>  Rows(MySum).ClearContents

引数を、Arrayじゃなくて文字列にして、まとめて渡す方法です。

その1
  Dim MySum As String
  MySum = "11:11,18:18,22:22,26:26"
  Range(MySum).ClearContents

これだと、行範囲の指定がくどいので。
その2
  Dim MySum As String
  MySum = "A11,A18,A22,A26"
  Range(MySum).EntireRow.ClearContents

こんな方法もあります。

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