重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

こんばんは、宜しくお願いします。
エクセルで行を挿入し前行の数式をコピーするマクロの記録を行ったのが下記の内容です。
Sub Sounyu()
'
' Sounyu Macro
'
Rows("4:4").Select
Selection.Insert Shift:=xlDown
Range("B3:C3").Select
Selection.AutoFill Destination:=Range("F3:F4"), Type:=xlFillDefault
Range("F3:F4").Select
Range("G3").Select
Selection.AutoFill Destination:=Range("G3:G4"), Type:=xlFillDefault
Range("G3:G4").Select
Range("A2").Select
End Sub

最後の Range("A2").Selectを挿入した行のAのセルへ
カーソルがいくようにするにはどのように変更したら
良いのでしょうか?
教えてください。

A 回答 (18件中1~10件)

こんばんわ。

早速修正マクロを作ってみました。次の手順で操作してみて下さい。

1.前回マクロを貼り付けたブックを立ち上げる。
2.Sheet1モジュールシートを開き、コードをすべて削除した後、下記のコードをコピー・ペーストする。


Private Sub Worksheet_Activate()

Call Module1.myCell_Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim myRow As Long
Dim myCnt As Integer
Dim i As Integer
Dim myMsb As Integer
Dim myCell1 As String
Dim myCell2 As String

myRow = Target.Row
myCnt = Cells(1, Columns.Count).Column
For i = 1 To myCnt
If Target.Address = Cells(myRow, i).Address Then Exit Sub
Next i

If Range("A" & myRow).Value = "" Then Exit Sub
myMsb = MsgBox("削除処理を実行してもよろしいですか?", vbYesNo + vbQuestion, "作 業 確 認")
If myMsb = vbNo Then End

Application.EnableEvents = False
Target.Delete shift:=xlShiftUp
Application.EnableEvents = True
If myRow = 2 And Range("A" & myRow).Value = "" Then Exit Sub

If Cells(Rows.Count, 7).End(xlUp).Offset(0, -6).Value = "" Then
Application.EnableEvents = False
Cells(Rows.Count, 7).End(xlUp).Value = ""
Cells(Rows.Count, 8).End(xlUp).Value = ""
Application.EnableEvents = True
End If

Application.EnableEvents = False
Call Module1.myCalculation(myRow)
Application.EnableEvents = True

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myRow As Long
Dim myColumn As Integer
Dim myRange As Range

myRow = Target.Row
If myRow = 1 Then Exit Sub
myColumn = Target.Column
Select Case myColumn

Case 1, 6, 7

If Target.Address = Range("A" & myRow).Address Then
If myRow = 1 Or myRow = 2 Then Exit Sub
If Range("A" & myRow).Value <> "" Then
If Target.Value = Target.Offset(-1, 0).Value Then
If Target.Offset(1, 0).Value <> "" Then
Rows(myRow + 1 & ":" & myRow + 1).Insert shift:=xlShiftDown
End If
Else
Rows(myRow & ":" & myRow).Insert shift:=xlShiftDown
End If
If Cells(Rows.Count, 1).End(xlUp).Row < Cells(Rows.Count, 7).End(xlUp).Row Then
Application.EnableEvents = False
Cells(Rows.Count, 7).End(xlUp).Value = ""
Cells(Rows.Count, 8).End(xlUp).Value = ""
Application.EnableEvents = True
End If
End If
Application.EnableEvents = False
Call Module1.myCell_Select
Application.EnableEvents = True
End
ElseIf Target.Address = Range("F" & myRow).Address Then
If myRow = 1 Then Exit Sub
If Range("A" & myRow).Value = "" Then Exit Sub
Application.EnableEvents = False
If Target.Offset(0, 1).Value = "" Then
Range("G" & myRow).Select
Application.EnableEvents = True
End
Else
If Target.Value = "" Then
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value * 0.75
Else
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End If
End If
Application.EnableEvents = True
ElseIf Target.Address = Range("G" & myRow).Address Then
If myRow = 1 Then Exit Sub
If Range("A" & myRow).Value = "" Then Exit Sub
Application.EnableEvents = False
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, 1).Value = Target.Value * 0.75
Else
Target.Offset(0, 1).Value = Target.Value
End If
Application.EnableEvents = True
End If
Application.EnableEvents = False
Call Module1.myCalculation(myRow)
Range("A" & myRow + 1).Select
Application.EnableEvents = True

