Excelで空白セルに●を入れる方法

このQ&Aのポイント
  • Excelのセル範囲を調べて、空白のセルに●を入れる方法を教えてください。
  • VBAを使用して、Excelのセル範囲の空白セルに●を入力する方法について教えてください。
  • 空白のセルに●を入力するためのVBAの書き方を教えてください。
回答を見る
  • ベストアンサー

空白セルに●を入れたい

Excelのセル範囲(例:としてA1からC10)のセルを調べて、 空白のセルになにかの文字(例:●)を打ち込みたい場合のVBAの書き方を教えてください。 Sub セル埋め() Dim r As Range, i As Range Set r = Range("A1:C10") '範囲指定 If Intersect(r, Target) Is Nothing Then For Each i In r If i.Value = "" Then i.Value = "●" Next i End Sub この書き方にこだわっているわけではないので、もっと簡単なやり方でもけっこうです。

  • ketae
  • お礼率86% (295/343)

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>P列まで●が埋まらず、N列までしか埋まらないのはなぜでしょうか。 確認しました、まったく使われていない領域にはSpecialCellsの効果が無いようですね、なので基本に戻って Sub セル埋め()   Dim r As Range   For Each r In Range("A1:P10")     If r.Value = "" Then r.Value = "●"   Next r End Sub

ketae
質問者

お礼

ばっちりです。 ありがとうございました。 難しく考えていたようです。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

