重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (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以降に保存するようにしてみてください。
もし、マクロでわからないことがあれば、また補足に書いていてください。
    • good
    • 0

(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の熟達者に私が教えて欲しい問題点ですが。
    • good
    • 0

#1のものです。




> マクロ記述の操作作業の記録の方法で実行することは難しいでしょうか。

No.1でのマクロは、Sheet1の入力したセルの値が変わったときに実行されるマクロになるため、ツール-マクロ-マクロで選択することができないと思います。
もし、挿入するのであれば、

1. ツール-マクロ-Visual Basic Editorを選択
→ Visual Basicが起動
2. プロジェクトウインドウ(Visual Basic内の左側上部のウインドウ)のSheet1をダブルクリック
→ Sheet1(コード)ウインドウが表示
3. No.1のマクロをコピー
4. Visual Basicを閉じる

で、大丈夫です。

この回答への補足

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

補足日時:2003/07/31 09:33
    • good
    • 0

こういうマクロでは、どうでしょうか?



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

変更した箇所と同じ位置の別シートのセルの値を変更します。

この回答への補足

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

補足日時:2003/07/29 09:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!