• ベストアンサー

新しいデータは常に2行目へ登録したい

下記、動画を参考にユーザフォームを用いて名簿を作成しています。 http://www.youtube.com/watch?v=UvKjFBQzbz8 とても参考になったんですが、このやり方だと新しくデータを登録すると下の行に新しいデータが追加されます。 私が希望するのは、新規データは常に2行目(データ最上行)に登録され、古いデータは、3行目→4行目→5行目とどんどん下の行に繰り下がるものを作りたいです。 2行目に行を挿入するマクロを追加したり、色々やってみましたが、希望する結果は散々でした・・・。 文章が分かり辛いかもしれませんが、解決できる方がみえたらご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mar00
  • ベストアンサー率36% (158/430)
回答No.4

>登録すると確かにワークシートの2行目に追加されました。 しかし、既に登録したデータを編集し、登録すると新たなデータとして2行目に入ってしまいます。 確かにそうなりますよね。 そこまで考えずに回答してしまいました。失礼しました。 以下のようにコードを修正してください。 Private Sub CommandButton1_Click() If Worksheets(1).Cells(i, 2).Value = "" Then (1) Worksheets(1).Range("A2").EntireRow.Insert (2) i = 2 (3) End If Worksheets(1).Cells(i, 1).Value = TextBox1.Value Worksheets(1).Cells(i, 2).Value = TextBox2.Value Worksheets(1).Cells(i, 3).Value = ComboBox1.Value Worksheets(1).Cells(i, 4).Value = TextBox3.Value Worksheets(1).Cells(i, 5).Value = TextBox4.Value End Sub 新規に登録をするときはテキストボックス等に何も表示されていない状態で登録するんでしたよね。 (1) ifを使ってCells(i, 2).Value が空白("")の時に (2) 2行目に行を挿入 (3) iを2にして登録 でいいと思います。 注  既に入力済みのデータでB列が空白だとデータを修正すると2行目に登録されてしまいます。(とりあえず分かる所だけ先に登録してしまったときなど) B列は名前だったと思います。名前は飛ばす事はないと思いますので (1) ifを使ってCells(i, 2).Value が空白("")の時にしています。

xjptm
質問者

お礼

丁寧に教えてくださりありがとうございます。 とても親切な対応をしてくださり、感激です。 名前が空白であれば、エラーを表示させるようにしていますので、 ご教授いただいた内容で希望する物が出来ました。 本当にありがとうございました。

その他の回答 (4)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.5

何度もすいません。 どこが空白になっていても(新規登録だけが2行目にされます。)できるようにしました。 下記のコードに修正してください。 Private Sub CommandButton1_Click() With ActiveSheet.UsedRange MaxRow = .Rows(.Rows.Count).Row End With If i > MaxRow Then Worksheets(1).Range("A2").EntireRow.Insert i = 2 End If Worksheets(1).Cells(i, 1).Value = TextBox1.Value Worksheets(1).Cells(i, 2).Value = TextBox2.Value Worksheets(1).Cells(i, 3).Value = ComboBox1.Value Worksheets(1).Cells(i, 4).Value = TextBox3.Value Worksheets(1).Cells(i, 5).Value = TextBox4.Value End Sub

xjptm
質問者

お礼

またのご回答ありがとうございます。 先ほどの方法で十分な結果が得られたので満足してたのですが、折角ですのでこちらの方法も利用させていただきました。 勉強不足でコードの意味は半分も理解できなかったのですが、 2件目以降のデータを修正し、登録を押すと1件目(2行目)と摩り替わりました。 (一応結果報告とさせていただきます。) しかし、とても参考になりました。 本当にありがとうございました。

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

(1)シートの2行目に行挿入すれば良い、のだろう こんなところへ質問する前に、行挿入の操作をして、マクロの記録を取り、考えたら仕舞いのことではないか。 またマクロの記録でなくても、行挿入のコードは、Googleででも「エクセルVBA 行挿入」で照会すればコードが出るだろう。 データ行の最後にデータを追加するよりやさしいことだと思う。 (2)第2行目の各列のセルにユーザーフォームのコントロールからデータをセットするのは判っていると思う。 初心者は マクロの記録を活用できないか WEBでは記事がないか 書籍に載っていないか など常に考えるべきではないか。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

'http://www.youtube.com/watch?v=UvKjFBQzbzを見ましたが CommandButton1のコードは下記のようになっているはずです。 Private Sub CommandButton1_Click() Worksheets(1).Cells(i, 1).Value = TextBox1.Value Worksheets(1).Cells(i, 2).Value = TextBox2.Value Worksheets(1).Cells(i, 3).Value = ComboBox1.Value Worksheets(1).Cells(i, 4).Value = TextBox3.Value Worksheets(1).Cells(i, 5).Value = TextBox4.Value End Sub '1行目に2行目に行を挿入するコードを追加 Worksheets(1).Range("A2").EntireRow.Insert 'さらに ' Cells(i, 1)~Cells(i, 5)のiの部分を2に修正 以上で常に2行目に新規データが登録されるようになると思います。

xjptm
質問者

補足

ご教授ありがとうございます。 教えていただいた通り以下のように記述してみました。 登録すると確かにワークシートの2行目に追加されました。 しかし、既に登録したデータを編集し、登録すると新たなデータとして2行目に入ってしまいます。 希望として編集したデータは新規に登録されず、そのままの行番号で保存できたらありがたいです。 他の方よりご指摘があったように自分でも調べてやっているつもりなのですが、どうしても分からないので、重ねがさねご迷惑をおかけしますが、ご教授いただけますでしょうか? ------------------ Private i As Long Private Sub CommandButton1_Click() Worksheets(1).Range("A2").EntireRow.Insert Worksheets(1).Cells(2, 1).Value = TextBox1.Value Worksheets(1).Cells(2, 2).Value = TextBox2.Value Worksheets(1).Cells(2, 3).Value = ComboBox1.Value Worksheets(1).Cells(2, 4).Value = TextBox3.Value Worksheets(1).Cells(2, 5).Value = TextBox4.Value End Sub '前へ移動 Private Sub CommandButton2_Click() If i = 2 Then MsgBox "戻りません" Exit Sub End If i = i - 1 Call Display End Sub Private Sub CommandButton3_Click() i = i + 1 Call Display End Sub Private Sub UserForm_Initialize() i = 2 Call Display ComboBox1.AddItem "経理課" ComboBox1.AddItem "人事課" ComboBox1.AddItem "営業1課" ComboBox1.AddItem "営業2課" ComboBox1.AddItem "総務課" End Sub Public Sub Display() TextBox1.Value = Worksheets(1).Cells(i, 1).Value TextBox2.Value = Worksheets(1).Cells(i, 2).Value ComboBox1.Value = Worksheets(1).Cells(i, 3).Value TextBox3.Value = Worksheets(1).Cells(i, 4).Value TextBox4.Value = Worksheets(1).Cells(i, 5).Value End Sub ------------------

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

private sub CommandButtonX_Click() ’登録マクロ ’所定のシートの2行目に空行を挿入する  application.cutcopymode = false  worksheets("シート名").range("2:2").insert ’2行目の各セルに所定の値を転記する  worksheets("シート名").range("A2").value = me.textbox1.value  worksheets("シート名").cells(2, 2).value = me.textbox2.value  worksheets("シート名").cells(2, "C").value = me.textbox3.value end sub

xjptm
質問者

お礼

参考になりました。 ご回答ありがとうございます。