エクセルのVBAで、エラーになった場合の回避

このQ&Aのポイント
  • エクセルのVBAでエラーになった場合の処理方法についてアドバイスをお願いします。
  • データベースのレコードを操作する4つのプロシージャがありますが、前と次の処理を実行する際にエラーが発生します。
  • ワークブックオープン時のイベントで最後の処理を呼び出しているため、基本的にエラーは出ませんが、一部のレコードを触る時にエラーが発生します。修正方法を教えてください。
回答を見る
  • ベストアンサー

エクセルのVBAで、エラーになった場合の回避

excel2000 VBA エラーが発生した場合の処理の方法についてアドバイスをお願いいたします。 データベースのレコードを操作する、4つのプロシージャが下記の通りあります。 (1)最初(saisyo) (2)最後(saigo) (3)前(mae) (4)次(tugi) いきなり、(3)前、(4)次の処理を実行すると、エラーになってしまうのですが、これをなくしたい。(on error gotoステートメントを使えばいいのかなと考えていますが) ワークブックオープン時のイベントで(2)最後(saigo)を呼び出しているので、基本的にエラーは出ないのですが、いろいろレコードを触っている時に、(3)、(4)を実行するとエラーになるのがわずらわしいです。 どういう修正をコードに加えればいいか、アドバイスいただけるとありがたいです。 Public trg As Range Sub Saisyo() Set trg = Worksheets("data").Range("A1") Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki End Sub Sub Saigo() Set trg = Worksheets("data").Range("A60000").End(xlUp) Call Tenki End Sub Sub Mae() If trg.row >= 3 Then Do Set trg = trg.Offset(-1, 0) Loop Until trg.EntireRow.Hidden = False If trg.row = 1 Then MsgBox "これより前のレコードはありません" Call Saisyo Exit Sub Else Call Tenki End If Else MsgBox "これより前のレコードはありません!" End If End Sub Sub Tsugi() If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki Else MsgBox "これより後ろのレコードはありません" End If End Sub Sub Tenki() 'レコードのtrgの値を入力シート(input)のBC1セルに表示させる Worksheets("input").Range("BC1").Value = trg End Sub

  • puyopa
  • お礼率87% (459/525)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

とりあえずアテズッポで,たとえば次のようにしてみましょうか。 Sub Mae() on error goto errhandle If trg.row >= 3 Then Do Set trg = trg.Offset(-1, 0) Loop Until trg.EntireRow.Hidden = False If trg.row = 1 Then MsgBox "これより前のレコードはありません" Call Saisyo Exit Sub Else Call Tenki End If Else MsgBox "これより前のレコードはありません!" End If exit sub errhandle: call Saisyo End Sub Sub Tsugi() on error goto errhandle If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki Else MsgBox "これより後ろのレコードはありません" End If exit sub errhandle: call saigo End Sub 「動いたり動かなかったりする」トラブルは,実データ(あるいはワークシートの様子)とマクロが整合していないのが原因ですから,ただマクロだけ眺めていても的確な解決策はみつかりません。 どういう状況で,マクロの具体的にどこの行が,どんなマクロの状況(たとえば変数の内容は? たとえばエラーになったその瞬間に,エラーになったマクロが触ろうとしていたセルなどの具合は?)でエラーになるのか,キチンと分析し理解するように心がけてください。必要に応じて,そういったあなたのエクセルで起きている「事実」を情報提供して,ご相談を投稿してください。 また,エラーの発生する具体的な状況(原因)を突き止めた次のステップとして,じゃぁその「リカバリーとしては具体的に何がどのようにあればよいのか」についてよく検討し,それをまたマクロに実装していきます。

puyopa
質問者

お礼

keithin様 回答ありがとうございます。 抽象的な質問にも関わらず、お答え頂き感謝いたします。 以後、エラー内容の分析と具体的事実を明確に述べる。を気をつけていきます。