下記のようなのもあります。 Sub test38() Range("a1:c5").Replace what:="", replacement:="●" End Sub Range("a1:c5"≫の部分は適当にかえてください。 使っているのは、Rangeに対する、Replaceメソッドです。

ketae
質問者

お礼

ありがとうございます。これもいいですね。 空セル(入力なし)のシートで試すと、右端列にデータがあるかないか、や どこまでセル選択があるかないかで、●が埋まる範囲に変動が起こるようです。

ketae
質問者

補足

replacementメソッド教えていただき、ありがとうございました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

SpecialCells メソッドを使ってみては 但し、空白セルが無いとエラーになりますので対策が必要ですが On Error Resume Next Range("A1:C1").SpecialCells(xlCellTypeBlanks).Value = "●" On Error GoTo 0

ketae
質問者

お礼

シンプルで良いですね。 範囲を Sub 空白埋め() On Error Resume Next Range("A1:P10").SpecialCells(xlCellTypeBlanks).Value = "●" On Error GoTo 0 End Sub としてみたのですが、P列まで●が埋まらず、 N列までしか埋まらないのはなぜでしょうか。

ketae
質問者

補足

右端の列に何か値があるときとないとき(全部空セル)のときで、●が埋まる右単列に位置変動があるようです。わたしのExcelのバグかも。 ちなみにOffice2013です。

関連するQ&A

  • ExcelVBA 二つのセルに入力された時の判定

    セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub

  • worksheetchangeイベント

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myRng As Range Set myRng = Application.Intersect(Target, Range("A1:D2,A4:D6")) If myRng Is Nothing Then Exit Sub If WorksheetFunction.CountA(myRng) = 0 Then myRng.Value = "-" ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then Range("B1:D1").Value = "-" End If End Sub A1:D2範囲とA4:D6範囲内で、アクティブセルでDELETEキーを押した場合、"-"がセルに挿入されるようにコードを書きました。 さらに、A1セルの値がドロップダウンリストで139.8に変更された場合、B1、C1、D1に"-"を入力するようにしました。 A1セルの値を変更した場合の処理がうまくいかず四苦八苦しています。 ElseIf Intersect(Target, Range("A1")).Value = "139.8" Then ここを、 Range("A1").value = "139.8" Then にしてしまうとA1の値が139.8の状態ではB1、C1、D1へ数値を入力しても"-"となってしまいます。 A1からD1まで連動したリストがリアルタイムで動作するようにコードを書きたいのですが・・・なんとか教えていただけませんでしょうか・・

  • セルの同期を取る

    Book内のシートの一部のセルにおいて、同期を取りたいです。 存在するシート名が、SheetA1,SheetA2,SheetB1,SheetB2,SheetC1,SheetC2の時、 SheetA1とSheetA2、SheetB1とSheetB2、SheetC1とSheetC2が、任意のセル範囲の値を共有したいです。 (SheetA1のセルA1に数字を入れたら、SheetA2のセルA1に同じ数字が入るように) 過去ログから以下のソースを見つけて「ThisWorkbook」に書き込んで使っていますが、 たまにエラーが起こって止まってしまいます。 必ず起こるわけではないのでエラーが起こる条件がいまいちわからないのですが、 起こる瞬間は、セルに数値を入力後、シートを切り替えた時に発生します。 (エラーが起こった時に数値を入力したセルは、同期を取っているセル範囲とは限りません) エラーメッセージは、 実行時エラー'1004': 'Intersect'メソッドは失敗しました:'_Global'オブジェクト です。 「ヘルプ」も見てみようと押してみたのですが、ウィンドウが開くだけで中身は表示されませんでした。 「デバッグ」を実行すると、※印をつけた Set r = Intersect(Target, Range(CellRange)) の行が選択されます。 どういった条件でエラーが発生するのかわかりますでしょうか? Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim r As Range Dim i As Integer Dim ActSheet As String Dim CellRange As String ActSheet = ActiveWorkbook.ActiveSheet.Name '現在開いているシート名を取得 ActSheet = Left(ActSheet, 6) 'シート名の頭から5文字を取得 If ActSheet = "SheetA" Then '現在開いているシートがSheetA*の時に CellRange = "A4:G3004" '同期を取るセルの範囲を指定 ElseIf ActSheet = "SheetB" Then CellRange = "A3:E3003" ElseIf ActSheet = "SheetC" Then CellRange = "A4:F3004" Else Exit Sub End If Application.EnableEvents = False If Target.Areas.Count = 1 Then '変更のあったセルが1つである場合 ※ Set r = Intersect(Target, Range(CellRange)) If Not (r Is Nothing) Then CopyToSheets r, ActSheet End If Else For i = 1 To Target.Areas.Count '変更のあったセルが複数の場合 Set r = Intersect(Target.Areas(i), Range(CellRange)) If Not (r Is Nothing) Then CopyToSheets r, ActSheet End If Next End If Application.EnableEvents = True End Sub Private Sub CopyToSheets(ByVal r As Range, ByVal ActSheet As String) Dim Num As Integer Dim OffSheet As String For Num = 1 To 2 OffSheet = ActSheet & Num Worksheets(OffSheet).Range(r.Address).Value = r.Value Next End Sub

  • VBA A1セルが空白になったら隣のセルも空白に

    いつもお世話になります。 WINDOWS7 EXCELL2010 です。 A1セルに文字列で5桁のID番号を入力するとI4のセルに今日の日付が入るようにマクロを作っています。 このときA1セルをキーボードのBacksPaceでID番号を消してエンターキーを押した時にI4セルも空白にしたいと考えて下記のように作りましたが If Range("A1") = “” Range("$I$4") = "0000/00/00" Else Range("$I$4").ClearContents 上の構文が上手くゆかず困り果てました。 どのようにすればいいか御指導願えませんでしょうか。 参考に Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("I4").Value = Date If Range("A1") = “” Range("$I$4") = "0000/00/00" Else Range("$I$4").ClearContents End Sub

  • マクロ。セルを空白にした時の処理

    セルをDeleteで空白にした時の処理について教えて下さい。 まず現在下記のようなマクロがあります。 Private Sub SubProc1(ByVal Target As Range) Dim str1 As String Dim str2 As String  On Error Resume Next  If Application.Intersect(Target, Range("B18")) Is Nothing Then Exit Sub  If Range("B18") = "" Then Exit Sub  Application.ScreenUpdating = False str1 = "T-POT #" str2 = " G1 G2 MEST計測を行いました。" Range("A7").Value = str1 & Range("B18") & str2 End Sub B18セルに数字や文字も入力するとA7セルにB18セルの入力内容を含めた 文字が表示されるのですが、B18セル内の文字をDeleteで削除しても A7セルは特に反応なしです。 やりたいことはB18セルから文字をDeleteで削除した場合 A7セルからもB18セルの入力内容を削除したいです。( str1、str2だけが残るイメージ) 宜しくお願いします。

  • 連続データのVBAの質問

    お世話になります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Not Intersect(Target, Range("C1,B9:B39")) Is Nothing And Target.Count = 1 Then Application.EnableEvents = False With Target If .Column = 3 Then myNum = WorksheetFunction.Max(Range("B9:B39")) If IsDate(.Value) Then For i = 9 To 39 If Cells(i, "A").Value = "" Then Cells(i, "B").Value = "" Else Cells(i, "B") = myNum + i - 8 End If Next i End If Else i = .Row If .Value = "" Then Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents Else For k = i + 1 To 39 If Cells(k, "A").Value = "" Then Cells(k, "B").Value = "" Else Cells(k, "B") = Cells(k - 1, "B") + 1 End If Next k End If End If End With Application.EnableEvents = True ElseIf Not Intersect(Target, Range("R8:R38")) Is Nothing Then Application.EnableEvents = False Range(Cells(Target.Row, 18), Cells(39, 18)).Value = Target.Value Application.EnableEvents = True End If End Sub これはセルC1に年月を表記させ、そのC1セルの年月を変更した場合B9~B39のセルが自動で連続データの数字を記入し、B9~B39のどこかのセルを空白にすると、そのセル以降も空白になります。 そしてR8~R38は、指定範囲のセルに数字を入力したら、そのセル以降の指定した範囲のセルに同じ数字を自動入力するVBAです。 そこで質問ですが、質問した現在は2013年12月ですが、日本時間の現在の年月以前の年月(今で言うと2013年11月以前)をC1に記入した場合はB9~B39の連続データの数字が切り替わらない様にするには、どうすれば宜しいでしょうか?

  • セル空白時に月を変更した時の累計使用日数VBA

    お世話になります、エクセルVBA初心者の者です。 '******************************************************************************* ' セル変更した時のイベント '******************************************************************************* Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.EnableEvents = False With Target If .Column = 3 Then myNum = WorksheetFunction.Max(Range("B9:B39")) myDate = Range("C1").Value Range("A9:A39").ClearContents If IsDate(.Value) Then ' ----------A列に日にちを入力---------- For i = 1 To 31 If Month(myDate + i - 1) = Month(.Value) Then Cells(i + 8, "A").Value = Day(myDate + i - 1) Else Cells(i + 8, "A").Value = "" End If Next i ' ----------B列の空白条件---------- If Range("B39").Value = "" Or Range("B38").Value = "" Or Range("B37").Value = "" Or Range("B36").Value = "" Then Range("B9:B39").ClearContents Application.EnableEvents = True End End If ' ----------B列に連続値の入力---------- For i = 9 To 39 If Cells(i, "A").Value = "" Then Cells(i, "B").Value = "" Else Cells(i, "B") = myNum + i - 8 End If Next i End If Else End With Application.EnableEvents = True End Sub 内容はC1には年月(2013年12月)を表示させています。 そして、B9~B39には累計使用日数を表示するVBAを組んでいます。 B9~B39間に適当な数字を入力すると、連続データの数字が入力されるようになります。 そして、C1セルの日付を変更しても連続データが継続して表示されるVBAです。 B39が空白表示の場合(小月ならB38で2月ならB36かB37)でC1セルの年月を変更した場合、連続データを表示させず空白セルを表示させるVBAを組んだつもりです。 しかし、上手く作動しません。もうお手上げです。どこがおかしいのでしょうか?ご教授宜しくお願いします。

  • VBA Intersectで範囲の記述

    エクセル2000です。 Intersectで範囲の記述で、名前が定義された範囲、myRng と その2列右どなりを指定したいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Union(Range("myRng"), Range("myRng").Offset(, 2))) Is Nothing Then Exit Sub MsgBox Target.Address End Sub のようにUnionを使わなければできないでしょうか? myRngがA1:A10であれば、 If Intersect(Target, Range("A1:A10,C1:C10")) Is Nothing Then Exit Sub と簡単に記述できるのですが。

  • エクセルで特定のセルへの直接入力だけを禁止したいんです。

    過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。

  • 点在するセルを、ダブルクリックで変更したいのです。

    シート上に多数点在するセルを、ダブルクリックで変更したいのです。 下記の通り、数ヶ所のセルだと思い通りにセルが変更されるのですが 30か。。。40個目辺りのセルを追加して行くと突然動かなくなってしまいます。 Range(・・・・・・・) ←この中 物には限界があるのかな?と思いつつ、質問致します。 120セル位で動作させたいのですが、良いお知恵をお貸し下さいませ。 皆様宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1,C1,F1,A3,C3,F3,A6,C6,E6," _ & "A8,C8,E8,A10,C10,F10,A12,C12,F12," _ & "A14,C14,F14,A17,D17,F17,A19,C19,F19")) Is Nothing = False Then Cancel = True If Target.Value = ChrW(10003) Then Target.ClearContents Else Target.Value = ChrW(10003) End If End If End Sub

専門家に質問してみよう