• 締切済み

エクセル SelectionChangeイベントにおけるIF関数について

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = Range("A1") Then Range("H2:H10").Copy Range("B2:B10").PasteSpecial Paste:=xlPasteAll 'A1選択時、H2:H10範囲をコピーして、B2:B10にペイスト ElseIf Target.Address = Range("A2") Then Range("H11:H19").Copy Range("B2:B10").PasteSpecial Paste:=xlPasteAll 'A2選択時、H11:H19範囲をコピーして、B2:B10にペイスト ElseIf Target.Address = Range("A3") Then Range("H20:H28").Copy Range("B2:B10").PasteSpecial Paste:=xlPasteAll 'A3選択時、H20:H28範囲をコピーして、B2:B10にペイスト Else Range("B2:B10").Select Selection.ClearContents With Selection .MergeCells = False 'セルを結合する .ShrinkToFit = False '縮小して全体を表示する .HorizontalAlignment = xlGeneral '横位置 .VerticalAlignment = xlBottom '縦位置 .Font.Size = 12 '文字サイズ .Font.Bold = False '文字太字 .Interior.ColorIndex = 0 .Borders.LineStyle = False End With 'A1A2A3以外のセルを選択時、B2:B10範囲の値及び書式設定をすべてクリアする End If End Sub 上記SelectionChangeイベントがうまく動作しません。 どこが問題かご教示ください。 もし可能であれば、正解文をご教示頂けると大変助かります。 よろしくお願いします。

みんなの回答

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

>If Target.Address = Range("A1") Then の前に Msgbox Target.Address と入れてみてご覧。どう表示されるか。$A$1のような文字列が表示されるだろう。それとRange("A1")ーー>Range("A1")の値(VALUEの省略形)と比べてどうする。意味を成さない。質問者の誤解がある。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 私は、あまり丁寧に教えるつもりはないけれど、あれこれ言ったら、混乱してしてしまいますのでポイントだけ書きます。 If Target.Address = Range("A1").Address Then   と If Target.Address = "$A$1" Then どちらが良いかというと、文字列のままのほうがよいです。 VBAでは、文字を省略したり、短くする原則があります。ただし、読みにくくするのは、あまり勧められませんが、それは、ベテランでも議論の残るところです。また、Me キーワードは、私は、通常、インテリセンスで通常使わないプロパティを出すときに使いますが、原則論としては使いません。 'A1A2A3以外のセルを選択時、B2:B10範囲の値及び書式設定をすべてクリアする 私は、Clear メソッドはあまり使いません。ClearContents か、ClearFormats のどちらかですから、以下は、二つを使いました。 '---------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Application.EnableEvents = False   With Range("B2:B10")     If Target.Address = "$A$1" Then       Range("H2:H10").Copy .Cells     ElseIf Target.Address = "$A$2" Then       Range("H11:H19").Copy .Cells     ElseIf Target.Address = "$A$3" Then       Range("H20:H29").Copy .Cells     Else       .ClearContents       .ClearFormats     End If   End With   Application.EnableEvents = True End Sub

nkgw_4a_t
質問者

お礼

ご回答ありがとうございます。 値及び書式設定をクリアするのに、.ClearContents .ClearFormats を使えるのですね。大変勉強になりました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

