• 締切済み

エクセル 入力シートのデータを別シートに書き込む

エクセル 入力シートのデータを別シートに書き込む 1.Sheet1のA2に数字、B2に数字、C2に数字、D2に数字、E2に数字、F2に数字、G2に数字、にを入力する。 2.内容確認後、入力ボタンを押すと、 Sheet2のF2にSheet1のA2の数字、 Sheet2のH2にSheet1のB2の数字、 Sheet2のI2にSheet1のC2に数字、 Sheet2のJ2にSheet1のD2に数字、 Sheet2のK2にSheet1のE2に数字、 Sheet2のL2にSheet1のF2に数字、 Sheet2のM2にSheet1のG2に数字が反映され、sheet2の入力されたデータが一列づつたされていく。 つまり。sheet1は入力シートで、同じセルに値を入力します(次回はデータが上書きされる)が、sheet2では、集計表の1列ずつ下に新しく記録されていく。 このような入力フォーム(マクロ)を作りたいと思っています。 わかりづらい質問で申し訳ありませんが教えていただけませんでしょうか。 よろしくお願いします。

みんなの回答

回答No.3

以前の回答に補足です。 L2に行数を保管する方法で説明していますが,「毎回探しに行く」例を追加しておきます。 前提として,F列の中で,存在する行数のうち,空になっているセルの一番大きい行を 取得する考えのものです。 '最大行数を取得 iRow = WS2.Range("F1").SpecialCells(xlLastCell).Row 'F列で,最大行数から上に見て行って,入力されているセル+1行を取得 iRow = WS2.Range("F" & iRow).End(xlUp).Offset(1, 0).Row これを現在の行取得と置き換えてください。

punipunimiyu
質問者

お礼

丁寧にご回答いただきありがとうございました。

回答No.2

なんとなくですが,超簡単にするなら,以下のコードでできませんか。 Sub COPYS() Dim WS1 As Worksheet Dim WS2 As Worksheet Set WS1 = Sheet1 Set WS2 = Sheet2 iRow = WS1.Range("L2")+1 WS2.Range("F" & iRow).Value = WS1.Range("A2").Value WS2.Range("H" & iRow & ":M" & iRow).Value = WS1.Range("B2:G2").Value WS1.Range("L2") = WS1.Range("L2") + 1 End Sub 味噌はL2に貼り付ける先の行を持っていることです。 ここに初期値1(件目)を持っておくと,上記マクロを実行するごとに1ずつカウントアップします。 こういったやり方がいやでしたら,最新の行位置を毎回求める(F列の空白セルを探しに行くとか)と 同じことが可能です。 まずは参考まで。

punipunimiyu
質問者

お礼

親切にご回答いただきありがとうございました。 私も勉強してみたいと思います。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

シート1で「開発」タブの「挿入」からコマンドボタンをクリックしてシート上にコマンドボタンを描きます。そのコマンドボタンを右クリックして表示される画面に次のマクロを入力します。 Private Sub CommandButton1_Click() Dim Row2 As Integer Set WS1 = Worksheets("Sheet2") Set WS2 = Worksheets("Sheet3") Application.ScreenUpdating = False Row2 = WS2.Cells(Rows.Count, "F").End(xlUp).Row + 1 WS2.Cells(Row2, "F").Value = WS1.Range("A2").Value WS1.Activate WS1.Range("B2:G2").Select Selection.Copy WS2.Select WS2.Cells(Row2, "H").Select ActiveSheet.Paste Application.CutCopyMode = False WS1.Activate WS1.Range("A2:G2").Clear WS1.Range("A2").Select Application.ScreenUpdating = True End Sub 最後に、開発タブの「デザインモード」をクリックして解除します。

punipunimiyu
質問者

お礼

早速ご回答いただきありがとうございました。 質問の仕方が悪く、申し訳なかったです。ご回答いただいたのだと、sheet3が出てきますが、 Sheet1のA2に数字、B2に数字、C2に数字、D2に数字、E2に数字、F2に数字、G2に数字、にを入力し、入力ボタンを押すと、 Sheet2のF2にSheet1のA2の数字、 Sheet2のH2にSheet1のB2の数字、 Sheet2のI2にSheet1のC2に数字、 Sheet2のJ2にSheet1のD2に数字、 Sheet2のK2にSheet1のE2に数字、 Sheet2のL2にSheet1のF2に数字、 Sheet2のM2にSheet1のG2に数字が反映されるように作りたいです。 そして、sheet1は入力シートで、同じセルに値を入力します(次回はデータが上書きされる)が、sheet2では、集計表の1列ずつ下に新しく記録されていくことができたら嬉しいです。 せっかくご回答いただいたのに私の説明が下手で申し訳ありませんでした。

punipunimiyu
質問者

補足

下手くそですが、以下のように作成してみましたが、これだとsheet2に反映する際、1行目から反映してしまいます>< sheet2の2行目から反映させたいのですが… 教えてくれると助かります。 よろしくお願いします。 Sub Macro2() ' ' 入力反映(入力用) ' マクロ記録日 : 2012/11/10 ユーザー名 : ' Dim mygyo As Integer, bangou As Variant, sikaku As Variant, kahi As Variant, nyugai As Variant, nengetu As Variant, hiyougaku As Variant, yakuzaihutan As Variant, jikohutan As Variant Sheets("Sheet2").Select mygyo = Cells(2, 25) + 1 Sheets("Sheet1").Select bangou = Cells(2, 1) sikaku = Cells(2, 2) kahi = Cells(2, 3) nyugai = Cells(2, 4) nengetu = Cells(2, 5) hiyougaku = Cells(2, 6) yakuzaihutan = Cells(2, 7) jikohutan = Cells(2, 8) Sheets("Sheet2").Select Cells(mygyo, 6) = bangou Cells(mygyo, 8) = sikaku Cells(mygyo, 9) = kahi Cells(mygyo, 10) = nyugai Cells(mygyo, 11) = nengetu Cells(mygyo, 12) = hiyougaku Cells(mygyo, 13) = yakuzaihutan Cells(mygyo, 14) = jikohutan Cells(2, 25) = mygyo Sheets("Sheet1").Select End Sub