• ベストアンサー

自動転記の関数について

下記の画像のように元の台帳に別ウィンドから自動転記させたいのですが詳しい方アドバイスお願いいたします。 まず別ウィンドでNOを入力すると自動で事業者名がでる。(元台帳には事業所名登録済) 次に日にちの下に数字を入力する。 完了すると元台帳の同じNO、事業所の列の同じ日にちの場所に自動転記できる。 尚、必ずNOと事業所名が一致した場合のみ自動転記 以上説明不足かと思いますがよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

> 今はボタンで元台帳のデータを引用してますが別ウィンドウのNo.を入力した時に > ボタンを押さなくても自動で引用できるでしょうか? そういう場合は、Worksheet_Changeを使います。 Sheetのオブジェクト(コマンドボタンのコードと同じ場所です)に以下のコードを入れてみてください。 Worksheet_Changeは、セルが変更された時に動くイベントですので、変更されたのがI2セルかどうかを確認し、あとはボタンを押下した時と同じことをしています。 Private Sub Worksheet_Change(ByVal Target As Range)   Dim nRow As Long   '変更されたのはI2セルか?   If Target.Address = "$I$2" Then     '事業所が存在するか確認     If Range("I3") = "" Then Exit Sub        '現在入力されている値を表示     nRow = Range("A4:A8").Find(What:=Range("I2")).Row     Range("H6:K6").Value = Range("C" & nRow & ":F" & nRow).Value      End If End Sub

hand555
質問者

お礼

迅速な対応に感謝します。御陰様で無事完成しました。本当にありがとうございました。

その他の回答 (4)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

> 元台帳からだとnRow = Range("H24調査A4:A8").Find(What:=Range("I2")).Row ?感じかな お役にたてて何よりです。 シートの指定はRangeの前につけます また、コマンドボタンがあるシートのセルを指定する場合は、自シートになりますのでシート名は不要です(もちろんつけても構いません)。 例) nRow = Sheets("H24調査").Range("A4:A8").Find(What:=Range("I2")).Row Range("H6:K6").Value = Sheets("H24調査").Range("C" & nRow & ":F" & nRow).Value

hand555
質問者

お礼

本日良きアドバイスにより無事に完成しました。心から感謝申し上げます。 わがままを言えば最後にもう一つアドバイスをお願いします。 今はボタンで元台帳のデータを引用してますが別ウィンドウのNo.を入力した時に ボタンを押さなくても自動で引用できるでしょうか? よろしくお願いします。

hand555
質問者

補足

いつも早い回答ありがとうございます。 早速試したのですが慌ててたせいか実行するとVBAのページに移行し悪い列だと思うのですが黄色色で塗ら れていて実行できませんでした。明日また挑戦しますが駄目なときはまたまたアドバイスお願いします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

手抜き版ですが。 セルの位置などは質問画像の通りとします。 シートや位置が異なる場合適当に変えてください。 I3セルに↓と、入れます。 =IF(COUNTIF(A4:A6,I2)=0,"",VLOOKUP(I2,A4:B6,2,FALSE)) シートにコマンドボタンを2つ挿入して、以下のコードを埋め込みます。 Private Sub CommandButton1_Click()   Dim nRow As Long   '事業所が存在するか確認   If Range("I3") = "" Then Exit Sub   '現在入力されている値を表示   nRow = Range("A4:A8").Find(What:=Range("I2")).Row   Range("H6:K6").Value = Range("C" & nRow & ":F" & nRow).Value End Sub Private Sub CommandButton2_Click()   Dim nRow As Long   '事業所が存在するか確認   If Range("I3") = "" Then Exit Sub   '現在入力されている値を転記   nRow = Range("A4:A8").Find(What:=Range("I2")).Row   Range("C" & nRow & ":F" & nRow).Value = Range("H6:K6").Value End Sub 1つ目のコマンドボタンが元台帳から現在のデータを引っ張ってくるもの。 2つ目のコマンドボタンが元台帳へ転記する物です。

hand555
質問者

補足

いつも早々と回答ありがとうございます。早速本日試しましたところ完璧にできました。 コマンドコード作成の時、同じシートの中の別ウィンドではできるのですが別シートになると(別々のシ ート)うまくできません。 どうもシート名がうまくいれられない?くぎれないかと思います。またまたよろしければアドバイスお願 いいたします。 元の台帳のシートの名前 H24調査 (sheet1) 別ウィンドのシートの名前  個別調査 (sheet2) 上のVBAの例ですと同じシートならnRow = Range("A4:A8").Find(What:=Range("I2")).Row 元台帳からだとnRow = Range("H24調査A4:A8").Find(What:=Range("I2")).Row ?感じかな わかりずらくてすみませんがよろしくお願いいたします。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! こういうコトですかね? ↓の画像で右側が「別Sheet」(Sheet2)としています。 Sheet2のB2セルには =IF(COUNTIF(元台帳!A:A,B1),VLOOKUP(B1,元台帳!A:B,2,0),"") 元台帳SheetのC3セルに =IF($A3=Sheet2!$B$1,HLOOKUP(C$2,Sheet2!$4:$5,2,0)&"","") という数式を入れ、列方向・行方向にオートフィルでコピーすると 画像のような感じになります。 ※ Sheet2の5行目データの変更がない場合は、「元台帳」Sheetの事業所の行のみ変更され 同じデータが表示されます。 的外れならごめんなさいね。m(_ _)m

hand555
質問者

お礼

早速の回答ありがとうございました。いろいろな方法がありますね。参考にさせていただきます。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

今度は図がちゃんと見えました。 No.を入力すると事業所名を表示する部分はVLOOKUP関数で可能ですが、入力した日々の値を転記する部分はマクロが必要です。 以下の補足願います ・選択された事業所に既にデータが入力されていた場合はどうしますか?  ・入力済みと言う事で、警告を出して終了  ・入力済みの値を別ウィンドのデータエリアに表示して値を変更できるようにする  ・入力済みの値は表示せず、今回入力した値を上書きする

hand555
質問者

補足

早速の回答ありがとうございます。補足の件は2番目の別ウィンドウにデータを表示し変更かキャンセルで選択きればありがたいです。よろしくお願いします。

関連するQ&A