エクセルVBで特定のセルのデータを削除する方法

このQ&Aのポイント
  • エクセルで特定のセルに特定の入力があった場合に、特定のデータを削除する方法を教えてください。
  • エクセルのバージョンは2010で、VBのバージョンは7.0です。例えば、A1セルに「1」と入力した際に、C1からG1までのデータを削除する方法を教えてください。
  • 既に試した方法として、If Range("A1") = "1" Then Range("C1:G1").Clearと記述しましたが、うまくいきませんでした。
回答を見る
  • ベストアンサー

エクセルVBで特定のセルのデータを削除する方法

はじめて質問させて頂きます。 エクセルで、特定のセルに特定の入力があった場合に、特定のデータを削除する方法を教えてください。 エクセルのバージョンは、2010です。 VBのバージョンは、7.0です。 例えば、 A1セルに、 1 と入力した際に、C1からG1までのデータを削除する。 A2セルに、 1 と入力した際に、C2からG2までのデータを削除する。                     ・                     ・                     ・ A10セルに、 1 と入力した際に、C10からG10までのデータを削除する。 If Range("A1") = "1" Then Range("C1:G1").Clear End If と、やってみましたが、できませんでした。 宜しくお願い致します。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

>A1セルに、 1 と入力した際に 入力があった際に実行したかったのではないのでしょうか? 計算結果はA1セルに入力とはいえません。 どこで入力があってもその行のA列の値で判断したい場合は以下のような感じです。 Private Sub Worksheet_Change(ByVal Target As Range) If Range("A" & Target.Row).Value = 1 Then Range("C1:G1").Offset(Target.Row - 1).Clear End If End Sub

ash_asahi
質問者

お礼

ご親切な説明頂きありがとうございます。 入力するのと計算結果では変わるんですね 勉強になりました。

その他の回答 (1)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

>A1セルに、 1 と入力した際に セルに入力したタイミングで実行したいのであれば、Changeイベントになります。 そのシートの見出しで右クリックコード表示で以下を記述します。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Target.Value = 1 Then Range("C1:G1").Offset(Target.Row - 1).Clear End If End If End Sub

ash_asahi
質問者

補足

ありがとうございます。 A1の計算結果が、1 の場合はできないのでしょうか? 宜しくお願い致します。