End Select

End Sub

また、不都合なことがありましたら、お知らせ下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
修正していただいたマクロ、確認させていただきまた。
おかげさまでとても、使いやすい表を作成することができました。
少しでも簡単にデータ入力をと考えた小さなマクロから、大作業をしていただくこととなりお手数に感謝しています。
私はもちろん、社会復帰でがんばろうとする大お姉さま方も、PC恐怖症で仕事嫌いになることも減少すると喜んでます!
また、宜しくお願い致します。
ありがとうございました。

お礼日時:2002/10/04 16:38

こんばんは。

コマンドボタンは、次のように操作して出します。
また、コマンドボタンを配置するだけでimogasiさんのマクロは動きます。

 ・ファイルメニューにマウスポインターをあわせて右クリックし、出てき  たプルダウンメニューのVisual Basicをクリックする。
 ・出てきたツールバーの右から3番目(コントロールツールボックス)をク  リックし、コントロールツールボックスの一番右側の上から2番のコマ  ンドボタンをクリックし、シートの適当な位置でクリックする。
 ・ツールバーの2番目(デザインモード)のボタンが押された状態になって  いたらそのボタンをクリックしてOFFの状態にする。

この状態にしてボタンをクリックしてみて下さい。動作します。
    • good
    • 0
この回答へのお礼

お礼が大変遅くなり申し訳ありませんでした。
おかげさまでマクロの動作を確認できました。
長い間、面倒を見ていただいて本当ありがとうございました。
また、宜しくお願い致します。

お礼日時:2002/11/08 11:16

#14のものです。

私の回答に#16で言及があったので。
(1)私のはエベントを捉えているので、挿入モードと非挿入 モードを分けないと、他の操作に差し支えるのであのようにしました。
 #5はそういう方向ではない。
(2)Changeエベントを使っている。
 #5はそういう方向ではない。
(3)基本的に挿入の部分のコードは誰が書いても似たも のになると思いますが。
(4)>「G2に入れた数式をG3へコピーすると数式の選択セル も変更されてしまう」
 これは本質問が、コピー後コピー元とコピー先が全く変更し ないと言う条件付きであるとは、解せませんでした。
 また問題にされる意味が判りません。
(5)私が#14を載せようと思ったのは、回答文が長く(私 のも(1)のために長くなっており済みません)質問者の理 解や読持続力を超えているのではと思ったためでした。
 しかし私もどんどん増やしているので、済みません。

この回答への補足

こんにちは。
PC環境から離れていたため、ご連絡が遅くなりましたことをお詫びいたします。

#15にて補足いただいたのですが・・・
恥ずかしながら、マクロを確認する前の段階で
つまずいております。

>(1)ボタンは、VBのツールバーのコマンドボタン>をワークシートにドロップアンドドロップして、貼り>付けます。

「VBのツールバーのコマンドボタン」
これが何処にあるのかがわからないでおります。
また、このボタンをドロップアンドドロップするだけで、sheet1をダブルクリックして作っていただいたコードを記載したマクロがボタンに割り当てられるものなのでしょうか?
超超未熟者でお話にならないとお思いでしょうが、
お許し頂きたくm(__)m

補足日時:2002/10/17 16:16
    • good
    • 0

こんばんわ。

皆様に喜んでいただけて私も作った甲斐があります。何度も修正にお手数をおかけして時間がかかり、申し訳ございませんでした。
おせっかいかもしれませんが、#14imogasiさんの作られたマクロは、私が#5でご紹介したサンプルマクロと同じ内容のものです。
imogasiさんのマクロを実行すると、G2に入れた数式をG3へコピーすると数式の選択セルも変更されてしまうという問題が生じると思います。
老婆心ながら、生意気なことを書かせていただきました。ご無礼をお許し下さい。
    • good
    • 0

#4のものです。

