• ベストアンサー

エクセル マクロ 行

エクセル マクロについて Sheet1にはボタンがあり そのボタンをクリックすると フォームが表示してそのテキストに記入して、記録ボタンを押すと Sheet1最終行のフォームからシートにコピーするボタン方法は出来るのですが・・それだと最終行が新しい記載になってしまいます。 Range("a65536").End(xlUp).Offset(1).Select Selection = Selection.Row - 1 例えば A1 タイトル A2  小項目 A3  挿入させたい! A列の3行目から挿入して、その後も常にA3から挿入したいです。 新しい記載は常にA3にさせたいのですが、どうすれば良いのでしょうか?記述を教えて下さい。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.6

すみません。訂正がありました。 Range("A3").Insert Shift:=xlDown を Range("3:3").Insert Shift:=xlDown に直してみてください。 ずらしたいのはB3、C3、D3でしたね。 ちょっと、MSGBOXが何をしているのかわかりませんが Private Sub CommandButton1_Click() Dim i As Integer i = MsgBox("記録しますか?", vbOKCancel) If i = 1 Then Sheets("内容").Select Range("3:3").Insert Shift:=xlDown Range("B3").Value = Now()'サンプルとして時刻を入れて有ります Range("C3").Value = "TextBox1" Range("D3").Value = "ComboBox1" Unload Me End If End Sub はやりたいことに近くはないでしょうか?

pop2003
質問者

お礼

ありがとうございました。 とても親切に回答してもらって 私のようなものでも理解出来ました。 以下のようにしたら 出来ました。 Dim i As Integer Dim Cnt As Integer i = MsgBox("記録しますか?", vbOKCancel) If i = 1 Then Sheets("内容").Select Range("3:3").Insert Shift:=xlDown Range("B3").Value = テキスト日付 Range("C3").Value = TextBox1 Range("D3").Value = ComboBox1 Unload Me End If End Sub 本当に感謝しています。 ありがとうございました。

その他の回答 (5)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

>A3の挿入は出来ますが、A3セルを下にずらして前のA3に記載されたものが消えてしまいます。 う~ん 何故でしょうね? 仮に 以下のVBAを2つ作って交互に動作試してみてください。 Sub test1() Sheets("内容").Select Range("A3").Insert Shift:=xlDown End Sub Sub test2() Sheets("内容").Select Range("B3").Value = "テキスト日付" Range("C3").Value = "TextBox1" Range("D3").Value = "ComboBox1" End Sub test1 で3行目に挿入(3行目が4行目に移動) test2 で3行目にテキストが入る     ですが。

pop2003
質問者

補足

ありがとうございます。 具体的に記述を教えて下さい。 以下のようにしましたが思うように作動しません。 すいません。何処が悪いか指摘お願いします。 Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Sheets("内容").Select Range("A3").Insert Shift:=xlDown Sheets("内容").Select Range("B3").Value = "テキスト日付" Range("C3").Value = "TextBox1" Range("D3").Value = "ComboBox1" MsgBox "記録しますか?", vbOKCancel Unload Me End Sub

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

No3の方のVBAお借りします。 Sheets("内容").Select Range("A3").Select Selection.Insert Shift:=xlDown Range("A3").Select Selection.Offset(, 1) = テキスト日付 で、A3セルを下にずらして、A3に値を入れる になると思います。 Sheets("内容").Select Range("A3").Insert Shift:=xlDown Range("B3").Value = テキスト日付.Value Range("C3").Value = TextBox1.Value Range("D3").Value = ComboBox1.Value と省略できそうです。

pop2003
質問者

補足

ありがとうございます。 ただ、上記の記述でしても A3の挿入は出来ますが、A3セルを下にずらして前のA3に記載されたものが消えてしまいます。 私の記述が悪いのでしょうか? イメージ) A2 日付 記載者 内容 A3 8/3  茶庫  明日にはチェンジ A4 7/2 マリ  お茶がないよ ↓フォームにて入力して記録ボタンを押すと A2 日付 記載者 内容 A3 9/2 八子  了解です。 A4 8/3  茶庫  明日にはチェンジ A5 7/2 マリ  お茶がないよ という具合にしたいのですが・・・ すいません 教えて下さい。