関連するQ&A

  • excel vba のエラー原因が分かりません

    データ入力シート「Hit Data] データ表示シート「User Sheet」 とあります。 データ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シート「Hit Data]から、都度データを呼び出せるようにするプログラムをとあるサイトを参考にして作成しましたが、エラーが出てしまいどうしてもうまくいきません。 どこに問題があるのか見ていただけないでしょうか? '以下標準モジュールのプログラムです Public trg As Range Sub Saisyo()  Set trg = Worksheets("Hit Data").Range("A3")  Call Tenki End Sub Sub Saigo()  Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)  Call Tenki End Sub Sub Mae()  If trg.Row >= 4 Then   Set trg = trg.Offset(-1, 0)   Call Tenki  Else   MsgBox "これより前のレコードはありません"  End If End Sub Sub Tsugi()  If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then   Set trg = trg.Offset(1, 0)   Call Tenki  Else   MsgBox "これより後ろのレコードはありません"  End If End Sub Sub Tenki()  Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)  Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)  Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)  Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3) End Sub '以下 User Sheet"のシートモジュールに記載されたプログラムです。 Private Sub Worksheet_Activate() Call Saisyo End Sub '表示されるエラーの内容 'saisyo・・・アプリケーション定義またはオブジェクト定義のエラーです。 'saigo・・・同上 'mae・・・オブジェクト変数またはWithブロック変数が設定されていません 'tugi・・・同上

  • excel VBA コード編集のアドバイス

    下記データベースをexcelで作成しようとしています。 ■「data」シート ・・・データを入力するシート ■「input]シート ・・・データを入力してdataシートに格納する、またdataシートで入力した値をほしい情報を表示させるシート ■やろうとしていること、困っていること ・・・dataシートのA列でID番号を入力しておりますが、dataシートでオートフィルタを使う場合があり、その場合、IDが飛び飛びになるのですが、下記コマンドボタンだと、それに合わせて飛んでくれません。 ■相談したいこと これを解決するために、オフセットでは、無理ということは分かるのですが、じゃぁどういったコードを組めばいいのかをアドバイスをお願いできないでしょうか。どうかよろしくお願いいたします。 '■以下コードです。 Public trg As Range Sub Mae() '前へのボタン If trg.row >= 3 Then Set trg = trg.Offset(-1, 0) Call Tenki Else MsgBox "これより前のレコードはありません" End If End Sub Sub Tsugi() '次へのボタン If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Set trg = trg.Offset(1, 0) Call Tenki Else MsgBox "これより後ろのレコードはありません" End If End Sub Sub Tenki() Worksheets("input").Range("c4").Value = trg.Offset(0, 0) End Sub

  • EXCEL VBA エラーの意味が分からず

    いつも、お世話になっております。 下記コードで、レコード1と2を前へと次へを繰り返し何度か操作すると、エラーになってしまいます。なぜエラーになって、どう修正すれば回避できるのかが分かりません。 どうかご教授いただけないでしょうか。よろしくお願いいたします。 エラーの状況 inputシートで、maeとtsugiの動作を何度か行うと、「If pict.TopLeftCell.Address = targetRange.Address Then」の部分が黄色く塗りつぶされ、「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」と表示されてしまします。たぶん写真の削除の時にエラーになっているのだと思いますが、 '■標準モジュールのコード。dataシートのレコードを移動し、inputシートのBC1セルに表示する。 Public trg As Range Sub Saisyo() Set trg = Worksheets("data").Range("A1") Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki End Sub Sub Saigo() Set trg = Worksheets("data").Range("A60000").End(xlUp) Call Tenki End Sub Sub Mae() On Error GoTo errhandle If trg.row >= 3 Then Do Set trg = trg.Offset(-1, 0) Loop Until trg.EntireRow.Hidden = False If trg.row = 1 Then MsgBox "これより前のレコードはありません" Call Saisyo Exit Sub Else Call Tenki End If Else MsgBox "これより前のレコードはありません!" End If Exit Sub errhandle: Call Saisyo End Sub Sub Tsugi() On Error GoTo errhandle If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki Else MsgBox "これより後ろのレコードはありません" End If Exit Sub errhandle: Call Saigo End Sub Sub Tenki() Worksheets("input").Range("BC1").Value = trg.Offset(0, 0) End Sub '■sheet 1のモジュール。inputシートBC1セルの値を見て、dataシートへ値を読みにいき、inputシートへ表示する。 Private Sub hyouji() Dim fRange As Range Dim kensaku As Long Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then '見つからなかった? MsgBox "入力された顧客コードが存在しません。", vbExclamation Exit Sub End If kensaku = fRange.row '検索された顧客DCの行位置を求める Range("BC1:BE1").Value = Sheets("data").Cells(kensaku, 1).Value '整理No Range("AX1").Value = Sheets("data").Cells(kensaku, 2).Value '固有ID Range("I4").Value = Sheets("data").Cells(kensaku, 3).Value '工場名 Range("P4").Value = Sheets("data").Cells(kensaku, 4).Value '柱No Range("W4").Value = Sheets("data").Cells(kensaku, 5).Value '盤No Range("I5").Value = Sheets("data").Cells(kensaku, 6).Value '変台系統1 Range("S5").Value = Sheets("data").Cells(kensaku, 7).Value '変台系統2 Range("I6").Value = Sheets("data").Cells(kensaku, 8).Value '分電盤設置時期 Range("B8").Value = Sheets("data").Cells(kensaku, 9).Value '主な供給先 Range("B14").Value = Sheets("data").Cells(kensaku, 10).Value '特記 Range("AD4").Value = Sheets("data").Cells(kensaku, 11).Value '盤位置の目安 Range("AT8").Value = Sheets("data").Cells(kensaku, 12).Value '幹線線相 Range("R36").Value = Sheets("data").Cells(kensaku, 13).Value '盤写真ファイル名 Range("AT36").Value = Sheets("data").Cells(kensaku, 14).Value '単結図ファイル名 End Sub '■sheet 1のモジュール。"$R$36"と"$AT$36"の写真ファイル名を見て、"C37"と"AE37"セルに表示させる。 Private Sub Worksheet_Change(ByVal Target As Range) Dim fRange As Range Dim touroku As Long Select Case Target.Address Case "$BC$1" Call hyouji Case "$R$36" myLoadPicture "board_Image", Target.Text, Range("C37") Case "$AT$36" myLoadPicture "map_Image", Target.Text, Range("AE37") Case "$AT$8" Call red_circle Case Else Exit Sub End Select End Sub Private Sub myLoadPicture(folderName As String, fname As String, targetRange As Range) Dim pict As Shape, picPath As String picPath = ThisWorkbook.Path & "\" & folderName & "\" & fname If fname = "" Then picPath = ThisWorkbook.Path & "\" & folderName & "\" & "NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = targetRange.Address Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(picPath, msoTrue, msoFalse, _ targetRange.Left, targetRange.Top, 300, 360) End With End Sub

  • excel VBA コードの編集 アドバイス依頼

    いつもお世話になっております。 初心者ですが、苦しみながらもaccessを意識したデータベースをexcelで作成しようとしております。 さて 下記 Worksheet_シートが2つあり、それぞれのシートで IDを関連付ける主キーにしてデータを管理しています。 ■1枚目「input」シート ・・・ データを入力・閲覧するシート(accessでいうフォームにあたります)、主キーはC4セルに入力しています。 ■2枚目「data」シート ・・・ inputシートで入力・編集されたデータを保管するするシート(accessでいうとテーブルにあたります)。主キーはA列に登録されています。 ■データの閲覧方法 ・・・inputシートに、「最初へ」「前へ」「次へ」「最後へ」と4つのボタンをinputシートに設けて、主キー番号を可変させてデータを閲覧できるようにしています。また、C4セルに直接数字を入力しても、データをdataシートへ読みにいって、表示させられるようにしています。 ■困っていること、 ・・・C4セルに数字を打ち込んでデータを閲覧した後、「前へ」「次へ」ボタンを押すと、エラー(オブジェクト変数または、withブロック・・・)または、全く違う番号にジャンプしてしまいます。 ■お願いしたいこと ・・・C4セルに数字を打ち込んでデータを閲覧した後、、「前へ」「次へ」ボタンを押して、その前後のデータが確認できるようなコードに修正したいのですが、どういったコードにすればいいか教えていただけないでしょうか? コードは下記です。 また、どういったものを作ろうとしているのか説明不足でご指摘を頂戴することもありますので、試作段階のファイルですが、アップローダーにあげさせていただきました。確認頂ければ幸いです。 ■アプロダ 投稿No 4520 http://www.kent-web.com/pubc/book/test/uploader/uploader.cgi ■↓以下 関係あると思われるコード抜粋です '■レコードの移動コード(標準モジュールに記載) Public trg As Range Sub Saisyo() Set trg = Worksheets("data").Range("a1") Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki End Sub Sub Saigo() Set trg = Worksheets("data").Range("A60000").End(xlUp) Call Tenki End Sub Sub Mae() If trg.row >= 3 Then Do Set trg = trg.Offset(-1, 0) Loop Until trg.EntireRow.Hidden = False If trg.row = 1 Then MsgBox "これより前のレコードはありません" Call Saisyo Exit Sub Else Call Tenki End If Else MsgBox "これより前のレコードはありません!" End If End Sub Sub Tsugi() If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki Else MsgBox "これより後ろのレコードはありません" End If End Sub Sub Tenki() Worksheets("input").Range("c4").Value = trg.Offset(0, 0) End Sub '■ワークシートチェンジコード(ワークシートに記載) Private Sub Worksheet_Change(ByVal Target As Range) Dim fRange As Range Dim fRow As Long Select Case Target.Address Case "$C$4" Set fRange = Sheets("data").Columns(1).Find(What:=Range("C4").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then '見つからなかった? MsgBox "入力された顧客コードが存在しません。", vbExclamation Exit Sub End If fRow = fRange.row '検索された顧客DCの行位置を求める Range("F4").Value = Sheets("data").Cells(fRow, 2).Value Range("C5").Value = Sheets("data").Cells(fRow, 3).Value Range("C6").Value = Sheets("data").Cells(fRow, 4).Value Range("C7").Value = Sheets("data").Cells(fRow, 5).Value Range("F5").Value = Sheets("data").Cells(fRow, 6).Value Range("k4").Value = Sheets("data").Cells(fRow, 7).Value Range("k17").Value = Sheets("data").Cells(fRow, 8).Value Case "$K$4" myLoadPicture "board_Image", Target.Text, Range("I5") Case "$K$17" myLoadPicture "map_Image", Target.Text, Range("I18") Case Else Exit Sub End Select End Sub

  • この場合エクセルVBAでどう書けばいいでしょうか?

    あるシートのH列で、H21からH46のあいだで"False"がある行を非表示にしたいのです。 下記の冗長なマクロでもそうなりますが、For Nextというのを使うともっと簡潔に記述できると思うのですが、初心者のためよくわかりません。ご教示ください。 また、下記の式はシートが保護されていると働きませんが、保護したシートでも動く方法があればそれもあわせて教えていただけると幸いです。 エクセルは95です。 Sub 空白行非表示() G% = Sheets("見積書").Range("H48").Value With Sheets("見積書") Rows("19:47").RowHeight = G% If Range("H21") = False Then Rows("21").EntireRow.Hidden = True End If If Range("H22") = False Then Rows("22").EntireRow.Hidden = True End If If Range("H23") = False Then Rows("23").EntireRow.Hidden = True End If If Range("H24") = False Then Rows("24").EntireRow.Hidden = True End If 途中、繰り返しのため省略 If Range("H42") = False Then Rows("42").EntireRow.Hidden = True End If If Range("H43") = False Then Rows("43").EntireRow.Hidden = True End If If Range("H44") = False Then Rows("44").EntireRow.Hidden = True End If If Range("H45") = False Then Rows("45").EntireRow.Hidden = True End If If Range("H46") = False Then Rows("46").EntireRow.Hidden = True End If End With End Sub

  • エクセルVBA 前回のご回答で質問です

    http://oshiete1.goo.ne.jp/qa3764996.html 前回上の質問をさせていただき、お二方から大変よいご回答をいただきました。 これを勉強したいと思い、読み取ろうとしたのですが、理解できないところがあり、日本語にすればどのようになるのかお教えいただきたいと思い、質問にまた参りました。分からないところは、下の全コード中の、 r.Offset(0, -1).Resize(1, 2).Interior.ColorIndex = trg.Interior.ColorIndex '    r.Offset(0, -1).Resize(1, 2).Font.ColorIndex = trg.Font.ColorIndex の部分です。OffsetとResizeでの行、列の方向性が理解できないのです。よろしければコメントを着けていただければ助かります。 よろしくお願いします。 Sub Macro1() Dim r, trg As Range  For Each r In Range("B4:AD27")   If r.Value <> "" Then    Set trg = Range("B1:O1").Find(what:=r.Value, LookIn:=xlValues, lookat:=xlWhole)    If Not trg Is Nothing Then     r.Offset(0, -1).Resize(1, 2).Interior.ColorIndex = trg.Interior.ColorIndex '    r.Offset(0, -1).Resize(1, 2).Font.ColorIndex = trg.Font.ColorIndex    End If   End If  Next r End Sub

  • Excel VBA 範囲の条件付け

    現在下記のコードを組んでいます。 やりたい事は、sheet1~3で背景色の赤いセルと、 そのセルの上方の最初の空白セルの下3行をsheet4にコピペする。 【下記コードで実現出来ていないこと】 1.背景色が赤いセルとそのスグ上の3行をコピペしてしまう。 2.同じシートに背景色が赤いセルが複数あっても、1つしかコピペしない。 3.sheet4のコピペ先をA3、A13、A23と仮に指定しているが、  sheet1のコピペ内容に1行空けて、sheet2のコピペ内容、  また1行空けて、sheet3のコピペ内容というセル指定にしたい。 以上、よろしくお願い致します。 Sub Test() Dim i As Long, r As Range With Worksheets("sheet1") For i = 1 To .Range("A65536").End(xlUp).Row If .Range("A" & i).Interior.ColorIndex = 3 Then Set r = .Range("A" & i).EntireRow Set r = Union(r, r.End(xlUp).Resize(3).EntireRow) End If Next i End With If Not r Is Nothing Then r.Copy Sheets("Sheet4").Select Range("A3").Select ActiveSheet.Paste With Worksheets("sheet2") For i = 1 To .Range("A65536").End(xlUp).Row If .Range("A" & i).Interior.ColorIndex = 3 Then Set r = .Range("A" & i).EntireRow Set r = Union(r, r.End(xlUp).Resize(3).EntireRow) End If Next i End With If Not r Is Nothing Then r.Copy Sheets("Sheet4").Select Range("A13").Select ActiveSheet.Paste With Worksheets("Sheet3") For i = 1 To .Range("A65536").End(xlUp).Row If .Range("A" & i).Interior.ColorIndex = 3 Then Set r = .Range("A" & i).EntireRow Set r = Union(r, r.End(xlUp).Resize(3).EntireRow) End If Next i End With If Not r Is Nothing Then r.Copy Sheets("sheet4").Select Range("A23").Select ActiveSheet.Paste End Sub

  • エクセルVBAでエラー、Changeの使い方が×?

    エクセルVBAでBOOK1のsheet1とsheet2とsheet3があり、 sheet1とsheet2の全ての情報をsheet3にコピーしてまとめるようにしました。 マクロを実行するには、Visual Basicを開いてF5を押しています。 それをsheet1かsheet2の中身の一部分でも変更すると そのときに自動的にマクロが実行されるようにしたいです。 sheet1とsheet2とsheet3に Private Sub Worksheet_Change(ByVal Target As Range) Call マクロ() End Sub を入れ、 標準モジュールに Sub マクロ() Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50") Workbooks("BOOK.xlsm").Worksheets("sheet2").Range("C1:BE100").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C51:BE150") Dim UsedCell As Range Dim Max_Row, RowCount As Integer Set UsedCell = ActiveSheet.UsedRange Max_Row = UsedCell.Cells(UsedCell.Count).Row Application.ScreenUpdating = False For RowCount = Max_Row To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(RowCount)) = 0 Then Rows(RowCount).Delete End If Next Application.ScreenUpdating = True End Sub をやって、sheet1かsheet2のセルを変更すると エクセルが固まってしまいます。 デバックでは最初の Workbooks("BOOK.xlsm").Worksheets("sheet1").Range("C1:BE50").Copy _ Destination:=Workbooks("BOOK.xlsm").Worksheets("sheet3").Range("C1:BE50") がよくないようです。 書き方が間違っているのでしょうか?

  • エクセル VBAについて。

    Private Sub ComboBox2_Change() On Error Resume Next With Me.ComboBox2 If .ListCount < 0 Then Exit Sub If .Value = "" Then Exit Sub Me.Range("K45").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 2).Value Me.Range("K48").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 4).Value End With End Sub これをマスタのU列とW列を表示したい場合、どこを変えれば良いのでしょうか? 今はD列とF列が表示されております。

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

専門家に質問してみよう