補足要求に対し、補足します。
(1)ボタンは、VBのツールバーのコマンドボタンをワークシートにドロップアンドドロップして、貼り付けます。
VBのForm1のようにFormを持ってくる必要はありません。邪魔です。シートがコントロールの台帳的役割をします。VBはFormが必須ですが、エクセルはワークシートに
貼り付けられます。データの邪魔にならないところに貼り付けてください。
(2)ボタンのCaptionは、初期状態として、プロパティ画面等で「挿入」とすべきですが、1回クリックすると「挿入」になるので省略しました。
(3)(A)ボタンはSheet1上の貼り付けられたコントロール(B)Selection_ChangeはSheet1のイベントなので、プロジェクトのSheet1をダブルクリックして出てくる画面に、両方とも貼り付けて下さい。
(4)マクロの記録をボタンに登録するのは(任意の時に)簡単に起動するために象徴化するのですが、(A)本件のコマンドボタンの押し下げ(B)Sheet1のSelectの変化を契機とする(プログラムの1部の実行の契機となる)もので
同列には論ぜられません。Aがないと、Bはシートを開くと常時待機体制になります。それを常時行われないように、安全装置として、非挿入モードを作っているわけです。

この回答への補足

回答をありがとうござました。
私の質問に沢山の検討をいていただいて感謝しています。
#5との同、異など少し理解をすることに時間を必要とするため暫くのお時間ください!
皆様のお手数を少しでも無駄にしたくないので・・・

補足日時:2002/10/07 00:25
    • good
    • 0

<もっと簡単に出来るのではないか>


#3で補足要求を入れたものです。質問を理解して頂けなくて
残念でした。それは良いのです。しかし他のご解答のたびに
解答が入りますので、読んでいました。しかし膨大な補足と
解答を読解できる力がありませんで失礼しますが,こんなに
長くなるのと思い、
「エクセルで行を挿入し前行の数式をコピーする」事を短く
実現を目指しました。
●<操作>
(1)Sheet1にボタンを1つ貼り付ける。「非挿入」と「挿入」はクリックで反転する。必ず「挿入」の表示にして、コピー元のセルをクリックする。
(2)クリックした行の直下行に1行自動的に挿入し、挿入した行に、クリックした行をコピーします。
(3)操作後は挿入行をSelect状態ですが
   任意のセルをSelect状態にする。
   クリックしたセルの直下セルをSelect状態に
   することは簡単ですが省略します。
