• 締切済み

指定した背景色のセルの値を削除するVBAを作りたい

misatoannaの回答

回答No.4

色は特定しません。選択されている1セルと同じ塗りつぶし色のセルを処理します。 ------ Sub Test() Dim col As Long, rng As Range col = ActiveCell.Interior.Color For Each rng In ActiveSheet.UsedRange If rng.Interior.Color = col And rng.Value <> "" Then _ rng.ClearContents Next End Sub ------- たとえば、ある色で塗りつぶされている1セルを選択した状態で実行すると、選択セルと同じ色で塗りつぶされたセルにデータがあれば、それを削除します。

関連するQ&A

  • 結合セルを含むロックしていないセルの値の削除を複数シートで行いたい

    エクセルのマクロ(VBA)に関して、ご質問いたします。 私のレベルは入門編で、いろんなサイトや本を見て、そのまま利用しているくらいのものです。 次のコードは、他人様のサイトで見つけたものです。 Sub 結合セルを含むロックしていないセルの値の削除() Dim c As Range With ActiveSheet .Unprotect For Each c In .UsedRange If Not (c.Locked) Then c.MergeArea.ClearContents Next .Protect UserInterfaceOnly:=True End With End Sub この処理を複数シートに行いたいので、次のコードを(これも他人様のサイトからお借りしています)、上のコードの「Dim c As Range」の後に追加しましたが、アクティブシートは処理されましたが、全部のシートとはいきませんでした。 Dim Sh As Object For Each Sh In Sheets 単純に足しただけでは、だめなのでしょうか。 参考になるかどうかわかりませんが、シートの中には、値を削除しなくてもいいものも含まれています。 シートが全部で40枚弱あるので、全部のシートをチェックして、ロックされていないセル(結合セル含む)に値が入っていたら、値を削除する処理を、マクロ(VBA)で出来たらいいなっと思っております。 教えていただけますでしょうか。 どうぞよろしくお願いいたします。

  • VBA セルの削除

    開いているブック全てに対して、セルを削除するマクロを組んだのですが、うまく動作しません。 1. ブックのsheet1にてセルB2~B100の中で、値があるセルを特定 値の入ったセルがあれば、その値と同じ名前のシートが存在する 例) B2:値 1-A、シート名: 1-A B3:値 2-A、シート名: 2-A ... 2. 特定した値と同じ名前のシートをアクティブにする 3. そのシートにて「セルA1がブランクでない かつ セルB1の値がゼロ」と条件をかける 4. trueであれば、sheet1にて特定したセルへ戻る 5. 特定したセルとその右隣のセルを削除(上シフト) 6. 1.~5.を、sheet1のセルB2以降、値がブランクになるまで繰り返す 次の通り構文を作成、エラーなく実行できるのですが、結果は5.までしか処理されず、他のブックに対しても処理が走っていません。 格納した変数に問題がありそうなのですが、解決できず困っています。 Sub test() Dim WBK As Workbook For Each WBK In Workbooks If WBK.Name <> ThisWorkbook.Name Then WBK.Activate For i = 2 To 100 touroku = WBK.Worksheets("sheet1").Cells(i, 2).Value If WBK.Worksheets("sheet1").Cells(i, 2).Value <> "" Then WBK.Worksheets(touroku).Activate If ActiveSheet.Cells(1, 1) <> "" And ActiveSheet.Cells(2, 1).Value = 0 Then WBK.Worksheets("sheet1").Cells(i, 2).Resize(1, 2).Delete End If End If Next i WBK.Save End If Next WBK End Sub まだVBA初めて1ヶ月ほどで、基礎が理解できてきた程度なのですが、急ぎ完成させたいマクロなのでお力を貸してください。 よろしくお願いいたします。

  • VBAでの背景色分岐後の結合セルの処理について

    VBAで対象範囲の背景色が黒の部分のみ"-"をいれるという処理をしたいのですが、ループがうまく動いておらず最初のセルのみ"-"が入った状態です。 ※対象範囲のセルは3列ずつ結合されています コードは以下になります。VBA初心者のため、初歩的な質問かもしれませんがご回答よろしくお願いいたします。 Private Sub CommandButton1_Click() Dim C As Range Sheets("sheet1").Select T33:BA74 の範囲を1セルずつ繰り返す For Each C In Range("T33:BA74") セルが黒のとき If C.Interior.ColorIndex = 1 Then C.Value = "-" end If '次のセルへ Next End Sub

  • VBA セルに入力されている数値でセルを指定する

    Excel VBA初心者です。 Sheet1のA1セルに10、A2セルに3を入力しています。 この入力したセルの数値を参照して、 Sheet2の「Cells(10,3)」(C10セル)を青(Interior.ColorIndex = 5)に 書式変更したいのですが、「Cells(”Sheet1.A1の値”,”Sheet1.A2の値”)」の 書き方がわかりません。 Excel2010を使用しています。 よろしくお願いします。

  • Excel VBAで結合セルの扱いが失敗します。

    KenKen_SPさんの素晴らしいコードを参考に、特定の色のセルにおいてのみ、テキストを削除するマクロが以下です。このままでは結合セルのあるエクセルシートでエラーになってしまいます。 これを解決できませんでしょうか。よろしくお願いします。 For i = 1 To ThisWorkbook.Worksheets.Count ThisWorkbook.Worksheets(i).Select Dim C As Range For Each C In ActiveSheet.Range("A1:M55") If C.Interior.ColorIndex = 6 Then '6 - YELLOW C.ClearContents End If Next Next

  • VBA 条件付き書式の書式(背景色)のみコピー

    エクセル2016のマクロで、別シートの条件付き書式の書式(背景色)のみコピーしてきたいです。 以下ではうまく動かすことができませんでした。 ws2.Range("A1:D10").DisplayFormat.Interior.ColorIndex = ws1.Range("A1:D10").DisplayFormat.Interior.ColorIndex 範囲の背景色のみコピー&ペーストという動作自体できないのでしょうか? また、for...nextで一セルずつ等他に方法があればお教えいただきたいです。 分かりづらい質問で申し訳ありません。。 質問の趣旨をおわかりいただけるでしょうか? 方法等調べましたがほしい情報が見当たらず、お知恵をお貸しください。 よろしくお願いいたします。

  • VBA どこでもセル選択

    教えて頂いたVBAなのですがもう一つ Sub Macro1() Dim Ws01 As Worksheet Dim Counter As Long, i As Long, j As Long Dim INP As String Set wS = Worksheets("Sheet4") wS.Cells.ClearContents For i = 3 To ActiveSheet.UsedRange.Rows.Count INP = "" For j = Selection(1).Column To Selection(Selection.Count).Column If Cells(i, j) = 1 Then INP = INP & Cells(2, j) & "," End If Next j Counter = Counter + 1 If INP <> "" Then wS.Cells(Counter, "A") = Left(INP, Len(INP) - 1) End If Next i End Sub -------------------------------------------------------------- For i = 3 のところを3としないでどのセル(行)にも対応させたいのですが どうすればいいでしょうか?

  • VBA 結合セルの値を削除

    マクロ超初心者です。 C7~K7が結合されたセルの値を削除したいです。(値はC7に入力されています) Range("C7").MergeArea.ClearContents で実行してみたところ 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と出てきます。 セルの書式設定をみてみると、保護/ロックにチェックが入っておりました。もしかしたらこれが悪さをしているのでしょうか。 分かりにくくて申し訳ありませんが、知恵を貸していただけたら助かります。よろしくお願いいたします。

  • エクセルVBAでLockされてないセルをClearContents

    エクセル2000です。 シートでロックされていないセルだけ中身を削除するマクロを作っています。以下でも一応作動はするのですが、いちいちForNextでまわさずにできないものかと質問させていただきました。 よろしくお願いします。(o。_。)oペコッ Sub クリアテスト() Dim c As Range For Each c In ActiveSheet.UsedRange If c.Locked = False Then c.ClearContents End If Next End Sub

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------