VBAコードでセルの範囲を変更する方法

このQ&Aのポイント
  • VBAコードを使用してセルの範囲を変更する方法を解説します。
  • 特定の範囲を指定して値をコピーするVBAコードのサンプルを紹介します。
  • セルの範囲を変更する方法を示すVBAコードの修正方法について説明します。
回答を見る
  • ベストアンサー

文字を入力したセル以降のセルも同じ文字になるVBA

Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range ActiveSheet.Protect UserInterfaceOnly:=True Set R = Union(Range("D5:D38"), Range("E5:E38"), Range("T5:T38")) With Target If Intersect(.Cells, R) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(.Row, .Column), Cells(38, .Column)).Value = .Value Application.EnableEvents = True End With End Sub この様なコードがあるのですが範囲を変更したいと思います。 D5:D38は上記コードのままで良いのですが、E5;E38はE5:E36に、T5:T38はT5:T36に変更するにはどうすれば良いのでしょうか?

noname#247334
noname#247334

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

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

以下でどうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim R As Range Dim A As Range Dim I As Integer ActiveSheet.Protect UserInterfaceOnly:=True Set R = Union(Range("D5:D38"), Range("E5:E36"), Range("T5:T36")) With Target If Intersect(.Cells, R) Is Nothing Then Exit Sub For I = 1 To R.Areas.Count If Not Intersect(R.Areas(I), Target) Is Nothing Then Set A = R.Areas(I) Exit For End If Next I Application.EnableEvents = False Range(Cells(.Row, .Column), Cells(A.Cells(A.Rows.Count, 1).Row, .Column)).Value = .Value Application.EnableEvents = True End With End Sub

noname#247334
質問者

お礼

この度は僕の質問に時間を割いて頂き誠にありがとうございます。 ちゃんと動作しました、ありがとうございました(*^-^*)

