アプリ版:「スタンプのみでお礼する」機能のリリースについて

A1に、1が入力されています。
A2に、仮に3が入力されているとします。

1行目と2行目の間に1行挿入したときに、自動的に新しいA2に2を入力するようなことは可能でしょうか?

A 回答 (5件)

新しい行を挿入した場合はわかりませんが、


コピーしたセルの挿入をする場合なら、

A1に=ROW() と入れ、
A2に 3 が入っているとして、

1行目を行コピーして2行目を右クリックし、
コピーしたセルの挿入を押せば、
A2に2が現れ、A3にそのまま3が下ります。
    • good
    • 0

手操作(メニュー項目の機能その他)ではできないでしょう。


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

#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で、全行について空白セルに、考えているルールの値を出した方が良さそう。
    • good
    • 0

行挿入も含めて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
    • good
    • 0

こんばんは。



>自動的に新しい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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!