[[20040903183036]] 『別シートに履歴を残したい』(OS) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートに履歴を残したい』(OS)

すいません説明がうまくかけませんでした
OS 98SE エクセルはオフィス2000です

シートのレイアウトは1枚目に貸し出しリストです

a@  品名      使用者   使用場所   持ち出し日  返却予定日   返却日

 1   酸素計     
 2   騒音計
 3   分析計
 4   テスター
 5   温度計     エクセル太郎  愛知工場   2004/9/7   2004/9/9
    ↑各品名に1シートに履歴としてまとめる
 ・
 ・

2シート目以降のレイアウト

1

 品名:酸素計

 使用者  使用場所  持ち出し日  返却日
 ・
 ・
 ・

5シート目

5

 品名:温度計

 使用者     使用場所  持ち出し日  返却日
 エクセル太郎  愛知工場  2004/9/7   2004/9/8

このような感じです

返却日入力で1枚目のシートの使用者等は自動クリアーし2シート目以降に履歴を残す

履歴なので1行ごとに下がって記録する

このような感じに作りたいのですが、マクロなどプログラムみたいなのは

まったくわかりませんのでできれば教えていただけませんでしょうか

よろしくお願いします


 返却日がG列に入力され、入力されたら使用者〜返却日がそれぞれのシートにコピーされればよいのでしょうか?
Sheet1に入力する表があるなら、Sheet1の見出しを右クリックし、「コードの表示」を選択します。
表示された右側の空欄に下のコードをコピーします。
シート名にはそれぞれの品名「酸素計」「騒音計」・・・が設定してあるものとします。
こんな感じでしょうか?   (Hatch)
 
Private Sub worksheet_change(ByVal Target As Range)
Dim my_Ws As Worksheet
Dim my_Row As Long
  'G列以外に入力されたときはマクロから抜ける
If Target.Column <> 7 Then Exit Sub
  '画面表示の更新を停止
Application.ScreenUpdating = False
  'B列の品名のシートの使用を宣言
Set my_Ws = Worksheets(Target.Offset(0, -5).Value)
      'C〜G列のデータを切り取る
    Target.Offset(0, -4).Resize(, 5).Cut
      '品名シートの最下行を取得(貼り付け先の行番号を取得)
    my_Row = my_Ws.Range("A65536").End(xlUp).Row + 1
      'コピーしたデータを貼り付ける
    my_Ws.Paste Destination:=my_Ws.Cells(my_Row, 1)
      '返却予定日を削除
    my_Ws.Cells(my_Row, 4).Delete (xlShiftToLeft)
 'コピーモードを解除
Application.CutCopyMode = False
  '画面更新をONにする
Application.ScreenUpdating = True
End Sub


ありがとうございます

やってみたところ少しわからないところもありますがもう少し自分なりに

勉強しながらやってみます

わからなくなったときはまたよろしくお願いします

(OS)


 復元しました。
 2004/09/08 00:28
 (kazu)



 以前このように教えていただきやって見ました
 できたのですが自分なりにいろいろ覚えようと数値を変えて変化をみたりして少し変更してみたのですが
 変更内容はB列の品名をA列のbノしました
 シートの名前も1、2、3、・・・と付けたのですが
 1のところに入力後そのシートの一番下に履歴が残って行きます
 2のところに入力すると1のシートに書き込まれていきます
 あとわけもわからない状態で触っているので数値がおかしいところもあると思いますが
 このような状態です↓
 Private Sub worksheet_change(ByVal Target As Range)
     Dim my_Ws As Worksheet
     Dim my_Row As Long

     'G列以外に入力されたときはマクロから抜ける
     If Target.Column <> 8 Then Exit Sub

     '画面表示の更新を停止
     Application.ScreenUpdating = False

     'A列の品名のシートの使用を宣言
     Set my_Ws = Worksheets(Target.Offset(0, -7).Value)
     'C〜G列のデータを切り取る
     Target.Offset(0, -4).Resize(, 5).Cut
     '品名シートの最下行を取得(貼り付け先の行番号を取得)
     my_Row = my_Ws.Range("A65536").End(xlUp).Row + 1
     'コピーしたデータを貼り付ける
     my_Ws.Paste Destination:=my_Ws.Cells(my_Row, 1)
     '返却予定日を削除
     my_Ws.Cells(my_Row, 3).Delete (xlShiftToLeft)

     'コピーモードを解除
     Application.CutCopyMode = False
     '画面更新をONにする
     Application.ScreenUpdating = True
 End Sub

 おかしな所等教えてください
 あとVBAというのでしょうか、このようなものを作る時の入門本とかはございますか?
 何か良い本があれば教えてください
 よろしくお願いします


 本はいらないので、こちらをお読み下さい。
 
http://www.sanynet.ne.jp/~awa/excelvba/kouza.html

http://www6.plala.or.jp/MilkHouse/menu.html

http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_menu.htm

   (INA)


たびたびすいません

この意味を教えていただけますでしょうか?

   my_Row = my_Ws.Range("A65536").End(xlUp).Row + 1

よろしくお願います


 セル A65536 で ctrl + ↑ キー をおしてジャンプしたセルの
 1行下の行番号です。

  (INA)


上記解説ありがとうございました

たびたびすいません

品名をシート名では無くbノできますでしょうか?

シートをai数字)にするとうまく行きません

品名ですとうまく記入されていきます

何か方法はありますでしょうか?

よろしくお願いします


 状況が良く分かりませんが、 全角半角はあっていますか?

  (INA)

↑はコピー貼りつけで解決できました

半角と全角などの違いみたいでした

今までは1つの物に対して1シートで履歴を残していましたが

すべての履歴を1枚のシートに順に書き込んでいくように直したいのですが

ここ「Set my_Ws = Worksheets(Target.Offset(0, -7).Value)」

を直せばそうなると思うのですが度のようにしたらよいか教えてください

シートの名前は"使用履歴"です

以前教えていただいたホームページで勉強していますが

まだあまりわかりませんのでよろしくお願いします


 Set my_Ws = Worksheets("使用履歴") 

 かな?

  (INA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.