• ベストアンサー

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

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

  • xjptm
  • お礼率69% (25/36)

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

  • ベストアンサー
  • 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/17068)
回答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/7940)
回答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
質問者

お礼

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

関連するQ&A

  • ユーザーフォームから行検索後、データ挿入の仕方について

    エクセルでの名簿作成時に関する質問です。 現在エクセルで名簿を作成する際に、ユーザーフォームを使って入力しています。 データは、まず一番上の行に「A1~G1」までの(1人につき)7項目挿入され、 その後、全体を「A列」の氏名順に並び替えるという作業をしています。 「登録」ボタンと、「並び替え」ボタンを押さねばならず、 2度手間のような気がしてなりません。 ちなみに、名簿自体はローマ字名順(a.b.c.~z)に並べています。 ユーザーフォームのテキストエリアに記入し、「登録」ボタンを押すだけで、 既存の名簿から該当のローマ字を検索して探し出し、 その下に行の挿入・登録されるような機能はないのでしょうか? 例えば、「佐藤さん(sato)」のデータをユーザーフォームから入れる際に 「登録」ボタンを押すと・・・ ---------------------------------------------------- 【名簿】   ******   ←ここではなく・・・   abe  ・  ・  oda    sasaki  ******   ←【sat*】を検索して直接ここに登録したいのです。  seki ---------------------------------------------------- マクロを始めたばかりでよく理解していない事が多いのですが、 何か良い方法がありましたら、アドバイスをお願い致します。

  • 名簿の行の挿入

    名簿をアイウエオ順に並び変えるマクロで並び替えましたが、ア行カ行とかアカサタナの間に行を挿入したいのですが名簿名が増えると行がランダムになるので行を挿入できるマクロを教えてください。

  • 既存データの全てに、空白の1行を追加するには・・・

    既存データの全てに、空白の1行を追加するには・・・ B1~B100までデータが入っているとして 各データの下に空白の行を追加していく作業を簡単にする方法はないでしょうか? 地道にやればB2に行挿入、B4に行挿入・・・と100回やる必要があると思います。 アドバイスください。

  • エクセルマクロでの行挿入

    データを入力するフォームにコマンドボタンで行挿入したいのですが、うまく出来ません。最下段に合計する欄が設けてあるので、その直前に行挿入したいのです。挿入後も常に合計欄の直前に行挿入できるようにするにはどうすればよいのでしょうか?

  • エクセル2003での自動行追加について

    マクロを使わずに自動行追加する方法を探しています。 条件:マクロや右クリックでの行又はセルの挿入を使わずに、各最終行の次にから 3行追加を繰り返す A1 B1 AAA 111 AAA 222 AAA 333 (ここに3行追加) SSS 777 SSS 444 SSS 888 (ここに3行追加) アルファベットは同一日付データ 数値は氏名データ データは都度可変します マクロを修得しておりませんので、何とかこの条件下でエクセルで可能な方法を探しております。 皆さま、ご教授をお願い致します。

  • 常に特定の行の上に新規行挿入するマクロ

       A , B 1: 1月,1000円 2: 2月,2000円 3: 計,SUM(B1:B2) 4: 月,  円 という表があります。 4行目を常に計行(上記の場合は3行目、仮に3月分まで入力している場合は4行目になる)の上に挿入し、合計は挿入行分も含まれる、というマクロは可能でしょうか? ご存知の方おられましたらご教授願います。

  • 行位置の設定について

    ランダムに行が増えていく(挿入などをして増やす)データに対して、 そのファイルを開いたときに一番行の下(何も入っていない行)の A列のセルをアクティブにする方法ってないのでしょうか。 今は、一つ一つデータがないかを検索してアクティブにする マクロにしております。 すいませんが教えてください。

  • エクセルで複数行のデータを1行にする方法

    エクセルで複数行のデータを列挿入--切り取り--貼り付けで1行にしたいのですが、 その様なセルの並びが沢山あります。 VBAマクロなどで一度に出来る方法が有りましたらどうか教えて下さい。 データはこんな感じです。 ┌─┬─┬─┬─┬─┐ │01│04│07│10│13│ ├─┼─┼─┼─┼─┤ │02│05│08│11│14│ ├─┼─┼─┼─┼─┤ │03│06│09│12│15│ ├─┼─┼─┼─┼─┤ │16│19│22│25│28│ ├─┼─┼─┼─┼─┤ │17│20│23│26│29│ ├─┼─┼─┼─┼─┤ │18│21│24│27│30│ ├─┼─┼─┼─┼─┤ この様に並び替えたいのです。 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐ │01│02│03│04│05│06│07│08│09│10│11│12│13│14│15│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ │16│17│18│19│20│21│22│23│24│25│26│27│28│29│30│ ├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤ 何卒宜しくお願いいたします。

  • エクセル行の挿入

    excelに行を追加する方法を教えてください! Bにある数からマイナス1行下に挿入したいのです。 1→挿入なし  2→下に1行挿入  3→下に2行挿入 数よりマイナス1行の挿入をしたいのですが、 マクロ、関数など全く分かりません。 以前の質問も見てみたのですが、見当たらないのと、 マクロ?が全くわからないので、 どなたか一から教えていただけないでしょうか? 本当に申し訳ないのですが、お願いします。 Aにkkkk Bに数が入ります。   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   1 ------------------------------------- 3| kkikk   3 ------------------------------------- 4| kkkk   2 ↓行の挿入   A | B | C | D ------------------------------------- 1| kkkk   2 ------------------------------------- 2| kkkk   空白(行の挿入) ------------------------------------- 3| kkikk   1 ------------------------------------- 4| kkkk   3 ------------------------------------- 5| kkkk   空白(行の挿入) ------------------------------------- 6| kkkk   空白(行の挿入) ------------------------------------- 7| kkkk   2 ------------------------------------- 8| kkkk   空白(行の挿入) -------------------------------------

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

専門家に質問してみよう