• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロFor Eachを1回で処理したい)

エクセルマクロFor Eachを1回で処理したい

このQ&Aのポイント
  • エクセル2013で、For Each を1回で処理する方法について教えてください。
  • 現在、For Each が2回回ってしまい、処理時間が長くなっています。if文を使用してandでつなげる方法を試しましたが、うまく機能しませんでした。
  • For Each を1回で処理するためには、どのような方法を取ればよいでしょうか。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

Sub 出荷済削除() Dim 対象セル As Range Dim 対象色 As Long Dim 対象色2 As Long Dim 最終行 Dim 最終列 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 対象色 = Range("B8").Interior.Color 'セルB8の色を基準色とする 対象色2 = Range("A8").Interior.Color 'セルA8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Interior.Color = 対象色 or 対象セル.Interior.Color = 対象色2 Then 対象セル.ClearContents '基準色「1または2と同じ」色のセルの値をクリアする Next 対象セル Application.ScreenUpdating = True '画面切替停止解除 End Sub

gx9wx
質問者

お礼

申しあわけありません。 確かにorでした。 ありがとうございます。

その他の回答 (2)

回答No.3

Option Explicit Sub 出荷済削除() Dim 対象セル As Range Dim 対象色 As Long Dim 対象色2 As Long Dim 最終行 As Long Dim 最終列 As Long Application.ScreenUpdating = False '画面切替停止 'For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) ' If 対象セル.Interior.Color = 対象色 Then '対象セル.ClearContents '基準色と同じ色のセルの値をクリアする 'endif 'Next 対象セル 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 対象色 = Range("B8").Interior.Color 'セルB8の色を基準色とする 対象色2 = Range("A8").Interior.Color 'セルB8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) Debug.Print 対象セル.Row, 対象セル.Column, 対象セル.Interior.Color, 対象色, 対象色2 If (対象セル.Interior.Color = 対象色) Or (対象セル.Interior.Color = 対象色2) Then 対象セル.ClearContents '基準色と同じ色のセルの値をクリアする End If Next 対象セル Application.ScreenUpdating = True '画面切替停止解除 End Sub

gx9wx
質問者

お礼

If (対象セル.Interior.Color = 対象色) Or (対象セル.Interior.Color = 対象色2) Then 対象セル.ClearContents 前の方の回答では(  )でくくられていませんが それでも動作しました。 (  )でくくる、くくらないが いまいちわかっておりません。 ありがとうございました。

  • kkkkkm
  • ベストアンサー率66% (1718/2588)
回答No.2

and ではなくて or ではないでしょうか。 対象色 = Range("B8").Interior.Color 'セルB8の色を基準色とする 対象色2 = Range("A8").Interior.Color 'セルB8の色を基準色とする For Each 対象セル In Range(Cells(10, 17), Cells(最終行, 最終列)) If 対象セル.Interior.Color = 対象色 or 対象セル.Interior.Color = 対象色2 Then 対象セル.ClearContents '基準色と同じ色のセルの値をクリアする Next 対象セル

gx9wx
質問者

お礼

申しあわけありません。 確かにorでした。 ありがとうございます。

関連するQ&A

専門家に質問してみよう