dポイントプレゼントキャンペーン実施中!

エクセルのSheetAを使用して入力画面を作成し、そのデータをSheetBやSheetCへリンクさせて印刷を行っています。1件ごとの入力になるので、データが残りません。このSheetAのデータを別のSheetDか別のファイルへ行ごとの横一直線という形式で残したいのですが、どうすればよろしいでしょうか?

また、反対に移動したデータを戻す場合などどうしたらいいのでしょうか?
マクロを利用すればいいように思うのですが、マクロは印刷程度の簡単なマクロの知識しかありません。
もしも、何か方法があるようでしたら、いろんな応用が利きそうなので、今後に向かって幅が広がりそうなので、是非詳しい方お願いします。


<例>
1つめのデータをSheetAへ入力
SheetA セルA1 h16.12.1
                 B2 ○○商事
                          C3 △△-□□
         ↓(データー移行)
SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□
 (この間にSheetAのデータはすべて削除)
2つめのデータをSheetAへ入力
SheetA セルA1 h16.12.3
                B2 ●●販売
                           C3 ▲▲-■■

         ↓(データー移行)
SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□
      A2 h16.12.3 B2 ●●販売 C2 ▲▲-■■

A 回答 (4件)

Sub Test()


Dim UR
UR = Sheets("SheetD").Range("A1").CurrentRegion.Rows.Count + 1
If Sheets("SheetD").Range("A1") = "" Then UR = UR - 1
Sheets("SheetA").Range("A1").Copy Sheets("SheetD").Cells(UR, 1)
Sheets("SheetA").Range("B2").Copy Sheets("SheetD").Cells(UR, 2)
Sheets("SheetA").Range("C3").Copy Sheets("SheetD").Cells(UR, 3)
Application.Goto Reference:="AREA"
Selection.ClearContents
Sheets("SheetA").Range("A1").Select
End Sub

なお、シートAの入力範囲(A1,B2,C3)には AREA という名前をつけています。

UR = Sheets("SheetD").Range("A1").CurrentRegion.Rows.Count + 1 の部分で
SheetDのA列の最終データの次の行を取得していますが、A列にデータが無い場合
もA1だけにデータがある場合も 2 になってしまいますので、A列が空の場合は
1を引いています。
    • good
    • 0
この回答へのお礼

ありがとうございました。
前半部分の式を入力しましたら、うまくいきました。
ほんといろんなことができるんですね。
また、お願いします。

お礼日時:2004/12/02 12:48

●後半は


http://okweb.jp/kotaeru.php3?q=1097835
の私の回答が参考になると思います。
●前半は
(1)Sheet2にボタンを1つ貼りつける。
そのクリックイベントに
Private Sub CommandButton1_Click()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet3")
sh2.Cells(i, "A") = sh1.Cells(4, "B")
sh2.Cells(i, "B") = sh1.Cells(5, "C")
sh2.Cells(i, "C") = sh1.Cells(6, "D")
i = i + 1
End Sub
(2)標準モジュールの初めの行に
Public i
(3)iの初期値を設定するために
Private Sub Workbook_Open()
i = 2
End Sub
これをまず名前を付けて保存して、その後に開く。
するとi=2(第2行目から開始)がセットできる。
Sheet2のB4,C5,D6に
x
g
v
と入れて、コマンドボタンをクリックすると
Sheet3に
asd
xgv
の第2行目ように記録される。
これ以外の良い方法はないのかと、いつも思ってますが
これでも、理解するのは決して易しくはないかもしれない。
    • good
    • 0
この回答へのお礼

易しい解説ありがとうございます。
VBA作り方って様々あるんですね。
今後の参考にさせて頂きます。
また、お願いします。

お礼日時:2004/12/02 12:58

取り急ぎ作成しましたが、


>マクロを利用すればいいように思うのですが、マクロは印刷程度の簡単なマクロの知識しかありません。

とのことですので印刷部分は省きました。
標準モジュールで下記を書くとシート1のデータをシート3の空いてる行に書き込みます。
シート3のコードにシート3を作ると、復元したいA列にマウスでクリック又はアクティブにするとシート1へコピーします。
急いで作っていたので深く考えていませんご了承ください

標準モジュール
Sub Button()
With Worksheets(1)
a = .Cells(1, 1).Value
b = .Cells(2, 2).Value
c = .Cells(3, 3).Value
End With
'****印刷***

'印刷マクロ

'***********
With Worksheets(3)
d = .Cells(1, 1).Value
i = 1
Do While d <> ""
i = i + 1
d = .Cells(i, 1).Value
Loop
.Cells(i, 1) = a
.Cells(i, 2) = b
.Cells(i, 3) = c
End With

End Sub

シート3
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Columns.Column = 1 Then
i = ActiveCell.Row
Worksheets(1).Cells(1, 1) = Cells(i, 1).Value
Worksheets(1).Cells(2, 2) = Cells(i, 2).Value
Worksheets(1).Cells(3, 3) = Cells(i, 3).Value
End If
Worksheets(1).Activate
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
今後、VBAを本格的に頑張ってみようかと思います。

お礼日時:2004/12/02 12:54

回答ではありませんので、流して下さい。



このような用途の場合、ACCESSの方が楽ですよ。ACCESSはデータ、フォーム、印刷様式などを別々に管理できるからです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
作成した後に関係者(約20名)に配りたいもんですから、誰のPCにも入っているエクセルで作ることを考えています。

お礼日時:2004/12/02 12:50

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