(4)[非挿入」には自動的にします。
(5)コピー元以外にカーソルを一旦置いて、挿入状態にして、挿入行をクリックして貰ったほうが良い。
●<コード>
ボタンについては、VBEのSheet1のコード面に
Private Sub CommandButton1_Click()
If CommandButton1.Caption = "挿入" Then
CommandButton1.Caption = "非挿入"
Else
CommandButton1.Caption = "挿入"
End If
End Sub
======
同じくSheet1のコードの画面に
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If CommandButton1.Caption = "挿入" Then
r = Target.Row: c = Target.Column
Worksheets("sheet1").Cells(r + 1, c).EntireRow.Insert
CommandButton1.Caption = "非挿入"
Rows(r).Copy
Rows(r + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
'-----
Else
Exit Sub
End If
End Sub
を貼り付けてください。
●テストする時は、「元に戻す」が効きませんので、必ずコピー
したシートで行ってください。

この回答への補足

回答をありがとうございました。
作成していただいたマクロのテストを試みたいと思っているのですが,
大変申し訳ないことに、手順が良くわかりません。

>(1)Sheet1にボタンを1つ貼り付ける。

ボタンはフォームで作成すればよろしいのですよね?
テキストの編集は必要ないですか?(ボタン1のまま)

>●<コード>
>ボタンについては、VBEのSheet1のコード面に
>同じくSheet1のコードの画面に

VBEのSheet1(コード)の面に2種類を連記で良いのですよね?

フォームでボタンに作成していただいたマクロを登録するのでしょうか?
マクロの記録で作成したマクロをボタンに登録する方法とは違っているように思われるのですが、登録の手順がわかりません…
お手数とは思いますが手順方法を詳しく教えていただけるでしょうか。

宜しくお願いいたします。

補足日時:2002/10/04 16:39
    • good
    • 0

こんにちは。


修正するのはよろしいのですが、どの様に修正するのか教えて下さい。以上の点がわからないと、修正プログラムを書くことができません。

この回答への補足

こんばんは。
またも、説明不足ですみませんm(__)m

区分(F列)へのデータ入力が有る場合、確定でTABキーまたは→を使用しても選択セルが日付(A列)へ移動するのですが、続けて金額を入力したいので選択セルは価格(G列)へ移動するようにお願いしたいと思います。
宜しくお願いいたします。

補足日時:2002/10/01 22:33
    • good
    • 0

こんばんわ。

少し手間を取ってしまいましたが、サンプルマクロを作り上げることができました。初期入力・追加入力・行削除を実行後、自動で再計算できるように作りました。また、価格と実価格それぞれの合計も最終行の2行下へ自動計算で値を出力できるように作りました。ただし、行削除を実行するときは、必ず行番号をクリックし、行全体を選択するようにしてください。

1.VBE画面左上のSheet1の上で右クリック→挿入→標準モジュールをクリック

2.画面右側の白い部分に下のコードをコピー・ペーストする。

Sub myCalculation(myRow As Long)

Dim myCell1 As String
Dim myCell2 As String
Dim mySum1 As Long
Dim mySum2 As Long

If Range("A" & myRow).Value = "" Then
If Range("A" & myRow - 2).Value = "" Or myRow = 3 Then
Range("I" & myRow - 1).Value = Range("H" & myRow - 1).Value
Else
myCell2 = Range("H" & myRow).End(xlUp).Address
myCell1 = Range(myCell2).End(xlUp).Address
Range("I" & myRow - 1).Value = ""
Range(myCell2).Offset(0, 1).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
Else
If Range("A" & myRow - 1).Value = "" Or myRow = 2 Then
If Range("A" & myRow + 1).Value = "" Then
Range("I" & myRow).Value = Range("H" & myRow).Value
Else
myCell1 = Range("H" & myRow).Address
myCell2 = Range(myCell1).End(xlDown).Address
Range("I" & myRow - 1).Value = ""
Range(myCell2).Offset(0, 1).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
ElseIf Range("A" & myRow - 1).Value <> "" Then
If Range("A" & myRow + 1) = "" Then
myCell2 = Range("H" & myRow).Address
myCell1 = Range(myCell2).End(xlUp).Address
Else
myCell1 = Range("H" & myRow).End(xlUp).Address
myCell2 = Range("H" & myRow).End(xlDown).Address
End If
Range("I" & myRow - 1).Value = ""
Range(myCell2).Offset(0, 1).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
End If


myCell1 = Cells(Rows.Count, 1).End(xlUp).Offset(0, 6).Address
myCell2 = Cells(Rows.Count, 1).End(xlUp).Offset(0, 7).Address
Range(myCell1).Offset(2, 0).Value = Application.WorksheetFunction.Sum(Range("G2:" & myCell1))
Range(myCell2).Offset(2, 0).Value = Application.WorksheetFunction.Sum(Range("H2:" & myCell2))

End Sub

Sub myCell_Select()

Dim myRow As Long
Dim myColumn As Integer

myRow = Cells(Rows.Count, 1).End(xlUp).Row
myColumn = Cells(1, Columns.Count).Column
myColumn = Cells(myRow, myColumn).End(xlToLeft).Column
Select Case myColumn

Case 1
Cells(myRow, 2).Select
Case 2
Cells(myRow, 3).Select
Case 3
Cells(myRow, 4).Select
Case 4
Cells(myRow, 5).Select
Case 5
Cells(myRow, 6).Select
Case 6
Cells(myRow, 7).Select
Case Else
Cells(myRow + 1, 1).Select

End Select

End Sub

3.Sheet1のモジュールシートに、下のコードをコピー・ペストする。

Private Sub Worksheet_Activate()

Call Module1.myCell_Select

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim myRow As Long
Dim myCnt As Integer
Dim i As Integer
Dim myMsb As Integer
Dim myCell1 As String
Dim myCell2 As String

myRow = Target.Row
myCnt = Cells(1, Columns.Count).Column
For i = 1 To myCnt
If Target.Address = Cells(myRow, i).Address Then Exit Sub
Next i

If Range("A" & myRow).Value = "" Then Exit Sub
myMsb = MsgBox("削除処理を実行してもよろしいですか?", vbYesNo + vbQuestion, "作 業 確 認")
If myMsb = vbNo Then End

Application.EnableEvents = False
Target.Delete shift:=xlShiftUp
Application.EnableEvents = True
If myRow = 2 And Range("A" & myRow).Value = "" Then Exit Sub

If Cells(Rows.Count, 7).End(xlUp).Offset(0, -6).Value = "" Then
Application.EnableEvents = False
Cells(Rows.Count, 7).End(xlUp).Value = ""
Cells(Rows.Count, 8).End(xlUp).Value = ""
Application.EnableEvents = True
End If

Application.EnableEvents = False
Call Module1.myCalculation(myRow)
Application.EnableEvents = True

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myRow As Long
Dim myColumn As Integer
Dim myRange As Range

myRow = Target.Row
If myRow = 1 Then Exit Sub
myColumn = Target.Column
Select Case myColumn

Case 1, 6, 7

If Target.Address = Range("A" & myRow).Address Then
If myRow = 1 Or myRow = 2 Then Exit Sub
If Range("A" & myRow).Value <> "" Then
If Target.Value = Target.Offset(-1, 0).Value Then
If Target.Offset(1, 0).Value <> "" Then
Rows(myRow + 1 & ":" & myRow + 1).Insert shift:=xlShiftDown
End If
Else
Rows(myRow & ":" & myRow).Insert shift:=xlShiftDown
End If
If Cells(Rows.Count, 1).End(xlUp).Row < Cells(Rows.Count, 7).End(xlUp).Row Then
Application.EnableEvents = False
Cells(Rows.Count, 7).End(xlUp).Value = ""
Cells(Rows.Count, 8).End(xlUp).Value = ""
Application.EnableEvents = True
End If
End If
Application.EnableEvents = False
Call Module1.myCell_Select
Application.EnableEvents = True
End
ElseIf Target.Address = Range("F" & myRow).Address Then
If myRow = 1 Then Exit Sub
If Range("A" & myRow).Value = "" Then Exit Sub
Application.EnableEvents = False
If Target.Offset(0, 1).Value <> "" Then
If Target.Value = "" Then
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value * 0.75
Else
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End If
End If
Application.EnableEvents = True
ElseIf Target.Address = Range("G" & myRow).Address Then
If myRow = 1 Then Exit Sub
If Range("A" & myRow).Value = "" Then Exit Sub
Application.EnableEvents = False
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, 1).Value = Target.Value * 0.75
Else
Target.Offset(0, 1).Value = Target.Value
End If
Application.EnableEvents = True
End If
Application.EnableEvents = False
Call Module1.myCalculation(myRow)
Call Module1.myCell_Select
Application.EnableEvents = True

End Select

End Sub

4.ThisWorkbookのモジュールシートに下のコードをコピーペーストする。

Private Sub Workbook_Open()

Call Module1.myCell_Select

End Sub

もし、不都合なことがありましたらお知らせ下さい。

この回答への補足

サンプルマクロをありがとうございました。
たびたびのお手間、貴重なお時間を使っていただいていることに本当に感謝しています。
マクロの確認をさせていただきました。

気づいた箇所が1点あり、修正のお願いができるかと思いご連絡いたします。
データを入力し、区分(F列)へデータを入力し確定すると、選択セルが日付(A列)へ移動してしまうようです。区分(F列)へのデータ入力が無い場合は問題ないようです。
自分で修正できればと思いましたが、今の私にはもう何が何だか・・・^_^;
お手数かとは思いますが、修正をお願いできるでしょうか?
宜しくお願い致します。

補足日時:2002/10/01 08:57
    • good
    • 0

こんばんわ。

あなた様が作られている表構成を確認するために、サンプルマクロを作りました。
前回と同じように新規ブックを開き、Sheet1のモジュールシートに下記のコードを貼り付け、データー入力してみて下さい。一度入力して自動計算をした値は「区分」の有無を変更した時に自動計算できるように訂正してあります。
もし、この表構成でよろしければ次のことをお知らせ下さい。完全なサンプルマクロを作りたいと思います。
1.今回は空白行を設けましたが、この行にデータを入力することがあるかどうか。もし、あるとしたらどのようなデータを入力するのか。
2.1行すべてを削除することがあるのかどうか。また、その時合計の自動計算が必要かどうか。
3.その他気がついた点で、修正してほしい内容

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myRow As Long
Dim myCell1 As String
Dim myCell2 As String
Dim myRange As Range

myRow = Target.Row
If Target.Address = Range("A" & myRow).Address Then
If myRow = 1 Or myRow = 2 Then Exit Sub
If Target.Value <> "" Then
If Target.Value <> Target.Offset(-1, 0).Value Then
Rows(myRow & ":" & myRow).Insert Shift:=xlShiftDown
If Target.Address = "$A$4" Then
Target.Offset(-1, 6).Value = Range("F2").Value
Else
myCell1 = Target.Offset(0, 6).End(xlUp).Offset(1, -1).Address
myCell2 = Target.Offset(-1, 5).Address
Target.Offset(-2, 6).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
End If
Target.Offset(0, 1).Select
End If
ElseIf Target.Address = Range("D" & myRow).Address _
Or Target.Address = Range("E" & myRow).Address Then
If myRow = 1 Then Exit Sub
If Target.Column = 4 And Target.Offset(0, 1).Value <> "" Then
If Target.Value = "" Then
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value * 0.75
Else
Target.Offset(0, 2).Value = Target.Offset(0, 1).Value
End If

If Target.Offset(0, 3).End(xlDown).Address <> Cells(Rows.Count, 7).Address Then
If Target.Offset(-1, 2).Value = "" Then
myCell1 = Target.Offset(0, 2).Address
Else
myCell1 = Target.Offset(0, 2).End(xlUp).Address
End If
myCell2 = Range(myCell1).End(xlDown).Address
Target.Offset(0, 3).End(xlDown).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
ElseIf Target.Column = 5 Then
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, 1).Value = Target.Value * 0.75
Else
Target.Offset(0, 1).Value = Target.Value
End If