取り合えず 'A1選択時、H2:H10範囲をコピーして、B2:B10にペイスト ならば If Target.Address = Range("A1").Address Then ・・ として比較してください。 だけど、その部分を訂正して試しましたが、何をやりたいのかわかりませんでした。 コピィしたあとにRange("B2:B10").PasteSpecial Paste:=xlPasteAll を実行したときに、再度、イベントが実行されて、結局、B2:B10もクリアされてしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = Range("A1").Address Then Range("B2:B10").Value = Range("H2:H10").Value 'A1選択時、H2:H10範囲をコピーして、B2:B10にペイスト ElseIf Target.Address = Range("A2").Address Then Range("B2:B10").Value = Range("H11:H19").Value 'A2選択時、H11:H19範囲をコピーして、B2:B10にペイスト ElseIf Target.Address = Range("A3").Address Then Range("B2:B10").Value = Range("H20:H28").Value 'A3選択時、H20:H28範囲をコピーして、B2:B10にペイスト Else Range("B2:B10").Clear 'A1A2A3以外のセルを選択時、B2:B10範囲の値及び書式設定をすべてクリアする End If End Sub としてみましたが、ご希望の操作でしょうか?

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[回答番号:No.1] の DOUGLAS_ です。 >上記以外は検証しておりませんので  書き忘れましたが、イベント を組む場合の基本として、コードの前後を Application.EnableEvents = False Application.EnableEvents = True で挟むことも、基本です(どこに書くかはお考えください)。

nkgw_4a_t
質問者

お礼

ご返答遅くなりました。 大変丁寧なご回答ありがとうございました。 No.1,3共に大変参考になりました。

  • Randomize
  • ベストアンサー率70% (38/54)
回答No.2

問題点は2つあります 1個目は3箇所ありますが、 If Target.Address = Range("A1") Then この部分です。左辺と右辺で調べているものが違います。左辺はAddressプロパティーを指定しているのでA1でしたら$A$1が左辺の内容になります。一方、右辺はプロパティーを省略しています。この場合は規定プロパティーとしてValueプロパティーが呼び出されます。よって、A1ですとA1セルに書き込まれている内容が右辺に来てしまいます。 比べるものが違うので一致することはまずありません。それが原因で条件分岐に枝分かれしてくれないのです。3箇所を If Target.Address = Range("A1").Address Then と変更してください。 2個目は潜在的に見えないバグが存在します。これはプログラマーとしてのセンスを感じられるようになると理解できるのですが、H列の内容をコピーしようとしていますよね。でもコピーすると言うことはセルの選択範囲を指定して選択範囲が移動していることになるのです。貼り付けのときも同じです。このときにA1~A3の条件に合わないからElseの処理が行われてしまうのです。ですので問題点1のみを直しても結局は目的の動作ができません。 これを簡単に直すのであればプロシージャーの間はEnableEventsプロパティーをFalseにしてイベントをとめてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False ・・・・・・・中略・・・・・・・ Application.EnableEvents = True End Sub この2個を改善すると動くようになると思います。 なお、補足。Elseの部分も下のように直すのがベターです。Selectionは極力使わないようにしましょう。 ---------------------ここから------------------------ Else With Me.Range("B2:B10") .ClearContents 'テキストのみを消去する .MergeCells = False 'セルの結合を解除する .ShrinkToFit = False '縮小して全体を表示するのチェックをはずす .HorizontalAlignment = xlGeneral '横位置を「標準」にする .VerticalAlignment = xlBottom '縦位置を「下揃え」にする .Font.Size = 12 '文字サイズ .Font.Bold = False '文字太字を解除する .Interior.ColorIndex = 0 .Borders.LineStyle = False End With 'A1A2A3以外のセルを選択時、B2:B10範囲の値及び書式設定をすべてクリアする End If ---------------------ここまで------------------------ でも、そもそも値と書式の両方をクリアするのであれば Else Me.Range("B2:B10").Clear End If で事足りそうですね。

nkgw_4a_t
質問者

お礼