その他の回答 (1)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。 1■  .Unionメソッドについて > Union(Range("D5:D38"), Range("E5:E38"), Range("T5:T38"))  今回のオーダーに副った書換えをすれば> > Union(Range("D5:D38"), Range("E5:E36"), Range("T5:T36")) 予め解っているセル範囲を参照する場合は、特殊な例外を除いて、   Range("D5:D38,E5:E36,T5:T36") のように、普通にRangeプロパティだけで書きます。 Rangeの引数としての参照文字列が255文字を超えるような特殊な場合には、 .Unionメソッドを使うのが妥当ですが、 今回のようなケースで.Unionメソッドを使うのは場違い、です。 2■  Worksheet_Changeイベントの条件分岐の基本 大きく分けて2種類の対応があります。 _Changeイベントの引数Targetに返されるセル範囲を基準にして、   i )単一セルに対する値変更だった場合だけ処理する   ii)複数セルに対する値変更にも対応するよう処理する この点に注意して、ハッキリと書き分ける(説明する)必要があります。 今回は、単一セルだった場合にだけ処理するケースであろうと思われます。 こういう場合は、   If Target.Count > 1 Then Exit Sub という、お決まりの記述で、 思いもよらず複数セルに対する値変更だった場合に起ってしまうエラーや障害を 予め排除しておくのが普通のやり方です。 3■  Targetについて > Range(Cells(.Row, .Column), Cells(38, .Column)) ... Target自体がRangeオブジェクトなのですから、 > ... Cells(.Row, .Column) ... という書き方は無駄ですし、間違いです。   ... Target ... でいいです。 4■  Target以下n行め迄のセル範囲の捉え方について > Range(Cells(.Row, .Column), Cells(38, .Column)) ... これは、(Target.Rowがn以下である、という条件の下)   Target.Resize(n - Target.Row + 1) ... という風にRangeオブジェクトであるTargetを基準に参照するのが 普通のやり方です。 5■  Targetそのものを処理対象から外すことについて > Range(Cells(.Row, .Column), Cells(38, .Column)) ... Targetには既に変更されたばかりの値が設定されている訳ですから、 同じことを2度やる無駄、を減らす意味では、   Range(Cells(.Row + 1, .Column), Cells(38, .Column)) ... と書くべきだったであろうと思います。 前項同様、n行め迄を捉えるには、   Target.Offset(1).Resize(n - Target.Row) ... という風になります。 6■  シート(クラス)モジュールでのActiveSheetの扱いについて > ActiveSheet.Protect UserInterfaceOnly:=True ActiveSheetでも差し当たり期待通り動く訳ですが、 シートモジュールに関連付けられたシートを参照するなら、 つまり例えば"Sheet1"という名のSheet1モジュールの記述としてSheet1を参照するなら、 Meを使います。ActiveSheetは【似て非なるもの】です。   Me.Protect UserInterfaceOnly:=True です。 7■  .Protect UserInterfaceOnlyについて > ActiveSheet.Protect UserInterfaceOnly:=True これは不適当です。 まず、目的を確認しましょう。 当該ブックを開いてから、初めて、当該シートの当該範囲(D5:D38,E5:E36,T5:T36) について値の変更が行われたタイミングから、当該ブックを閉じるまで、 当該シートへの値変更は※手入力を禁止しVBAによるものだけを認める。   ( ※セルのロックを解除したセルは対象外) という意味であれば目的には適っています。 ただ、この目的はかなり特殊ですから、 目的と違うことを書いてしまっているように思われるのです。 また、.Protect UserInterfaceOnlyは一度だけ実行するものですから、 目的が合っていたとしても、まだしも。   If Me.ProtectionMode = False Then Me.Protect UserInterfaceOnly:=True のような書き方をするべき処です。 .Protect UserInterfaceOnlyについては通常は、Workbook_OpenイベントやAuto_Open などのプロシージャで、一度だけ実行するように扱われるものです。 ただコードだけを提示されても、何をやりたいか汲み取ってあげられるものではありませんので、 下部に挙げるサンプルでは、.Protect UserInterfaceOnlyを扱っていません。 そちらで求める処理がどんなものか文章での詳細補足があれば改めて対応を考えます。 8■  イベントプロシージャの二次的な呼び出しについて > ActiveSheet.Protect UserInterfaceOnly:=True 前項で検討した目的が適正だった場合、 または、.Protect UserInterfaceOnlyを適用したシートで Worksheet_Changeイベントを使用する場合、 には、大きな注意を払う必要があります。 何故なら、手入力での値変更を禁止している訳ですから、 _Changeイベントが呼び出される契機は、他のマクロを実行中のタイミング、 ということになります。 つまり_Changeイベントを呼び出す、元の[ひとつのマクロ]が存在して、 何だかややっこしい構造で処理が連動している、という設計が、 前提になっている、ということになります。 [ひとつのマクロ]での処理として値の変更をして、 値の変更に連れて処理を追加するなら、[ひとつのマクロ]の中ですべて処理して、 むしろWorksheet_Changeイベントをキャンセルするように、   Application.EnableEvents = False   ' 値の変更   ' 値の変更に連動する処理   Application.EnableEvents = True [ひとつのマクロ]として完結した書き方をするのが基本です。 "イベントプロシージャの二次的な呼び出し"は 初中級者が陥り易い、不可解な誤作動・不正処理・エラーの原因になっている ことが多いです。 Excelカテゴリでは、比較的よく見かける質問で、 "実物を見ないと解決してあげられない謎の現象についての質問" というのが一定の割合である訳ですが、 "イベントプロシージャの二次的な呼び出し"が原因であることがかなり多いです。 大抵の場合は、最初書いた時には問題なく動くのですが、 他の処理を追加編集した時に、この設計上の欠陥が初めて露見する、ということです。 ゆくゆくは設計力を高めて、サブル-チン化を含めた構造化を図っていけばいいのですが、 差し当たりは、【マクロからイベントを呼び出さない】ように書いておくように 注意してください。 ■■ このカテゴリ常連回答者さんでも平気で間違いを放置している方が多いですが、 (#その多くは質問者さんが提示したコードの原型を尊重しようという配慮による功罪です) 或いは差し当たり問題は露見しないとか、部分的には正しいとか、条件付きで正しいとか、あっても、 それらを組み合わせたりした時のことまで責任を持って回答することは事実上期待出来ないのです。 #皆が基本を正しく理解して実践していれば避けられる事も多いのですが。 回答を得たら、ご自身でひとつひとつ確認をして、 注意するべき点を正しく管理できるようにしてくださいませ。 /// 自分ならこういう場合もIntersectは使いませんが元コードを踏襲します /// 妥当性を持って変数を使わない書き方の一例です Private Sub Worksheet_Change(ByVal Target As Range)  With Target   If .Count > 1 Then Exit Sub   If Intersect(Target, Range("D5:D38,E5:E36,T5:T36")) Is Nothing Then Exit Sub   Application.EnableEvents = False   Select Case .Column   Case 4 ' D列相当    .Offset(1).Resize(38 - .Row).Value = .Value   Case 5, 20 ' E列、T列相当    .Offset(1).Resize(36 - .Row).Value = .Value   End Select   Application.EnableEvents = True  End With End Sub

noname#247334
質問者

お礼

凄いです、エクセルVBAのプロの方ですね!!非常に勉強になりました。 これからも宜しくお願い申し上げます。

関連するQ&A

  • 2つのVBAを組み合わせる方法

    お世話になります、2つのVBAを組み合わせる方法で迷っています。 1つ目が 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")) 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 End Sub です。 2つめが Private Sub Worksheet_Change(ByVal Target As Range)  Application.EnableEvents = True If Intersect(Target, Range("R8:R38")) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(Target.Row, 18), Cells(39, 18)).Value = Target.Value Application.EnableEvents = True End Sub です。2つのPrivate Sub Worksheet_Change(ByVal Target As Range)イベントのVBAですが、どのようにして組み合わせれば良いのでしょうか?

  • このマクロあっていますでしょうか?よろしくお願いいたします。

    ★sheetA Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$C$14" And Target.Address <> "$C$19" _ And Target.Address <> "$F$19" Then Exit Sub If Target.Address <> "$R$14" And Target.Address <> "$S$14" _ And Target.Address <> "$T$19" Then Exit Sub Application.EnableEvents = False With Sheets("B") .Range("F14").Value = Range("C14").Value .Range("F17").Value = Range("C19").Value .Range("F20").Value = Range("F14").Value .Range("F23").Value = Range("F19").Value End With With Sheets("C") .Range("F13").Value = Range("R14").Value .Range("F14").Value = Range("S14").Value .Range("F18").Value = Range("T19").Value End With Application.EnableEvents = True End Sub ★sheetB Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$14" And Target.Address <> "$F$17" _ And Target.Address <> "$F$23" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("C14").Value = Range("F14").Value .Range("C19").Value = Range("F17").Value .Range("F19").Value = Range("F23").Value End With Application.EnableEvents = True End Sub ★sheetC Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$F$13" And Target.Address <> "$F$14" _ And Target.Address <> "$F$18" Then Exit Sub Application.EnableEvents = False With Sheets("A") .Range("R14").Value = Range("F13").Value .Range("S14").Value = Range("F14").Value .Range("T19").Value = Range("F18").Value End With Application.EnableEvents = True 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の質問

    お世話になります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Range("C1") <= Date - Day(Date) Then Exit Sub 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のどこかのセルを空白にすると、そのセル以降も空白になります。 そこで質問ですが、例えばB14の数字を消すとB15~39まで空白のセルになります。そして、B20に1と入力するとB21~39に連続データの数字が自動記入されます。 そしてC1の年月を次の月に更新した際は、B39で示された数字以降の連続データをB9に表示させるには、どうすれば良いでしょうか?

  • エクセルVBAで最小値を求めたいのですが

    下記はある表の最大値を求めるものですが 同様の条件で最小値を求めようと思い 「MAX」の箇所を「MIN」差し替えてできると思っていたのですが 最小値がのかわりに「0」が表示されてしまいます。 そのように修正すればよいでしょうか? private sub worksheet_change(byval Target as excel.range)  if target.cells(1) = "" then exit sub  if target.address = "$A$1" then   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  elseif target.address = "$E$1" then   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 if end sub

  • Excel VBA 入力規則

    入力規則を利用して、3つのセルを連携させることを考えていますが、 不適合な値を張り付けらられた場合に拒否をする方法があるのでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ad As String Dim ma As Range Dim ma2 As Range Dim r As Range Dim r2 As Range Dim r3 As Range Dim r1 As Range Dim m As Long Dim m2 As Long Application.EnableEvents = False If Target = "" Then Range("F7").Validation.Delete Range("F7") = "" If Target.Address(0, 0) = "B7" Then Range("D7").Validation.Delete Range("D7") = "" End If GoTo EXIT_SUB End If With Worksheets("Sheet1") ad = "A4" Set r = .Range(ad) Set ma = r.MergeArea Set r1 = r.Offset(0, 1) m = Application.Match(Range("B7"), .Range(r1, .Cells(r.Row + ma.Count - 1, r1.Column)), 0) Set r2 = .Cells(r.Row + m - 1, r1.Column) Set ma2 = r2.MergeArea If Target.Address(0, 0) = "B7" Then If ma.MergeCells Then setValiS Target.Offset(0, 2), r2 Range("F7").Validation.Delete Target.Offset(0, 2) = "" Target.Offset(0, 4) = "" Else MsgBox "A列が連結されていません。" End If ElseIf Target.Address(0, 0) = "D7" Then Set r3 = r2.Offset(0, 1) m2 = Application.Match(Target, .Range(r3, .Cells(r2.Row + ma2.Count - 1, r3.Column)), 0) setValiS Target.Offset(0, 2), .Cells(r2.Row + m2 - 1, r3.Column) Target.Offset(0, 2) = "" End If End With EXIT_SUB: Application.EnableEvents = True End Sub Sub setVali2() Dim tc As Range Dim c As Range Set tc = Worksheets("登録").Range("D3") Set c = Worksheets("Sheet1").Range("C3") setValiS tc, c End Sub Sub setValiS(tc As Range, c As Range) Dim ss As String Debug.Print tc.Address, c.Address ss = getChildren(c) If ss > "" Then With tc.Validation .Delete .Add Type:=xlValidateList, Formula1:=getChildren(c) End With End If Worksheets("登録").Activate End Sub Function getChildren(c As Range) Dim c1 As Range Dim ss As String Dim s1 As String Worksheets("Sheet1").Activate ss = "" For Each c1 In c.MergeArea s1 = c1.Offset(0, 1) If s1 <> "" Then ss = ss & "," & s1 Next c1 If ss <> "" Then ss = Mid(ss, 2) Else MsgBox "データがありません!" End If getChildren = ss End Function Sub Outline() Dim CheckRow As Long Dim Moji As String Dim TopRow As Long Dim EndRow As Long With ActiveSheet .Range("A2").ClearOutline .Outline.SummaryRow = xlAbove CheckRow0 = .Range("A" & .Rows.Count).End(xlUp).Row CheckRow = CheckRow0 Do If Moji = "" Then Moji = .Cells(CheckRow, 1).Value EndRow = CheckRow ElseIf yy_mm(CDate(.Cells(CheckRow, 1).Value)) = yy_mm(CDate(Moji)) Then TopRow = CheckRow If TopRow = 1 Then .Rows(TopRow + 1 & ":" & EndRow).Rows.Group Exit Do End If Else .Rows(TopRow + 1 & ":" & EndRow).Rows.Group CheckRow = CheckRow + 1 Moji = "" End If CheckRow = CheckRow - 1 Loop Until CheckRow = 1 .Rows(CheckRow + 1 & ":" & EndRow).Rows.Group .Outline.ShowLevels RowLevels:=1 ExecuteExcel4Macro "SHOW.DETAIL(1," & CheckRow0 & ",TRUE)" End With End Sub Function yy_mm(d As Date) yy_mm = Format(d, "yy/mm") End Function

  • 連続データの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に挑戦しましたが苦労しています。 Win 8, excel 2010です。 「ある1つのセルが100の時、その左横の4列をある色で塗りつぶす」 という事を行いたいのですが、 ネットで調べたものをちょっとアレンジしてみましたが Sub change(ByVal Target As Range) Dim myColor As Variant If Target.Count <> 1 Then Exit Sub If Target.Column <> 4 Then Exit Sub Application.EnableEvents = False Select Case Target.Value Case 100 myColor = 3 Case Else myColor = xlNone End Select Cells(Target.Row, 1).Resize(1, 4).Interior.ColorIndex = myColor Application.EnableEvents = True End Sub change(関数名)の横に引数があるから(参照渡し???) マクロに表示されないという情報を 見つけたのですが、色々やっても訳が分からなくなりました。 どうすれば実行できるようになるのでしょうか?

  • EXCEL VBAについて教えてください

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。 Excelのバージョンは2003です。 よろしくお願い致します

  • VBA初心者です

    VBA初心者です。 同じセルに数字を入れて足し算して行きたいんですが! 下記のVBA見つけたのですが、A1に数字を入れて答えがE1に出るんですが、同じ事を A2、A3、A4、A5答えもE2、E3......で増やしたいのですが、どうするか分かりません。 どなたか教えてください。 宜しくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) Dim inp, outp As String inp = "$A$1" outp = "E1" Application.EnableEvents = False If Target.Address = inp Then Range(outp).Value = Range(outp).Value + Target.Value If Target.Value <> "" Then ActiveCell.Offset(-1, 0).Select Else Range(outp).Value = 0 End If End If Application.EnableEvents = True End Sub

専門家に質問してみよう