• 締切済み

行を挿入したときに自動的に値を入れる方法

A1に、1が入力されています。 A2に、仮に3が入力されているとします。 1行目と2行目の間に1行挿入したときに、自動的に新しいA2に2を入力するようなことは可能でしょうか?

みんなの回答

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

こんばんは。 >自動的に新しいA2に2を入力するようなことは可能でしょうか? 可能ではあるけれども、細かい仕様が必要です。単に、1 と 3 の間に、挿入したら、2を手で入れる程度のこととを、自動化するのは、Excelでは、かなり苦労してしまうことです。別に、出し惜しみではなくて、自分の希望しているのと違いました、といわれるのもきついのです。 マクロとしては、#2のimogasiさんもおっしゃられるように、イベントの内容としては、かなりヘビー級です。 私も一応、常連の一人としては、もう少し、具体的な内容を教えてもらわないといけないように思います。一体、どのような状態で質問しているのか、ということですね。 いわゆる「穴埋め式マクロ」というなら、以下のようにすればよいです。 ただし、時間の場合は、以下のマクロではできません。 データのあるセルをアクティブセルにしてください。 以下は、最初の行は、1行目ですから、そうでなければ、START のところを変更してください。 間の差は、小数点も入るように、Double型にはなっていますが、やめたほうがよいです。 なお、空白の間のセルは、自動的に計算していれます。 '標準モジュール Sub SkipInsertMacro() Dim rng As Range Dim i As Long  Const DIF As Double = 1 '間の差  Const START As Long = 1 '最初の行..1行目..1以上    Set rng = Range(Cells(START, ActiveCell.Column), _          Cells(Rows.Count, ActiveCell.Column).End(xlUp))  If rng.Count = 1 Then Beep: Exit Sub  Application.ScreenUpdating = False  With rng  For i = .Count To START + 1 Step -1   If .Cells(i - 1, 1).Value = "" Then     .Cells(i - 1, 1).Value = .Cells(i, 1).Value - DIF   ElseIf .Cells(i, 1).Value - .Cells(i - 1, 1).Value > DIF Then    .Cells(i, 1).EntireRow.Insert    .Cells(i, 1).Value = .Cells(i - 1, 1).Value + DIF    i = i + 2   End If  Next i  End With  Application.ScreenUpdating = True  Set rng = Nothing End Sub

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.4

行挿入も含めてVBAにすれば簡単です カーソルをA2において、次のVBAを実行します Sub TEST()  ActiveCell.Rows("1:1").EntireRow.Select  Selection.Insert Shift:=xlDown  ActiveCell.Select  l = ActiveCell.Row()  Cells(l, 1) = (Cells(l - 1, 1) + Cells(l + 1, 1)) / 2 End Sub

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

#2です。行挿入したとき、アクチブセルが空白になる事実を思いついて Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub Application.EnableEvents = False If ActiveCell = "" Then ActiveCell = ActiveCell.Offset(-1, 0) + 1 End If Application.EnableEvents = True End Sub をやってみた。 ーー 制約 (1)A列1列にだけ効果あり。(これは別列に変えられるが) (2)普通に挿入ー行の時だけはうまくいく。 (3)前の上行に+1した数をセットする。他のルールに変えられるかも。 (3)A列は数字ばかりの入力とする。数字なら+1できるから。 文字列なら空白などはできる。 (4)セルの値のDELも(3)をしてしまうので、DELは使えない。 (苦しい事実) ーー お遊び程度の不完全なものになる。 それなら、質問のメインの作業が終ってからまとめて(バッチ作業という。)、VBAで、全行について空白セルに、考えているルールの値を出した方が良さそう。

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

手操作(メニュー項目の機能その他)ではできないでしょう。 ーー 何々したときという、機会を捉えるのは、VBAではイベントという仕組みを使わざるを得ないが、「シートに行挿入したとき」というイベントは既定では設けられておらず、別途自作も、並みのVBA経験者では難しいようです。 http://aol.okwave.jp/qa3402525.html の#1のご回答 ーー >自動的に新しいA2に2を入力するようなことは 2というのはどうして出すの? 1と3だから2は思いつきやすいが、1と5ならどうするの。上の行の値+1で良いということ?中間地値?。

回答No.1

新しい行を挿入した場合はわかりませんが、 コピーしたセルの挿入をする場合なら、 A1に=ROW() と入れ、 A2に 3 が入っているとして、 1行目を行コピーして2行目を右クリックし、 コピーしたセルの挿入を押せば、 A2に2が現れ、A3にそのまま3が下ります。

関連するQ&A