ご返答遅くなりました。 大変丁寧なご回答ありがとうございました。 大変参考になりました。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 先ず、お示しのコードは 標準モジュール などではなくて シートモジュール に記述していらっしゃいますよね? If Target.Address = Range("A1") Then の行で [F9] キーを押下して ブレークポイント を設定し VBE を閉じてからマウスで セルA1 を選択してみてください。  すると、VBE が開いて If Target.Address = Range("A1") Then の行が黄色になりますが、このとき、「Target.Address」の上にマウスをあてると Target.Address = "$A$1" と表示されませんか?  ということで、 Target.Address = Range("A1") という表示はおかしいですね。  強いて書けば Target.Address = Range("A1").Address ですが、普通は If Target.Address = "$A$1" Then ですね。  イベントの時は [F8] キーを押下しても ステップ イン デバッグ できないようですので、ブレークポイント を設定しておいて、その後、[F8] キーを押下しながら ステップ イン デバッグ なさってみてください。 >もし可能であれば、正解文をご教示頂けると大変助かります。  上記以外は検証しておりませんので、先ず、上記を直してからご自分で考えてみられてはいかがでしょうか?

関連するQ&A

  • 値の貼り付け

    Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone 上記の値の貼り付けを行うプログラムがあったときに これを一行にまとめることは出来ますか? Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone このように書くとエラーになってしまいます。 PasteSpecialがある時は一行にならないのでしょうか?

  • 助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが

    助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが、エラーが出てしまいます。 説明が下手なので図のようなもので 下図1  ABCDE 1あいうえお 2あいうえお 3あいうえお 4あいうえお 下図2  ABCDEFGHIJ 1あ い う  え お 2あ い う  え お 3あ い う  え お 4あ い う  え お まずは下図1のように下図2の様に指定した列に貼りたいのですが。 Range("A1:E5").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でエラーになり別々にと考えて Range("A1:A5,B1:B5,C1:C5,D1:D5,E1:E5,").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でも無理でした…なにかいい方法があれば教えてください。 単純に Range("A1:A5").Copy Range("A1").PasteSpecial Paste:=xlValues Range("B1:B5").Copy Range("C1").PasteSpecial Paste:=xlValues Range("C1:C5").Copy Range("E1").PasteSpecial Paste:=xlValues Range("D1:D5").Copy Range("H1").PasteSpecial Paste:=xlValues Range("E1:E5").Copy Range("a1").PasteSpecial Paste:=xlValues とするしかないんでしょうか? なにかいい方法があればお教えください!!

  • 「elseに対応するifがありません」と表示されます。

    If Range("a2") > 0 Then GoTo saisyo Else End End If saisyo: Range("a2").Select.Copy Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub とすると、質問タイトルのエラーが出ます。何がいけないのでしょうか?

  • エクセルで複数ファイルからコピーをする。

    すみませんが、BOOK1に複数のファイルから部分的にコピーして貼り付けるという作業をしたいのですが、ど素人なもんでわかりません。マクロで記録したモノをいじってみてるのですが、根本的にコードが分かっていなくギブアップです。  やりたいことは、フォルダーの中の970305日報1、970305日報2、970306日報1、970306日報2のようなファイルが山ほどあるのですが、 この970305の日報1と2を開き、それぞれファイルの決まった列を順番にをBook1の行へ行列を入れ替えて貼りつけていき(1日が1行)保存して閉じてから、次の日970306のデータをBOOK1の2行目に貼り付けるということをしたいのですが、どなたか教えていただければ助かります。よろしくお願いします。 Sub Macro2() Dim MyFile As String, MyPath As String Dim wb As Workbook, tb As Workbook Set tb = ThisWorkbook MyPath = tb.Path & "\" MyFile = Dir(MyPath & "*.xls", vbNormal) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Do While MyFile <> "" If MyFile <> tb.Name Then Set wb = Workbooks.Open(MyPath & MyFile) With ActiveSheet Windows("970305日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C1").Select Selection.PasteSpecial Paste:=xlPasteAll,         Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H1").Select Selection.PasteSpecial Paste:=xlPasteAll,       Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報1.xls").Activate ActiveWindow.Close Windows("970305日報2.xls").Activate Range("B31:B36").Select Selection.Copy Windows("日報リスト.xls").Activate Range("N1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970305日報2.xls").Activate Range("D31:D36").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("T1").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970305日報2.xls").Activate ActiveWindow.Close Windows("970306日報1.xls").Activate Range("B34:B38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("C2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Windows("970306日報1.xls").Activate Range("C33:C38").Select Application.CutCopyMode = False Selection.Copy Windows("日報リスト.xls").Activate Range("H2").Select Selection.PasteSpecial Paste:=xlPasteAll,   Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False ActiveWorkbook.Save Windows("970306日報1.xls").Activate ActiveWindow.Close -----------------------------------------

  • Excelの三つのVBAを一つにまとめる。

     初めまして、よろしくお願いします。当方全くの素人でVBAの基礎もよくわからず、ネットから拾ってきていじった三つのVBAがあります。この三つ、一つ一つは個別に機能するのですが、VBAとして正しいのかさえよく解っていません。この三つを一つにまとめて、同時に機能するようにしたいと頭を抱えています。 Sub TEST() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Range("b10:b20").Insert shift:=xlShiftToRight Range("b10:b20").Value = Range("a10:a20").Value Application.OnTime TimeValue("09:00:00"), "TEST" Application.ScreenUpdating = True Application.EnableEvents = True ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST1() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c30:c40").Copy Range("d30:d40").PasteSpecial Paste:=xlPasteValues Range("b30:b40").Copy Range("c30:c40").PasteSpecial Paste:=xlPasteValues Range("a30:a40").Copy Range("b30:b40").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("01:00:00") Application.OnTime nextTime, "TEST1" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST2() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c50:c60").Copy Range("d50:d60").PasteSpecial Paste:=xlPasteValues Range("b50:b60").Copy Range("c50:c60").PasteSpecial Paste:=xlPasteValues Range("a50:a60").Copy Range("b50:b60").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("00:10:00") Application.OnTime nextTime, "TEST2" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________  解る方、よろしくお願いします。

  • エクセル VBA 繰り返し処理を 簡潔にしたいのでお願いします。

    初心者です。繰り返し処理のシート名操作が分かりません。 上手く説明できないのですが、シートの名前が数字の1~20で 特定のセルを参照してテーブルにします。 現在、とても単純なコードを繰り返しています。 すっきりとさせるには、どのように記載するとよいのか 教えてください。 以下の処理を20回ほど繰り返します。  'シート1の特定セルをコピーします Sheets("1").Range("c3").Copy Range("A3").PasteSpecial Sheets("1").Range("c4").Copy Range("B3").PasteSpecial Sheets("1").Range("o2").Copy Range("C3").PasteSpecial Sheets("1").Range("o3").Copy Range("D3").PasteSpecial Sheets("1").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E3").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True 'シート2の特定セルをコピーします Sheets("2").Range("c3").Copy Range("A4").PasteSpecial Sheets("2").Range("c4").Copy Range("B4").PasteSpecial Sheets("2").Range("o2").Copy Range("c4").PasteSpecial Sheets("2").Range("o3").Copy Range("d4").PasteSpecial Sheets("2").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E4").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Sheets("3").Range("c3").Copy Range("A5").PasteSpecial Sheets("3").Range("c4").Copy Range("B5").PasteSpecial Sheets("3").Range("o2").Copy Range("c5").PasteSpecial Sheets("3").Range("o3").Copy Range("d5").PasteSpecial Sheets("3").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E5").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True

  • エクセル VBA マクロについて

    VBA初心者です。 Sub 記入() Range("H8", "J14").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("H15", "J21").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("H22", "J28").Copy Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False Range("K13").Select End Sub こういうマクロを作り上手く作動しましたのでB列に日付を記入したいと思い Sub 日付() Range("("B" & Rows.Count).End(xlUp).Offset(1)","("C" & Rows.Count).End(xlUp).Offset(0, -1)").Value = Date End Sub このようなマクロを組みましたがエラーがでます。どなたか直して頂けませんか?よろしくお願いします。

  • イベントを起こすと画面が揺れまくって大変です・・・結構見栄えもきついので回避できないでしょうか?

    以前ワークシートのイベントのプログラムを教えていただきありがとうございました。 参考に作ったプログラムなのですが・・・範囲をもう少しだけでかくしてやると画面がゆれて困っています。 値を入れてコピーしているときが特にひどいです。 複数セルを選択して消去しても大丈夫なようにかつ揺れない方法はないでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim r As Range For Each r In Target MyProc r Next End Sub Sub MyProc(Target As Range) Dim i As Long Application.EnableEvents = False If Selection.Cells.Count <> 1 Then Exit Sub ' 変更したセルに値が入った場合条件成立 If Trim(Target.Value) <> "" Then ' 行番号が10以上65530以内のとき条件成立 If Target.Row >= 10 And Target.Row <= 65530 Then ' BCD列で、5の倍数の行のとき条件成立 If (Target.Column >= 2) And (Target.Column <= 4) Then If (Target.Row Mod 5) = 0 Then If Target.Value <> "" Then For i = 0 To 4 Target.Copy Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues Next If (Target.Column = 2) Then Worksheets("Sheet4").Range("A2:K6").Copy Target.Offset(5, -1) End If End If Else Exit Sub End If End If End If Application.CutCopyMode = False End If Application.EnableEvents = True End Sub

  • ExcelのVBAでできますか?

    こんにちは。 項目1 項目2 あ a1 あ a2 あ a3 あ a4 い b1 い b2 い b3 い b4 い b5 い b6 い b7 というデータがあり、これを別シートに 項目1 項目2 項目3 項目4 項目5 項目6 項目7 項目8 あ a1 a2 a3 a4 い b1 b2 b3 b4 b5 b6 b7 と表示させたいです。 が、VB初心者なので「あ」のところまでしかできませんでした。 実際のデータは「い」から下もずーっとあるので変数などを使わなくてはいけないのでしょうが、よくわかりません。 どうしたらうまくいくでしょうか? ここまで自分でやってみました。 Range("A2").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ" Range("A2").Select Selection.Copy Sheets.Add ActiveSheet.Paste Sheets("Sheet1").Select Range("B2:B15").Select Application.CutCopyMode = False Selection.Copy Sheets(1).Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True

  • 続・VBAでセルに値が入ったときにイベントを起こしたい

    http://oshiete1.goo.ne.jp/qa4650025.htmlで教えていただきありがとうございました。大変分かりやすい解説でした。 こういうことが出来るんだーとわかりもっと使いやすいように仕様を変えた方がいいと気づき新たに書き込んでみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long ' 変更したセルに値が入った場合条件成立 If Trim(Target.Value) <> "" Then ' 行番号が10以上65530以内のとき条件成立 If Target.Row >= 10 And Target.Row <= 65530 Then ' BCD列で、5の倍数の行のとき条件成立 If (Target.Column = 2) And (Target.Row Mod 5) = 0 Then If Target.Value <> "" Then For i = 0 To 4 Target.Copy Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues Next Worksheets("Sheet4").Range("A2:K6").Copy Target.Offset(5, -1) End If ElseIf (Target.Column = 3) And (Target.Row Mod 5) = 0 Then If Target.Value <> "" Then For i = 0 To 4 Target.Copy Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues Next End If ElseIf (Target.Column = 4) And (Target.Row Mod 5) = 0 Then If Target.Value <> "" Then For i = 0 To 4 Target.Copy Target.Offset(i, 10).PasteSpecial Paste:=xlPasteValues Next End If Else Exit Sub End If End If End If End Sub ここまでは何とか出来たのですが問題点があります・・・ ・複数セルを選択してDELすると実行時エラー13が出ます。(別の回答にあったやつですが・・・) ・別シートより範囲指定したセルをコピーして張り付けるときも出ます。 ・B列には6桁の整数値しか入らないようにしたいけど整数値限定は可能?・・・その整数値を貼り付ける際日付型へのフォーマットが難しい などあります。ヒントをいただけないでしょうか?

専門家に質問してみよう