dポイントプレゼントキャンペーン実施中!

入力表と集計表を作成し入力シートの入力表にデータを入れてマクロを実行すると集計表にレコード転記されるようにしました。

集計表シートに転記することは出来たのですが入力表でデータを修正した後集計表に上書き保存する方法がわかりません。

もしご存じの方がいたらご教示お願いいたします。

下記のコードで転記をしています。

Sub ボタン1_Click()

Dim lastRow As Long

lastRow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row

Worksheets("集計表").Cells(lastRow + 1, 1) = Worksheets("入力表").Cells(1, 2)
Worksheets("集計表").Cells(lastRow + 1, 2) = Worksheets("入力表").Cells(2, 2)
Worksheets("集計表").Cells(lastRow + 1, 3) = Worksheets("入力表").Cells(3, 2)
Worksheets("集計表").Cells(lastRow + 1, 4) = Worksheets("入力表").Cells(4, 2)
Worksheets("集計表").Cells(lastRow + 1, 5) = Worksheets("入力表").Cells(5, 2)
Worksheets("集計表").Cells(lastRow + 1, 6) = Worksheets("入力表").Cells(6, 2)
Worksheets("集計表").Cells(lastRow + 1, 7) = Worksheets("入力表").Cells(7, 2)
Worksheets("集計表").Cells(lastRow + 1, 8) = Worksheets("入力表").Cells(8, 2)
Worksheets("集計表").Cells(lastRow + 1, 9) = Worksheets("入力表").Cells(2, 3)

Worksheets("入力表").Cells(1, 2).Clear
Worksheets("入力表").Cells(2, 2).Clear
Worksheets("入力表").Cells(3, 2).Clear
Worksheets("入力表").Cells(4, 2).Clear
Worksheets("入力表").Cells(5, 2).Clear
Worksheets("入力表").Cells(6, 2).Clear
Worksheets("入力表").Cells(7, 2).Clear
Worksheets("入力表").Cells(8, 2).Clear
Worksheets("入力表").Cells(2, 3) = ""

MsgBox "転記しました。"


End Sub

A 回答 (2件)

#1です


訂正します。;;
間違え
.Range("B1:B8", "C2").ClearContents

正しくは
.Range("B1:B8, C2").ClearContents

書式などすべてをクリアーするなら.Clearで
    • good
    • 0

こんばんは、


>修正した後集計表に上書き保存する方法がわかりません。
新規で書き込む時は、
lastRow = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
lastRow + 1
で行番号を特定していますが、上書きする場合、対象の行番号をどのように取得するかが、問題です。

つまり、入力表のどこかのセル(一意の値が望ましい)の値で
集計表の該当セルを特定して行番号を取得してlastRow + 1の代わりに使えば、その行の値が上書きされます。

入力表のB1セルの値が一意の値ならその値をキーワードにして集計表のA列を探せば良いと思います。 探し方は色々方法があります。
一意の値で1行目からデータがあるなら、ExcelのMATCH関数でも取得できると思いますし、Findや範囲をべたにループしても取得できます。

書き換えを行う時の入力表の情報を精査してどの値で集計表の該当セルを探すか考えてみましょう。

少し気になったのですが、オブジェクトSheet2は、Worksheets("集計表")の事でしょうか?もし違うなら、違うシートの新規行(lastRow + 1)を取得する意味が解りません。。同じなら、オブジェクト名にするかシート名にするか、またはインデックスなどで統一した方が後に良いと思います。

分かり難いかも知れませんが、ご質問のコードを添削して、
入力表C2セルの値で探し出してその行を上書きするサンプルです。

Sub ボタン1_Click()
Dim TrgRow As Long
Dim keyword As String
Dim Ary
Dim SH_集計表
 Set SH_集計表 = Worksheets("集計表")
 keyword = Worksheets("入力表").Range("C2").Value
 On Error Resume Next
 TrgRow = SH_集計表.Range("I1", SH_集計表.Cells(Rows.Count, "I").End(xlUp)) _
    .Find(What:=keyword, LookIn:=xlValues, LookAt:=xlWhole).Row
 If TrgRow >= 1 Then
  With Worksheets("入力表")
   Ary = .Range("B1:B8")
   SH_集計表.Cells(TrgRow, 1).Resize(, 8).Value = _
   Application.Transpose(Ary)
   SH_集計表.Cells(TrgRow, 1).Offset(, 8).Value = .Cells(2, "C").Value
   .Range("B1:B8", "C2").ClearContents
  End With
  MsgBox "転記しました。"
 Else
  MsgBox "該当行が見つかりません。"
 End If
End Sub
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A