If Target.Offset(0, 2).End(xlDown).Address <> Cells(Rows.Count, 7).Address Then
If Target.Offset(-1, 1).Value = "" Then
myCell1 = Target.Offset(0, 1).Address
Else
myCell1 = Target.Offset(0, 1).End(xlUp).Address
End If
myCell2 = Range(myCell1).End(xlDown).Address
Target.Offset(0, 2).End(xlDown).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
End If

Set myRange = Cells(Rows.Count, 1).End(xlUp)
If myRange.Offset(0, 1).Value = "" Then
myRange.Offset(0, 1).Select
ElseIf myRange.Offset(0, 5).Value <> "" Then
myRange.Offset(1, 0).Select
Else
myRange.End(xlToRight).Offset(0, 1).Select
End If
End If

End Sub

お手数をおかけいたしますが、よろしくお願いいたします。

この回答への補足

たびたびのお手間、感謝しています。
頂いたサンプルマクロを確認させていただきました。

設けて頂いた日付が変わった際の空白行へは、通常ではデータを入力することはありません。
ですが、入力漏れがあった際に行を挿入等してデータを追加する場合はあるかと思います。

1.その際、日別の小計を再計算させ日別の最終行へ表示することは可能でしょうか?
また、削除した際の日別小計の再計算表示も可能でしょうか?

