プロが教えるわが家の防犯対策術!

 お世話になります。

 私は会社でExcelを使い事務をしております。
 式を入力して少し事務を簡素化する事は出来ますが、マクロやVBには明るくありません。
 シート1の雛型1箇所に入力すると同時に、シート2に一覧表が作成される様には出来ないものでしょうか?
 頑張ってマクロを使ってみましたが、シート1のB1を入力するとシート2のB1の数値まで変わってしまいます。(表を参考にしてください)

 シート1(雛型)
   A       B        C
1 固定数  入力した数字  数式A/B


 シート2(一覧表)
    A           B         C
1 シート1A1の数字 シート1B1の数字 シート1C1の数字 
2 シート1A1の数字 シート1B1の数字 シート1C1の数字
3 シート1A1の数字 シート1B1の数字 シート1C1の数字
4 シート1A1の数字 シート1B1の数字 シート1C1の数字

 分かりにくい説明で申し訳ありません。
 皆さまのお知恵をお待ちしております。
 よろしくお願いします。

A 回答 (4件)

すみません、ちょっとやりたいことの内容がよくわからないんですが、質問に書かれたシート2はご自分で作ったマクロの結果という意味でしょうか?


作りたいのは

 シート1(雛型)
   A       B        C
1 固定数  入力した数字  数式A/B
2 固定数  入力した数字  数式A/B
3 固定数  入力した数字  数式A/B
4 固定数  入力した数字  数式A/B

 シート2(一覧表)
    A           B         C
1 シート1A1の数字 シート1B1の数字 シート1C1の数字 
2 シート1A2の数字 シート1B2の数字 シート1C2の数字
3 シート1A3の数字 シート1B3の数字 シート1C3の数字
4 シート1A4の数字 シート1B4の数字 シート1C4の数字

ということでしょうか?
単純にシート1のそれぞれのセルを参照する、ということではダメなんですね?
    • good
    • 0
この回答へのお礼

 お返事ありがとうございます。
 質問の仕方が悪く申し訳ないです。
 #3さんのお返事に補足しました。
 もしお時間があれば回答お願いします。

お礼日時:2004/12/09 09:45

Sheet1の一列目を入力用として、Sheet2にデータを重ねていくということでしょうか?


Sheet1のシートタブを右クリックして「コードを表示」を選択
下記のコードを貼り付ける。

Sheet1のB1が変更された時点でSheet1のA1:B1が入力されている場合、Sheet2のA列の最後の次の行に転記されます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("sheet1")
Set ws2 = Sheets("sheet2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 3).Value = _
ws1.Range("a1").Resize(1, 3).Value
End With
End Sub
    • good
    • 0
この回答へのお礼

 お返事ありがとうございます。
 質問の仕方が悪く申し訳ないです。
 #3さんのお返事に補足しました。
 もしお時間があれば回答お願いします。

お礼日時:2004/12/09 09:47

私も#1のお方と同じく質問の意味(何をしたいか)が判りません。

シート1は固定数と入力値1個を取るためのものですよね。シート1のC1の数式A/Bは何のためにある(使う)のですか。
シート2は何をしたいのでしょうか。
数値実例でも3-4行上げてもらえれば判るかもしれない。
シート2の各行で変わるのは何ですか。
●今閃きました。ひょっとしてシート1に入力した
値を行をづらして記録すること及びA/Bの値を計算して
累積して記録して行きたいのでしょうか。
それであればシート1のChangeイベントなど使い
シート2の行数を1ずつ増やせば良いのですが、VBAとしてもやや難しい。行を表す変数の扱い(下記のi)が私も含め、初学者には難しいと思う。
シートのChangeイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
i = i + 1
Worksheets("sheet3").Cells(i, "B") = Target
End Sub
標準モジュールに
Public i
Sheet1のセルに値をいれるとSheet3のB列に
B1->B2->B3・・・に入力値をセットします。
あとA1の値とか、C列は(VBAでもやれますが)関数でやれば良いでしょう。

この回答への補足

 皆さまお返事ありがとうございます。
 質問の仕方が悪く申し訳ありません。
 今回アークタンジェントを利用して角度取得一覧表を作成することが目的です。
 そのためにシート1のA1には10、C1はA/B、D1には式ATAN(C1)*180/PI()を入力し、B1に数値を入力すれば角度を求めることが出来る雛型を作成しました。
 B1が更新されるたびに、シート2にA1~D1の入力内容が自動的にとび、一覧表が作成されるようにしたいと思っています。
 ちなみに求めたい角度は800~1000個あります。
 初心者はやはり欲張らずに一覧表を作成し、式をコピーした方が良いのでしょうか?
 皆さまの意見をお待ちしています。

補足日時:2004/12/09 09:26
    • good
    • 0

シート名



シート1 : 雛形
シート2 : データ蓄積用

シート1のB1に変更があった場合、シート1のA1:D1の:

1)「値のみ」をシート2に順次蓄積する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("シート1")
Set ws2 = Sheets("シート2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 4).Value = _
ws1.Range("a1").Resize(1, 4).Value
End With
End Sub

2)数式も含めてシート2に順次蓄積する。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("シート1")
Set ws2 = Sheets("シート2")
With Target
If .Address <> "$B$1" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:b1")) <> 2 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
ws2.Range("a" & lastA + 1).Resize(1, 4).Copy _
Destination:=ws2.Range("a" & lastA+1)
End With
End Sub
    • good
    • 0
この回答へのお礼

 迅速かつ丁寧なお返事をありがとうございます。
 早速試してみたところ、思っていた通りになりました。これで事務処理もスムーズになると思います。
 丁寧な方々に出会えてすぐに問題も解決でき、本当ならば全員にポイントを差し上げたいところですが、今回はこのような配点にさせていただきました。
 ご了承下さいませ。
 本当にありがとうございました。
 
 

お礼日時:2004/12/09 14:25

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