関連するQ&A

  • ExcelのVBで、Rangeの範囲に任意のセル値を使うには

    VB初心者で行き詰っております。 前任者の作成したVBコードで、特定のセルの入力をテンキーで入力できるようにしています。 VBのコードについては、下記の通りとなっております。 Private Sub Worksheet_Change(ByVal Target As Range) Dim crng As Range Dim ttarget As Range Application.EnableEvents = False Set ttarget = Application.Intersect(Target, Range("C6:AG35")) If Not ttarget Is Nothing Then ttarget = Application.VLookup(ttarget, Worksheets("入力").Range("A1:B10"), 2,False) For Each crng In ttarget If IsError(crng) Then crng.Value = "" End If Next End If Application.EnableEvents = True End Sub ここで、シート内の範囲が変更となる(対象となる行が増減される)ことが発生します。 Set ttarget = Application.Intersect(Target, Range("C6:AG35")) ※この部分がRange("C6:AG37")や、Range("C6:AG33")などに変更となるということです。 その都度、VBの変更をかけると可能なのですが、より効率的にするため、入力という名前のシートに ある空きセルをうまく活用したいと考えております。 Range("C6:AG35")の部分で、任意のセルを参照する変数を利用するには、 どのように記述したらよろしいでしょうか? また、別法として、常に行数をカウントできる方法でも可能なのかもしれません。 最初の行に値するセルがC6から始まり、最終行よりも下は空白セルとなります。 とすれば、行数をカウントして変数に組み込むことも一つなのかもしれませんが、技術がないため、 思いつくだけにとどまっております。 アドバイスをいただければと思います。よろしくお願いします。

  • エクセル2003 特定のセルがブランクの場合

    会社でエクセル2003を使っています。 縦にデータを入力する表を作りました。 (1)氏名 (2)〒 (3)住所 (4)電話番号 (5)生年月日 (6)性別・・・など20項目を入力します。 入力完了後、別シートにデータを転記してそちらの別シートを印刷するというマクロを作りました。 例えば、その中で入力を絶対してほしい項目がありまして、それを忘れていたらメッセージボックスで「○○が未入力です」とお知らせしたいと思ってます。 いろんなサイトで調べてみたのですが…うまくいかなくて… 例文に従って作ってみたのが Sub 円楕円4_Click() Dim Lesson16 As Range Dim 会員名簿 As Worksheet If 会員名簿.Range("A8") = "" Then MsgBox "氏名が記入されていません。" 会員名簿.Range("A8").Select Exit Sub ElseIf 会員名簿.Range("A9") = "" Then MsgBox "住所が記入されていません。" 会員名簿.Range("A9").Select Exit Sub ElseIf 会員名簿.Range("A10") = "" Then MsgBox "年齢が記入されていません。 " 会員名簿.Range("A10").Select Exit Sub ElseIf 会員名簿.Range("A15") = "" Then MsgBox "生年月日が記入されていません。" 会員名簿.Range("A15").Select Exit Sub ThisWorkbook.SaveAs Lesson16 End Sub     です。 家で作ったサンプルなので、セル番号もちょっと???なのですがお許しください。 入力するデータの全てが必須入力項目ではなくて、20項目のうち7項目が必須項目と考えています。 この項目が未入力であれば「未入力ですよ」とお知らせしたいのです。 また、上の例文のセル番号は単独ですが、会社のファイルのセルは結合しています。 (たとえばA8:C8、A15:G15)と行によって結合範囲も違います。 ど素人の質問で、わかりにくいとは思いますが なにとぞ、アドバイスいただきますようよろしくお願いします。

  • Excel 特定セルのデータを一括で消去させたい

    こんにちは。 どなたか教えていただけませんか? 車両別に毎日の日報データを入力するシートがあるのですが、 入力作業をするのがExcel初心者の人なので、関数が入っているセルを、 上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。 1ヶ月ごとに入力したデータを消去し、新たなデータを入力していくのですが、 ロックされていないセルのデータだけを一括で消去出来るマクロがないかと探しています。 過去ログで Sub Cellsdel() Dim c As Range For Each c In Sheets("Sheet1").Range("A5:D10") If c.Locked = False Then c.ClearContents 'c.Clear '書式も含めて、全て消すならこれ一行 End If Next End Sub というマクロを見つけたのでカスタマイズして試してみましたが、 実行時エラー1004 結合されたセルの一部を変更することは出来ません となってしまいました。 入力するシートはC4:Z100までが1台分、以下、Z1200まで12台分の車両別に分かれていて、 入力するセルは飛び飛びになっています。 この説明では不足していると思いますが、補足をいたしますので、 どなたかご教授頂けないでしょうか? マクロはまだ初心者で色々と勉強している最中です。 よろしくお願いいたします。

  • Excelで同一セル内に入力されているデータを他のセルに分割したい

    http://okwave.jp/qa4369634.html?ans_count_asc=20 で質問をして、何度かやりとりをさせていただいて エクセルで同一セル内に、セル内改行で1~6列ほどのデータが入力されています。 縦にデータが入力されていて、それぞれのセルにセル内改行を含み、データが入力されています。 それぞれのセル内のデータを… 例えば、A1セル内に5行入力されていたら、A2セルから入力されている行数分(ここでいうと5行)挿入し、それぞれにデータを分割して入力させたい。 かつ、B・Cセルは増えたセルにそれぞれのデータをコピーしたいと言ったら、 Sub Macro1() Dim idx, cnt As Integer Dim wkStr() As String Dim rng As Range   ActiveSheet.Copy after:=ActiveSheet   For idx = Range("A65536").End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, "A"), Chr(10)) > 0 Then       wkStr = Split(Cells(idx, "A").Value, Chr(10))       Set rng = Cells(idx, "B")       For cnt = UBound(wkStr) To 0 Step -1         Cells(idx, "A").Value = wkStr(cnt)         Cells(idx, "B").Value = rng.Value         Cells(idx, "C").Value = rng.Offset(0, 1).Value         If cnt > 0 Then           Cells(idx, "A").Resize(1, 3).Insert shift:=xlDown         End If       Next cnt     End If   Next idx End Sub といったマクロのご回答をいただきました。 これを元に、 ・データが入っているセルをA列→B列に変更 ・A列のデータはセルが増えた分だけ増やしたい ・A1に対応するデータがC1・D1に入っていた場合、対応するデータは残したまま、B列が増えただけ、列を増やしたい と変更したいのですが…。 すいませんが、宜しくお願い致します。

  • 特定のセルのカーソル移動

    こんばんは。教えてください。 入力可能なセルが2個だけのエクセルの表があります。 C6には「年」、E6「日付」が入ります。 それ以外のセルに触ると「ここは入力できません」と 表示が出て、C6にカーソルが戻ります。 VBにて作成してあります。 実は、この表は年配のパソコンがほとんど分からない方が 使う表で、保護をかけた時のエラーの長い文章が出ると パソコンが壊れたと思うらしく、わざと、保護はかけずに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.Intersect(Target, Range("A1:IV5,A6,B6,E6,H6:IV6,A7:IV65536")) Is Nothing Then Else MsgBox "「年」と「月」以外の欄には入力できません" Range("C6").Select End Sub と入れて、簡単なメッセージでエラーを伝えるのみで シートの保護はしておりません。 これに追加して、記載することで、 C6のセルに入力後、「enter」を押すとE6にカーソルが移動 E6のセルに入力後、「enter」を押すとC6にカーソルが移動 が出来るようにしたいのです。 つまり、C6に入力したらE6に、E6に入力したらC6にカーソルが 「入力できるセル」だけを行き来したいのです。 どなたか教えてください。 宜しくお願いいたします。

  • Excel 2000にて特定のシート(シート名 1~30)セル保護をし

    Excel 2000にて特定のシート(シート名 1~30)セル保護をしていないデータ(結合セルを含む)を一括削除を行いたいのですが、サイトで見つけた物を使用してみたのですが、うまくいきませんでした。 よろしくお願いします。 Sub test2() ? 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 シートは40枚程あるのですが、削除したいのはシート1~30迄のデータです。 マクロのレベルは初級レベルです。 よろしくお願いします。

  • VBからExcelのデータを並べ替えしたい

    VB2008を使用しています。 VBからExcelのデータを並べ替えしたいのですが、どうやればいいのかわかりません。 VBからExcelを立ち上げ、シートおよびセルを参照するところまではできています。 下記を実行するとA列とD列が入れ替わっているだけです。 k_syain_Sheet.Range("A1:D10000").Sort(k_syain_Sheet.Range("A2"), Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending, _ k_syain_Sheet.Range("D2"), , Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending, _ k_syain_Sheet.Range("B2"), Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending) やりたいことは、Excel上のA1~D10000にデータが入っており、A1~D1はタイトル行です。 これから、最優先されるキー「A1」 2番目に優先されるキー「D1」 3番目に優先されるキー「B1」(それぞれ昇順)として並べ替えをしたいのです。 よろしくお願いします。

  • エクセル2000マクロで行を削除したいのですが

    エクセル2000で、社員台帳から特定の人物だけ削除しようと思いマクロを 組んだのですが、どうもうまくいきません。 社員には全員00から99の2桁のコードがついています。(列Aにあります) 2桁のコードが00の人物だけ削除したいのですが。 次のようなマクロを組んだのですが、どこがおかしいのでしょうか? とりあえず、20行程度処理しようと思います。 Range("A2").Select For Each セル In Range("A2:A20") If セル = "00" Then Selection.EntireRow.Delete Next

  • Excel 特定セルのデータを一括消去

    こんにちは。 以前同じ質問をさせていただいたのですが、 しばらくネット環境から離れていたため、再度質問下さい。 車両別に毎日の日報データを入力するシートがあるのですが、 入力作業をするのがExcel初心者の人なので、関数が入っているセルを、 上書き・消去しないよう保護をかけて入力可能なシートのみ選択・入力できるようにしてあります。 1ヶ月ごとに入力したデータを消去し、新たなデータを入力していくのですが、 ロックされていないセルのデータだけを一括で消去出来るマクロがないかと探していましたが、過去ログで、 Sub Cellsdel() Dim c As Range For Each c In Sheets("Sheet1").Range("A5:D10") If c.Locked = False Then c.ClearContents 'c.Clear '書式も含めて、全て消すならこれ一行 End If Next End Sub というマクロを見つけたのでカスタマイズして試してみましたが、 実行時エラー1004 結合されたセルの一部を変更することは出来ません となってしまいました。 以前の質問させて頂いたときに、以下の変更箇所を教えていただいたので、 c.ClearContents ↓ c = "" こちらを試してみたのですが、計算式が多いのと、別シートへ反映させているためか、 ループ状態になってしまい、いくら待っても処理が終わってくれません。 再計算に時間がかかっているのでしょうか? こういった場合は、マクロを組みなおしたほうがいいのでしょうか? 入力するシートはC4:Z100までが1台分、以下、Z1200まで12台分の車両別に分かれていて、 入力するセルは飛び飛びになっています。 この説明では不足していると思いますが、補足をいたしますので、 どなたかご教授頂けないでしょうか? マクロはまだ初心者で色々と勉強している最中です。 よろしくお願いいたします。

  • ExcelデータをVB.NETに取り込みたいのですが

    現在ExcelデータをVB.NETに取り込もうとしています。ただ単純に取り込む方法では出来ないと思われ、是非皆さんに知恵を貸して頂きたいと思います。 セルA1~G1、A2~G2、A3~G3のセル位置をそれぞれ座標(1,1)~(1.7)、(2.1)~(2,7)、(3,1~3,7)とみなし、そのセルの数値を(i、j)の変数を用いて配列的に取り込むにはどうすればよろしいでしょうか? 例えばA1の数値が5、B1の数値が7、A2の数値が3だった場合、VB内では(1,1)=5、(1,2)=7、(2,1)=3というようにExcelデータを取り込みたいのです。この場合はデータ数が少ないので手動でVBにデータを入力すればよいのですが、実際はデータ量が多く、なんとか配列を用いて処理したいと思っています。 よろしくお願いいたします。 説明が足りない場合は遠慮なくお申し付けください。

専門家に質問してみよう