[[20150514100012]] 『ユーザーフォームからの入力』(よし) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームからの入力』(よし)

 エクセルシートへユーザーフォムを利用しデータを入力できるようにしています。
 データの入力については、1カ月ごとで削除を行っていますが、削除についても
 マクロを利用して行っています。
 しかし、削除後ユーザーフォームよりデータを入力した場合、削除後の行より
 データが入力されてしまいます。削除後のデータについては3行目よりスタート
 したいのですが、上手くいきません。下記コードを掲載いたしますので、修正箇所
 のご教示をお願いできたらと思います。現在勉強中でマクロについてもほぼ素人で
 ございます。どうぞよろしくお願いいたします。

 (ユーザーフォームコード)
 Private Sub CommandButton1_Click()

    Dim lastRow As Long
    Dim lastCol As Long

    If MsgBox("入力データを転記しますか?", vbYesNo, "確認") = vbYes Then

        With Sheets("入力データ")

            With .UsedRange
                lastRow = .Cells(.Count).Row
                lastCol = .Cells(.Count).Column
            End With

            If .Cells(lastRow, 1).Interior.ColorIndex = xlNone Then
                .Rows(lastRow + 1).Resize(, lastCol).Interior.ColorIndex = 39
            End If

            .Cells(lastRow + 1, 1).Value = lastRow - 1

            .Cells(lastRow + 1, 1).Value = ComboBox1.Value
            .Cells(lastRow + 1, 2).Value = TextBox1.Value
            .Cells(lastRow + 1, 3).Value = TextBox2.Value
            .Cells(lastRow + 1, 4).Value = TextBox3.Value
            .Cells(lastRow + 1, 5).Value = TextBox4.Value
            .Cells(lastRow + 1, 6).Value = TextBox5.Value
            .Cells(lastRow + 1, 7).Value = TextBox6.Value
            .Cells(lastRow + 1, 8).Value = TextBox7.Value
            .Cells(lastRow + 1, 9).Value = TextBox8.Value
            .Cells(lastRow + 1, 10).Value = TextBox9.Value
            .Cells(lastRow + 1, 11).Value = TextBox10.Value
        End With

    End If

 End Sub

 (削除ボダンコード)
 Private Sub CommandButton2_Click()

     Worksheets("入力データ").Activate
     Worksheets("入力データ").Range(Cells(3, 1), Cells(5000, 11)).Clear
     Worksheets("入力データ").Range("A3:K5000").ClearFormats
     Application.Goto reference:=Worksheets("入力データ").Range("A3")
 End Sub

 以上内容となります。よろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 よくわかりませんが・・・
 CommandButton2のコードは、もう少し書き方も工夫できるかとは思いますが、さておき。

 このシートはどんなレイアウトなんですか? 1行目、2行目がタイトル行なんでしょうか?
 いずれにしても、削除で、3行目から下がクリアされますから、次に登録すると、3行目からになりますけど?
 削除前に3000行目まであったとして、そこから転記されているのですか?

 もしそうなっているなら、考えられることは、

            With .UsedRange
                lastRow = .Cells(.Count).Row
                lastCol = .Cells(.Count).Column
            End With

 ここで、データの最終場所を求めているんですが、もし、K列より右側に何か「ゴミ」のようなものがあれば
 削除でクリアされていませんので、そこが最終セルとなり、次に登録するとそこからになります。

 以下で試してみてください。

 Private Sub CommandButton2_Click()
    With Sheets("入力データ")
        With .Range("A1", .UsedRange).Offset(2)
            .Clear
            .ClearFormats
        End With
        Application.Goto .Range("A3")
    End With
 End Sub

(β) 2015/05/14(木) 11:30


 2013 だということですから、大丈夫だとは思いますが、かって、一度書き込みがあった領域は
 クリアしても、そこが UsedRange に含まれるという不具合(割と有名な不具合)がありました。
 今は、そういうことはないはずですが。

 もし提示したコードでも思わしくなければ、念のため

 With Sheets("入力データ") の下に

    .UsedRange

 という「おまじない」をいれてみてください。

(β) 2015/05/14(木) 12:00


 ご回答ありがとうございます。

 上記コードに修正後、実行してみましたが、データ削除後は入力があった最終行の3行下から入力が
 開始されます。

 たびたびのご回答のついでに、再度ご教示いただけれな幸いです。
(よし) 2015/05/14(木) 12:09

 おまじないは  Private Sub CommandButton1_Click の With Sheets("入力データ") の下 ですけど
 それをいれてもダメだったということですか?

(β) 2015/05/14(木) 12:24


 度重なるご回答ありがとうございます。

 Private Sub CommandButton1_Clickの箇所に入力をしても同じ結果でした。

(よし) 2015/05/14(木) 12:36


 不思議ですねぇ。こちらでは、数十行入力 -> CommadbButton2 -> 数十行入力 -> CommandButton2 -> ・・・

 と、何十回繰り返しても3行目から転記されますが?

 一度、新規ブックで試してみてはいかがでしょう。

(β) 2015/05/14(木) 13:43


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.