1行を全て削除、または範囲を指定して複数行を削除することも考えられます。
価格と実価格の合計を入力済みデータの最終行より2、3行下に表示したいのですが、現行では入力データが増えて合計を出してある欄に迫ってきたところで再度セルを移動しSUMの再計算をしています。

2.マクロで、常に最終行後に表示し再計算するようになりますか?

今回頂いた、サンプルマクロで気が付いた点としては、
最初に入力するデータが1行のみであった場合、
日別小計が次行のスペースの行へ表示されるようです。

お言葉に甘えまして、またマクロの作成を依頼できるのでしたら、甘えついでにお願いをしても良いでしょうか…
区分の前に2行項目を増やしていただけますか。
増えた列はデータの入力だけで、計算はありません。
よって、D列(区分)→F列、E列(価格)→G列、
F列(実価格)→H列、G列(日別小計)→I列
と変更したいのですが…

前回のマクロはマニュアル片手に何とか変更させたので、お手数なようでしたら、現行のままでも結構です。
いろいろと勝手なお願いで申し訳ありませんが、宜しくお願いします。

補足日時:2002/09/26 13:47
    • good
    • 0

私の考えで、マクロを作ってみました。


まず最初に、前回と同じ方法で、下記のコードを新規ブックのSheet1モジュールにコピー・ペーストして下さい。

