VBAでエクセルに自動入力するマクロを教えてください

このQ&Aのポイント
  • エクセルの特定の列に文字を入力すると、他の列に日付が自動的に入力されるVBAのマクロについて教えてください。
  • ExcelのVBAを使用して、特定の条件下で日付が自動的に入力されるようなマクロを作成したいです。
  • VBAでエクセルにおいて特定の列に入力した内容に応じて、他の列に日付が自動的に入力されるマクロの作成方法を教えてください。
回答を見る
  • ベストアンサー

VBAにお詳しい方!教えてくださいませ。

エクセルで、E列に文字を入力した際にB列に、J列からM列に文字を入力した際にC列に入力した日付を自動的に入力されるようなマクロを教えてください。 自分で探した限りでは Private Sub Worksheet_Change(ByVal Target As Range) Dim r, rng As Range Set rng = Intersect(Target, Columns("E:E"))   If Not rng Is Nothing Then     For Each r In rng       If r.Value = "" Then         r.Offset(, -3).ClearContents       Else         r.Offset(, -3).Value = Date       End If     Next r   End If End Sub までしか出来ませんでした。 しかも複数条件を指定する方法もわかりません・・・・。 ぜひともお詳しい方、ご伝授くださいませ

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("e:e")) Is Nothing Then Set x = Cells(Target.Row, "B") Else If Intersect(Target, Range("J:M")) Is Nothing Then Exit Sub Set x = Cells(Target.Row, "C") End If Debug.Print Target.Address For Each r In Target If r.Value = "" Then x.ClearContents Else x.Value = Date End If Next End Sub

miho-shino
質問者

お礼

ありがとうございました! 上記で、思っていた物ができました! 誠にありがとうございました><