回答No.3

Sub test() Range("A3").Select Selection.Insert Shift:=xlDown End Sub こんな感じ?

pop2003
質問者

補足

早速の回答ありがとうございます。 A3には挿入できますが 前の記載が消えてしまいます。 前の記載をA4に下げていく マクロの記述はないのでしょうか? ちなみにこれが今の記述です。 Private Sub CommandButton1_Click() Dim i As Integer Dim Cnt As Integer Sheets("内容").Select Range("a65536").End(xlUp).Offset(1).Select Selection = Selection.Row - 1 Selection.Offset(, 1) = テキスト日付 Selection.Offset(, 2) = TextBox1 Selection.Offset(, 3) = ComboBox1 MsgBox "記録しますか?", vbOKCancel Unload Me End Sub

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

Range("a3").Insert Range("a3") = TextBox1 と言うことでしょうか。

pop2003
質問者

補足

ありがとうございます。質問が分かりづらかったですね。すいません。 上記の記述だと 前の記載が消えてA3が入替わってしまいます。 古い記載は常にA4・・・などに下がって残されるようにしたいです。 つまり 新しい記載はA3に行が挿入されるような 感じに作りたいです。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>A列の3行目から挿入して、その後も常にA3から挿入したいです。 常にA3に挿入したい ということ? Range("A3").Select になりますが?

pop2003
質問者

補足

ありがとうございます。 上記の記述だと 前の記載が消えてA3が入替わってしまいます。 古い記載は常にA4などに下がって残されるようにしたいです。 つまり 新しい記載はA3に行が挿入されるような 感じに作りたいです。