Private Sub Worksheet_Activate()

Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Select

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myCell1 As String
Dim myCell2 As String

If Target.Column = 1 Then
If Target.Address = "$A$1" Or Target.Address = "$A$2" Then
Exit Sub
Else
If Target.Value = Target.Offset(-1, 0).Value Then
Target.Offset(-1, 6).Value = ""
Target.Offset(0, 6).Value = ""
Else
If Target.Offset(-1, 0).Value <> Target.Value Then
If Target.Address = "$A$3" Then
Target.Offset(-1, 6).Value = Range("F2").Value
Else
myCell1 = Target.Offset(0, 6).End(xlUp).Offset(1, -1).Address
myCell2 = Target.Offset(-1, 5).Address
Target.Offset(-1, 6).Value = Application.WorksheetFunction.Sum(Range(myCell1 & ":" & myCell2))
End If
End If
End If
End If
ElseIf Target.Column = 5 Then
If Target.Value = "" Then
Target.Offset(0, 1).Value = ""
Target.Offset(0, 2).Value = ""
Else
If Target.Offset(0, -1).Value = "" Then
Target.Offset(0, 1).Value = Target.Value * 0.75
Else
Target.Offset(0, 1).Value = Target.Value
End If
If Target.Offset(1, -4).Value <> "" Then
If Target.Offset(1, -4).Value <> Target.Offset(0, -4).Value Then
myCell1 = Application.WorksheetFunction.Sum(Range("F2:" & Target.Offset(0, 1).Address))
myCell2 = Application.WorksheetFunction.Sum(Range("G2:" & Target.Offset(-1, 2).Address))
Target.Offset(0, 2).Value = myCell1 - myCell2
End If
End If
Target.Offset(1, -4).Select
End If
End If

End Sub

今度は、VBE画面の左上のThisWorkbookをダブルクリックし、ThisWorkbookのモジュールを開きます。そのモジュールに以下のコードをコピーペーストして下さい。

Private Sub Workbook_Open()

ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Select

End Sub

次のように操作してみてください。
1.エクセル画面に戻り、1行目に項目名を入力。
2.データーを入力してみて下さい。自動的に計算されて表が完成していきます。
    • good
    • 0
この回答へのお礼

サンプルマクロの使用を試みました。
データは問題なく、作成できました。
始めの考えでは最終行に合計を入れてあるために、枠線に囲まれた行を1行ずつ増ていくことを考えていましたが、
作っていただいたマクロを利用していくことで便利になったことから比べれば、現行に必要な表では合計を出す作業は必要のたびでもかまわないことと思っています。
使用させていただくマクロは作成していただいたもので十分ですが、気づいた点として入力済のデータを選択範囲してDeleteするとマクロの「実行時エラー”13”型が一致しません」のエラー表示のあること、一度入力して自動計算をした値は「区分」の有無を変更しただけでは自動計算はしないということです。
上記の2点の正負が私には判断つかないのですがご連絡をさせていただきます。
マクロを利用していきたいと足を踏み入れても、作っていただいたマクロを理解することもできない・・・何とか覚えたいが道は遠い・・・
長い間、ご相談いただきまして本当に本当にありがとうございました!
また、宜しくお願いします。

お礼日時:2002/09/23 00:23

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