[[20030923024907]] 『複数シートの自動更新』(ぽん) ページの最後に飛ぶ

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

 

『複数シートの自動更新』(ぽん)

一つのブックに○月○日、△月△日、と日にちごとのシートが25あります。その○月○日のシートにデータが50入れる表がそれぞれ作ってあり、氏名、生年月日、TEL、2回目予約日が一列に入力するようになっています。一日に50までしか入力しないようにします。
2回目予約日はリストボックスから入力するようになっているのですが、この2回目予約日を入力したら、2回目の予約をその日付のシートに自動的にデータが入るようにしたいのですが。
どのようにしたらよいでしょうか。


 >2回目の予約をその日付のシートに自動的にデータが入るようにしたいのですが。
 入れたい元データの範囲と、入れる先の範囲を教え下さい。
 シートのレイアウト(セルの番地や、行列で)をお教え願います。
  (INA)  

まず1回目の予約を日付ごとのシートに入力します。
  A列 番号1〜50まで
  B列 氏名
  C列 生年月日
  D列 年齢
  E列 TEL
  G列 2回目予約日
そして、2回目を入力した時、その行の氏名、生年月日、年齢、TELが、その日付に飛ぶようにしたいのです。1回目は入力するので例えば10月10日に5人予約が入っていたら、2回目の予約が6番目の行に自動的に入れるようにです。
うまく説明できませんがよろしくお願いします。
シート名は10月10日のように日付になっています。


 G列の日付に「入力されている値」と「表示されている値」は、どのような形式でしょうか?
 シート名と比較するために必要なので、お教え下さい。
 ちなみにVBAについては、どの程度理解されていますでしょうか?
  (INA)


 G列は10月11日(土)、10月16日(木)のようにリストボックスから選択しています。
 VBAは勉強し始めたばかりでほとんどわかりません。
 良い方法がありましたらご教授下さい。 

 リストボックスから選択している文字列ではなく、
 セルに「入力されている値」と「表示されている値」をお教え下さい。
 またセルの書式設定の表示形式もお教え下さい。

 10月11日(土)→表示されている値?入力されている値?
         半角全角は正しい?月や日は常に2桁表示?

 一般機能で出来るとは思えないので、VBAで良ければコードを作ってみたいと思います。
  (INA)


 ありがとうございます。
 「表示されている値」、「入力されている値」の意味がよくわからなくて、G列のセルに
 入力規則を使った簡易リストボックスが作ってあるのでそこから選択するようにしています。
 数字は半角です。10月から12月なので月は2桁、日も2桁で入力されています。
 書式設定は標準です。

  10月11日(土)
  10月16日(木)
  10月18日(土)
  10月23日(木)
  10月25日(土)
  10月30日(木)
  11月01日(土)
  11月06日(木)
  11月08日(土)
  11月13日(木)
  11月15日(土)
  11月20日(木)
  11月22日(土)
  11月27日(木)
  11月29日(土)
  12月04日(木)
  12月06日(土)
  12月11日(木)
  12月13日(土)
  12月18日(木)
  12月20日(土)
  12月25日(木)
  12月27日(土)
 
 これだけリストに入っていて、シート名も日付ですが(曜日)ははいっていません。

 1年を通して使われるのですよね?
 1月とかは、01月01日(月)のように2桁表示なのでしょうか?
 その際、シート名も 01月01日 のようになりますか?

  (INA)


 1年を通してではなく、10月〜12月のみです。
 ただ、別のファイルとして同じようなものを翌年以降も使うかもしれません。

 以下のコードを、ThisWorkBookモジュールにコピペして、使用して下さい。
 (月日が2桁表示の場合のみ対応しています。)(INA) 

 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Dim ShtName As String 'コピー先シート名
 Dim LastRow As Long 'コピー先の最下行
 Dim Result As Long '確認

 On Error Resume Next '複数選択時のエラー対策

    '対象のセルがG列以外の場合、マクロ終了
    If Target.Column <> 7 Then Exit Sub

    '対象のセルが空白の場合、マクロ終了
    If Target.Value = "" Then Exit Sub

    'シート名を変数に格納
    ShtName = Left(Target.Value, 6)

    'B列で最下行を求め、変数に格納
    LastRow = Worksheets(ShtName).Range("B65536").End(xlUp).Offset(1, 0).Row

    '確認
    Result = MsgBox("シート " & ShtName & " の " & _
             LastRow - 1 & " 番目にコピーします。", 1, "確認")

    'キャンセルの場合
    If Result = 2 Then Exit Sub

    '値のコピー
    Range("B" & Target.Row & ":E" & Target.Row).Copy _
    Destination:=Worksheets(ShtName).Range("B" & LastRow & ":E" & LastRow)

    'コピー先を選択
    Worksheets(ShtName).Select
    Worksheets(ShtName).Range("B" & LastRow & ":E" & LastRow).Select

 End Sub


 教えていただいたようにやってみましたがうまく動作しません。
 やり方が悪いのでしょうか?
 挿入→モジュール→ここでコピー
 お手数をおかけしますが教えていただけますか?
 (ぽん)

 Alt + F11 で、VBE が起動します。
 プロジェクトウィンドウの 「ThisWorkBook」モジュールでダブルクリックして、
 コードウィンドウにコピペして下さい。
 (INA)


 やってみました。やはり、エラーはでませんが、2回目データが更新されません。(ぽん)

 当方の環境は、Win98SE,Excel2000で動作確認済みです。
 デザインモードは解除されてますよね?
 (INA)


2回め入力の列をG列→F列と勘違いしていました。申し訳ありません。ちゃんとできました。
シートごとに50行の表が作ってあり、1番目の入力は5行目(セルA5)からでした。
説明不足で何度もお手数おかけしますが、これだと1番目の人が55行目に入力になってしまいます。できたら表はこのままで入力したいのですが。よろしくお願いします。(ぽん)

 最下行は以下の式で求めていますので、(B65536でCtrl+↑キー +1行下)
 4行目にタイトルなどの何らかの値が入っていれば、そのままで問題ないと思います。
 LastRow = Worksheets(ShtName).Range("B65536").End(xlUp).Offset(1, 0).Row

 G列→F列については、以下の式を6列目に変更するだけです。
    If Target.Column <> 7 Then Exit Sub

  (INA) 

 INAさん どうもありがとうございました。あと1つお願いがあるのですが、2回目データが
 更新された時、1回目データと2回目データが混在してくるため、区別する必要上、G列の日付 が入るセルに「2回目」と表示させることはできないでしょうか?


 >G列の日付が入るセルに「2回目」・・・
 F列じゃなかったっけ? 以下のコードを「値のコピー処理」の後にでも追加して下さい。

 Application.EnableEvents = False
 Worksheets(ShtName).Range("G" & LastRow).Value = "2回目"
 Application.EnableEvents = True

  (INA)


 やったー。ばっちりです。これでここ2、3日の悩みから開放です。
 本当にありがとうございました。
 VBAってすごいですね。思ったことがすぐできてしまうINAさんもすごいです。
 まだまだですが少しずつ勉強していきます。
 またお世話になるかもしれませんが、その時はこれに懲りずに教えて下さい。
                                     (ぽん)

コメント返信:

[ 一覧(最新更新順) ]


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