関連するQ&A

  • エクセルマクロについて

    最終行の1つ下の行に100000と入力したいですが Range("b65536").Select Selection.End(xlUp).Select ActiveCell.Offset(0, 1).Value = 100000 としてもうまく行きません Selection.End(xlUp).Select この部分だけで なんとかなるのでしょうか よろしくお願い致します

  • エクセル 行追加マクロについて

    エクセル 行追加マクロについて 2007エクセルマクロ初心者です。 スケジュール表を作成、行追加マクロを作ろうとしてます。 シートの上下に表があり、上の表に行追加です。 関数式を壊したくないので、一部セルへロックをかけています。 以下の点についてご教授をお願いいたします。 行追加マクロを実行するとパスワードを要求されます。 聞かれないようにできないでしょうか。? パスワードを入力した以降は要求されませんが シートの保護解除を選択すると保護が解除されてしまいます。 パスワード記載のマクロを試したことがありますが、 表へオートシェイプが描写できなかったので断念しました。 Sub 行追加() With ActiveSheet 'シート保護解除 .Unprotect Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 79).Select Selection.Copy Selection.Insert Shift:=xlDown Range("A65536").End(xlUp).Offset(-8).Select ActiveCell.Resize(1, 9).Select Selection.ClearContents 'シート保護 .Protect DrawingObjects:=False, Contents:=True, Scenarios:= _ True End With End Sub

  • エクセルのマクロ 最終行取得後の作業

    エクセルのマクロで(エクセル2010を使用) Range("A1:A900").Select Range("A" & Rows.Count).End(xlUp).Select i = Selection.Row 上記の900がセルの最終行で最終行数を取得し、iを利用して  Range("A1:A & i ").Select といった感じで使用したいのですが記述がわかりません。 申し訳ございませんが()内の書き方を教えてください。

  • エクセルVBAで行のコピー貼り付けについて

    初心者、勉強中でエクセル2007です。 A1行からK40行までの表があります。 これを下にコピーをしながら増やしていってるのですが、マクロでしようと思い下記のとおり 考えました。 selecion.row.Offset(39, -1).Select ここでオブジェクトが必要ですと出ます。 それからその下の?とを色々ぐぐってみますがどうしてもわかりません。 それと2007ですので65536行ではないのですが、MaxRow = Cells(Rows.Count, 1).End(xlUp).Row だと動かないみたいですので下記としています。 よろしくご教授お願いします。 Sub Gcopy() MaxRow = Range("B65536").End(xlUp).Offset(-39, -1).Select データの入ってる最終行を取得 Selecion.row.Offset(39, -1).Select 選択された行から上に39行移動し選択 ?                    下へ39行まで選択   MaxRow = Range("B65536").End(xlUp).Offset(1, -1) 最終行を取得 ActiveSheet.Paste 貼り付け End Sub

  • マクロを使ったコピペがうまく動作しない。

    あるデータを転記用のブック(月毎にシートが分かれています。シートの内容は同一)に貼り付ける処理を行うため、下記のようなマクロを組んだのですが、何故か貼りつきません。処理終了時には、転記元ブック(シート)で最終処理の範囲(5番目のB287)を選択しています。一体何がいけないのでしょうか? データはA1からPまでで毎月可変しています。 また、転記用ブックが12枚あるため、月を指定してから貼り付けたいのですが、どのようにすればよいでしょうか?(下記は直接シ-トを指定しました) Sub test() Dim 最終行 As Integer '-------------------------------------------- 開始 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("1").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B1").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 1 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("2").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B83").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 2 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("3").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B157").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 3 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("4").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B227").PasteSpecial Paste:=xlPasteValues '-------------------------------------------- 4 Windows("21-12.xls").Activate 最終行 = Range("p65536").End(xlUp).Row Sheets("5").Range("A1:p" & 最終行).Select Selection.Copy Windows("転記.xls").Activate Sheets(12月).Select Range("B287").PasteSpecial Paste:=xlPasteValues --------------------------------------------- 5 End Sub 

  • シート1のC列の最終行をコピーして同じ行に値貼り付けしたい

    シート1のC列の最終行を取得して その行を丸々値貼り付けするマクロを作りたいと思います。 シート3のB18の値をシート1のC列の最終行の1つ下のセルに値貼り付け すると、その行のA、B列に日付が入力される関数が入っています。(下まで) 関数が入ったままだと、うまくいかない時があるので最終行をコピーして値貼り付けしたいのですが、マクロの作り方を教えてください。 シート1の最終行に貼り付け Sheets("Sheet3").Select Range("B18").Select Selection.Copy Sheets("Sheet1").Select Range("C65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub 最終行をコピーして値貼り付け Dim 最終行 As Integer 最終行 = Range("C65536").End(xlUp).Row Range("A6:C" & 最終行).Select Selection.Copy Sheets("Sheet1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub このマクロだと、A6からC列の最終行まで全てコピーされてしまうので、C列の最終行のAからC列まで1行だけコピーできないでしょうか?

  • EXCEL 最終行に入力するマクロ

    マクロ初心者です。 シート”受注書”からシート”受注履歴”に 履歴情報を書き込むマクロを作成しています。 初心者丸出しで恥ずかしいのですが、 下記のように組んでいます。 Sub 受注情報書き込み() Dim ws01 As Worksheet Dim ws02 As Worksheet Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws02.Activate ' 受注No入力 ws01.Range("C2").Copy ws02.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ' 受注日入力 ws01.Range("M2").Copy ws02.Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ' 出荷日入力 Sheets("粗利報告書").Range("D3").Copy ws02.Range("C" & Rows.Count).End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues ・ ・ ・ この場合、受注書シートが空白の場合、 受注履歴シートも空白になると思うのですが、 次回、履歴を書き込む時に空白を詰めて(最終行に) 入力してしまう事を避けたいです。 空白は残しつつ、一受注を同じ列に入力する為には、 どうしたら良いでしょうか?

  • エクセルマクロで行を変えて千回カット&ぺースト

    下記のコードでB,C,D・・・と行を1,000回変えて同じ作業をしたいのですが、どのようにしたらよいか分かりません。 どなたかお詳しい方アドバイスをお願いします。 Range("A18:A32").Select Selection.Cut Destination:=Range("B3:B17") ←B,C,D・・と変えてカットしたい。 Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("C3:C17") Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("D3:D17") Range("D3:D17").Select End Sub

  • 表の行を増やすマクロの疑問

    見積書の表があります。 A1は欄外の空白セル、B1は内容欄、C1は数量欄、D1は単価欄、E1は金額欄です。 B2からE2は値を記入する欄としE2には数量*単価の関数を埋め込みます。B3からE3までも形はそれと同じにし、E4が合計の値を記入する欄で関数は=SUM(E2:E3)です。その上で第3行を「表示しない」とします。 必要なだけの行を随時追加してゆく為に、苦労して次のような動作をするマクロ記録を作りました。 A4にフォームのボタンを置き、A4セルをクリックした後にそのボタンをクリックすれば非表示になっている直ぐ上の行を表示させてコピーし、その場に表示行として新規挿入します。 つまりE4は繰り下がりE5になりますが、自動的に関数は=SUM(E2:E4)となります。 そして新しく第4行を非表示としてやります。この繰り返しです。 記録されたマクロを見ると下のようになっています。 Sub 増行() ' ' 増行 Macro ' マクロ記録日 : ユーザー名 : ' ' ActiveCell.Select ActiveCell.Offset(-1, 0).Range("A1:E3").Select Selection.EntireRow.Hidden = False ActiveCell.Offset(0, 0).Range("A1:E1").Select Selection.Copy Selection.Insert Shift:=xlDown ActiveCell.Offset(1, 0).Range("A1:E1").Select Selection.EntireRow.Hidden = True ActiveCell.Offset(1, 0).Range("A1").Select End Sub このマクロはちゃんと機能するのですが、問題はこのシートの値を記入する場所以外を 保護しようとすれば「実行時エラー'1004' RangeクラスのInsertメソッドが失敗しました」 と表示されます。 どうすればこれを避けて保護する事が出来るでしょうか。 よろしくお願いします。 なお私は超初心者なので自分でVBを記述したり意味を読み取る事はほとんど出来ません。

  • エクセルマクロで行き詰っています!!

    仕事でマクロを作成しているのですが、行き詰っています。 助けて下さい。 1行目には各項目があり、A行~F行まで、最終行は不定期 各行には個人情報があります。(1行目は項目欄) 2行目をコピーし3行目と4行目と5行目に行を挿入 3行目と4行目と5行目に2行目の情報を貼り付け 6行目をコピーし7行目と8行目と9行目に行を挿入 7行目と8行目と9行目に6行目の情報を貼り付け -繰り返し- 最終行をコピーし最終行の下3行目まで最終行の情報を貼り付け 要は2行目がAさんの情報だとすればAさんの情報とまったく同じものを3行目4行目5行目に挿入したいのです。 6行目がBさんの情報だとすればBさんの情報とまったく同じものをまた全部で4行作りたいのです。 30人のお客さん情報があれば2人のお客さん情報しかないときもあります。 最終行目が不定期なことと、空白じゃないセルまで繰り返すにすると最終行で永遠コピーされてしまうことが悩みです。 同じ結果であれば、方法が違ってもいいです。 マクロ初心者です。 私が作ったマクロは空白を挿入することしか出来ませんでした。 sub test2() range("a2:f2").select range(selection,range("a2:f2").end(xldown))).select dim colleft as long dim colright as long dim i as long application.screenupdating=false colleft=selection(1).colum colright=seletion(selection.count).column for i = selection(selection.count).row to selection(1).row+1 step -1 range(cells(i,colleft),cells(i,colright)).resize(4).insert(xlshiftdown) next i application.screenupdating=true end sub 上記が私が作れたマクロです。 作れたといってもいろんなサイトよりコピーして加工しただけなので、 不要なところも多々あるかと思います。 期限がせまっているので切羽詰っています。 誰か助けていただけませんか? よろしくお願いします。

専門家に質問してみよう