• 締切済み

EXCELで自動的にデータレコードを追加する方法について

EXCELシートのレコードを自動的に追加して生きたいのです。というのは2枚のEXCELシートがあって1枚のシートは入力フォームになっていて他のフォームにアクセスのようなレコードを作り1行目のレコードにリンクさせます。この場合1枚目の入力シートにデータ追加するたびに2枚目のシートにレコードが追加される方法がないでしょうか。マクロを使ってコピー貼り付けではできません。もちろんデータのフォームではデータ貼り付けを受け付けませんのでだめです。アクセスまがいのことをEXCELでしようとしているのですが。どなたかヒントいただけませんでしょうか。

みんなの回答

  • Taketoshi
  • ベストアンサー率41% (23/56)
回答No.4

#2のものです。 Sheet1のあるセルに入力したデータをSheet2に保存し続けると考えていいのですね。 このマクロはどうでしょうか。 Sheet1のあるセルに入力したデータをSheet2に保存し続けます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim wRow As Long If Trim$(Target.Value) <> "" Then '画面の更新不可 Application.ScreenUpdating = False 'Sheet2選択 Worksheets("Sheet2").Select 'A1を選択 ActiveSheet.Cells(1, 1).Select 'データ数取得 If Trim$(ActiveSheet.Cells(1, 1).Value) = "" Then wRow = 1 Else wRow = Selection.End(xlDown).CurrentRegion.Count + 1 End If 'Sheet2にデータ保存 ActiveSheet.Cells(wRow, Target.Column).Value = Target.Value 'Sheet1選択 Worksheets("Sheet1").Select '画面の更新可 Application.ScreenUpdating = True End If End Sub ただし、Sheet1のあるセルのものを保存するとしか考えてませんので、Sheet1の複数のセルの値を保存するのであれば、Sheet3以降に保存するようにしてみてください。 もし、マクロでわからないことがあれば、また補足に書いていてください。

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

(1)シートの1枚を台紙のように使い、その上にコントロールを貼りつけ、そのコントロールと他の1枚のシートのセルにリンクすることができます。 グリッド線や、行列番号、メニューバー、ツールバーなどを消すと結構それらしくなります。 (2)1枚のシートにフォームを貼りつけ、更にフォームの上にコントロールを貼りつけ、そのコントロールと他の1枚のシートのセルにリンクすることが出来ます。 どちらもここで説明すると長くなり過ぎます。 「VBAの知識がありませんので」ということだと、行き詰まりそうです。 中級以上の解説書にはコントロールの解説がありますので そういうものを見てください。 拙い例ですが、匂いでも嗅いでください。 (1)Sheet1にTextBox1,TextBox2、CommandButton1を貼りつける。 (2)標準モジュールに Public i Sub test01() i = 1 End Sub 行の位置の初期設定のためです。 (3)Sheet1のイベントプロセジュアーに下記を作ります。 Private Sub CommandButton1_Click() i = i + 1 TextBox1.Text = "" TextBox2.Text = "" End Sub 1レコードの終了を教えてやるためです。 Private Sub TextBox1_LostFocus() Worksheets("sheet2").Cells(i, "A") = TextBox1.Text End Sub Private Sub TextBox2_LostFocus() Worksheets("sheet2").Cells(i, "B") = TextBox2.Text End Sub (5)入力操作 1回(2)を実行する。 テキストボックス1,2に文字列を入力する。 そしてコマンドボタンをクリックする。 A列にテキストボックス1、B列にテキストボックス2の 内容がセットされる。 数値列ならVAL(TextBox2.Text)をセルにセットする。 内容チェックが必要ならば、コマンドボタンを押したときに行う。(本件では略) 順次入力していくと、次行、次行に入力内容がセットます。 少数例でテスト済みです。 しかし何が私自身気に食わないかと言うと、初期化、Public変数、Enterのイベントがないことなど。実のところ、ずっと前から行き詰まっていて、VBAの熟達者に私が教えて欲しい問題点ですが。

  • Taketoshi
  • ベストアンサー率41% (23/56)
回答No.2

#1のものです。 > マクロ記述の操作作業の記録の方法で実行することは難しいでしょうか。 No.1でのマクロは、Sheet1の入力したセルの値が変わったときに実行されるマクロになるため、ツール-マクロ-マクロで選択することができないと思います。 もし、挿入するのであれば、 1. ツール-マクロ-Visual Basic Editorを選択 → Visual Basicが起動 2. プロジェクトウインドウ(Visual Basic内の左側上部のウインドウ)のSheet1をダブルクリック → Sheet1(コード)ウインドウが表示 3. No.1のマクロをコピー 4. Visual Basicを閉じる で、大丈夫です。

EKICHO
質問者

補足

マクロのプログラムありがとうございます。 たしかにsheet1で変更したセルのところはsheet2の対応セルでは完璧に変更されましたが新たなレコードが生成出来ないんですがこの件について補足よろしくお願いします。 あくまでsheet1のフォームで変更(新たなレコード作成)入力した場合にsheet2でレコードが追加されることを望んでいるのですが。

  • Taketoshi
  • ベストアンサー率41% (23/56)
回答No.1

こういうマクロでは、どうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Trim$(Target.Value) <> "" Then Worksheets("Sheet2").Cells(Target.Row, Target.Column).Value = Target.Value End If End Sub 変更した箇所と同じ位置の別シートのセルの値を変更します。

EKICHO
質問者

補足

ありがとうございます。 VBAの知識がありませんのでこのプログラムは マクロ記述の操作作業の記録の方法で実行することは難しいでしょうか。たひたびお手数おかけします。

関連するQ&A