その他の回答 (1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = Range("E:E").Column Then Range("B" & Target.Row) = Date ElseIf Target.Column >= Range("J:J").Column And Target.Column <= Range("M:M").Column Then Range("B" & Target.Row) = Range("C" & Target.Row) End If End Sub こういうことでしょうか? > E列に文字を入力した際にB列に 今日の日付を入れるんですよね。 で .> 列からM列に文字を入力した際にC列に入力した日付 C列の日付ををB列に入れるんですよね。

miho-shino
質問者

補足

ありがとうございます。とても参考になります(^^ 上記試してみましたが、J~M列のどこかに記入した時、反映されませんでした・・・。 今思うと、とてもわかりにくい説明でした。 補足しますと B列→新規登録日 C列→内容更新日 E列→物件名 J~M列→進捗情報 みたいな感じなんです。 物件を始めて登録する時には、かならずE列に入力をするので、E列に入力日(当日)が反映される ようになるとうれしいです。 J~M列はその時々によって変るので、ここに何がし入力された際、Cの列に日付(入力日)が反映されるようにできないかなぁ?と考えているのです。 (C列の日付が入力された際、B列の日付は変わってほしくないのです) もし、関数でも可能であれば、ご伝授よろしくお願い致します。

関連するQ&A

  • VBAの記録を追加したい

    エクセル2002使用です。 VBAで次のコードを使っています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Target = Intersect(Range("C:C"), Target) If Target Is Nothing Then Exit Sub For Each Rng In Target If Rng.Value <> "" Then Rng.Offset(, -2).Value = Now Else ' (*) Rng.Offset(, -2).Value = "" ' (*) End If Next Rng End Sub (C列のセルに何か入力されると、A列の同じ行にその時刻が入る。) 同じシートで、F列に何か入力されるとE列の同じ行にその時刻が入るように書き直したいのですが、どうすればいいのでしょうか? すいませんが、よろしくお願いします。

  • エクセル VBA の質問です。

    A2~A20までのセルに文字を入力した段階で、それぞれB2~B20に入力日時を入れるVBAを以下のように組んでいます。 しかし、同様の条件を同一シートのE2~E20・F2~F20にも入力・自動表示できるようにしなければならなくなり、困っています。 どのように記述を変えればよいのか、教えていただけたらと思います。 宜しく御願いいたします。 Sub Worksheet_change(ByVal Target As Range) Dim Rng As Range Dim c As Range Set Rng = Range("A2:A20") If Intersect(Target,Rng) Is Nothing Then Exit Sub For Each c In Intersect(Target,Rng) If Not IsEmpty(c) Then c.Offset(, 1).Value = Now Else c.Offset(, 1).ClearContents End If Next Rng.Offset(, 1).EntireColumn.AutoFit End Sub 申し訳ありませんが、何卒、宜しく御願いいたします。

  • VBA 範囲選択時エラー

    Private Sub Worksheet_SelectionChangeのVBAでA列B列C列でワンクリックで文字が入力できるように設定致しました。 その後、A列からC列を範囲選択してDeleteするとデバック 「実行時エラー  型が一致しません」と出てしまいます。業務上、そのセルのデータは一気に消したいので困っております。どなたか分かる方よろしくお願い致します。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range, rng_1 As Range, rng_2 As Range Application.EnableEvents = False Set rng_1 = Range("H17:H100") Set rng_2 = Range("I17:I100") Set rng_3 = Range("J17:J100") Set rng_4 = Range("K17:K100") Application.EnableEvents = True Set rng = Intersect(Target, rng_1) If Not rng Is Nothing Then Cancel = True If Target.Value = "" Then Target.Value = "(1)" Else Target.Value = "(1)" End If Else Set rng = Intersect(Target, rng_2) If Not rng Is Nothing Then Cancel = True If Target.Value = "(2)" Then Target.Value = Empty Else Target.Value = "(2)" End If Else Set rng = Intersect(Target, rng_3) If Not rng Is Nothing Then Cancel = True If Target.Value = "(3)" Then Target.Value = Empty Else Target.Value = "(3)" End If Else Set rng = Intersect(Target, rng_4) If Not rng Is Nothing Then Cancel = True If Target.Value = "(4)" Then Target.Value = Empty Else Target.Value = "(4)" End If End If End If End If End If End Sub

  • 複数セル参照で塗りつぶしを変更する

    WIN:XP Off:2003 お願いします。 添付した図は入出金表です。 列Hに数値が入力されると列Eのセルが青く塗りつぶされます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Dim aCell As Range Set Rng = Intersect(Target, Range("H:H")) If Rng Is Nothing Then Exit Sub For Each aCell In Rng If aCell.Value > 0 Then aCell.Offset(0, -3).Interior.ColorIndex = 17 Else aCell.Offset(0, -3).Interior.ColorIndex = xlNone End If Next aCell Set Rng = Nothing End Sub ここまでは出来たのですが、列Iに入力された時に列Eが赤に塗りつぶされるにはどうしたらいいでしょうか? 同じ行のHとIに同時に数値が入る事はありません。 どうかお願い致します。

  • VBAについて

    以下のプログラムは、1年間の価格合計を求めるプログラムです。 これを実行するとうまくいくこともありますが、エラーが起きることもあります。 どうやら下記コードが原因のようなのですが、間違いがわかりません。 Target.Offset(0, 1).Value = run * (13 - month) どこが間違っているのでしょうか。 また最終的に、A行かB行のどちらかが更新されたときにこのプログラムを 実行させたいのですが、方法がわかりません。 無知な質問ではありますが、どなたか教えてください。 --------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim month As Integer Dim run As Integer If Intersect(Target, Range("A25:A35")) Is Nothing Then Exit Sub Else If Target.Offset(0, -2).Value <> "" Then month = Target.Offset(0, -2).Value month = month - 3 If month = -2 Then month = 10 ElseIf month = -1 Then month = 11 ElseIf month = 0 Then month = 12 End If run = Target.Offset(0, 0).Value Target.Offset(0, 1).Value = run * (13 - month) End If End If End Sub

  • エクセルVBAについて

    http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?

  • [VBA]型が一致しません

    EXCELWORKSHEET上で下記の処理をすると「型が一致しません」との エラーがでます。どうにも原因と対応策がわからず悩んでいます。 デバッグの良い方法ありませんでしょうか? <現象> *列2上のセルを選択して、DELETEキーを押す。⇒エラーなし。 *しかし、列2上のセルとその他のセルを同時選択した上で、DELETEキーを押すと「型が一致しません。」のエラー。 頭の「If Target.Column Like 2 And Len(Target.Value) > 0 Then 」が悪さしているのはわかるのですが・・・。 Private Sub WORKSHEET_CHANGE(ByVal Target As Range) If Target.Column Like 2 And Len(Target.Value) > 0 Then Range("c" & Target.Row).Value = Now If Target.Column Like 2 And Len(Target.Value) > 0 Then 'B列の場合だけ確認 Dim rng As Range Set rng = ActiveSheet.Range("B:B").Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, MatchByte:=True) If Not rng Is Nothing Then '発見した。 If rng.Address <> Target.Address Then '入力中セル以外で発見 Select Case MsgBox("過去に受け入れたLOTです。再度受入れますか?", vbYesNo) Case vbYes Range("B2").Activate Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Now ActiveCell.Offset(0, 1).Activate ActiveCell.Value = UserForm2.TextBox2.Value UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus Range("B2").Activate Selection.End(xlDown).Select Selection.Offset(1, 0).Select Case vbNo Range("B2").Activate Selection.End(xlDown).Select ActiveCell.ClearContents ActiveCell.Offset(0, 1).Activate ActiveCell.ClearContents UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus End Select End If End If End If End If End Sub

  • Excel VBA の件で質問です

    照合システムを作ろうとネットを閲覧していたら次のコードが見つかりました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rr As Range If Not Intersect(Target, Range("C1:D10")) Is Nothing Then For Each rr In Intersect(Target.EntireRow, Range("C:C")) If Not IsEmpty(rr) And Not IsEmpty(rr.Offset(, 1)) Then Application.EnableEvents = False If rr.Value <> rr.Offset(, 1).Value Then Beep rr.Offset(, 2).Value = "NG" Else rr.Offset(, 2).Value = "OK" End If Application.EnableEvents = True End If Next End If End Sub このコードでいくと、C列とD列が同じであればE列にOK、間違っていればNGなのですが、C1とC2が同じであればE1にOK、間違っていればNG。次にC3とC4が同じであればE3にOK、間違っていればNG。…というふうにしたいのですが、どうすれば良いのでしょうか?

  • エクセル 数値結果の値によって日付を入れたい

    シート2の2列目にOKが入ると、シート1のC列にOKが入り、更新された日がB列に表示されるようにしたいです。 C列に手入力でOKと入力すればB列に日付が表示されるのですが、C列をVLOOKで呼ぶようにしたら表示されなくなってしまいました。 どのように修正していいのか分かりません。 お教えいただければと思います。よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Dim TgRng As Range Set TgRng = Intersect(Range("C1:C2000"), Target) If Not TgRng Is Nothing Then Application.EnableEvents = False For Each Rng In TgRng If Rng.Value = "OK" Then Rng.Offset(, -1).Value = Date End If Next Application.EnableEvents = True End If Set TgRng = Nothing End Sub

  • エクセルVBAで表から行の削除

    添付画像のような表があります。 表はB列の名前でソートされています。 D列の比率をみて、100でないものは、必ず同じ名前で複数行にわかれ合計で100になります。この例では名前CとEとHがそうです。 同じ名前が複数行にわかれている場合、最大の比率の行を残し、他の行(例では、埼玉、栃木、長野、新潟の行)を削除したいのです。 複数行にわかれるのが名前CやEのように2行なら、以下のコードで出来ました。 しかし、めったにはありませんが名前Hのような3行以上に分かれるものには対応できません。 どうすればよいでしょうか? Sub test01()   Dim c As Range   Dim Rng As Range   Set Rng = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp))   For Each c In Rng '2地区の分担の場合、分担比率高い方を残す。(3地区以上は未対応)2012/08/29     If c.Value <> 100 And c.Offset(1).Value <> 100 Then       If c.Offset(, -2).Value = c.Offset(1, -2).Value Then         If c.Value >= c.Offset(1).Value Then           c.Offset(1).Value = False         Else           c.Value = False         End If       End If     End If   Next   If Application.WorksheetFunction.CountIf(Rng, False) > 0 Then     Rng.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete   End If End Sub

専門家に質問してみよう