- ベストアンサー
自動転記の関数について
- みんなの回答 (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
その他の回答 (4)
- mt2008
- ベストアンサー率52% (885/1701)
> 元台帳からだと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
お礼
本日良きアドバイスにより無事に完成しました。心から感謝申し上げます。 わがままを言えば最後にもう一つアドバイスをお願いします。 今はボタンで元台帳のデータを引用してますが別ウィンドウのNo.を入力した時に ボタンを押さなくても自動で引用できるでしょうか? よろしくお願いします。
補足
いつも早い回答ありがとうございます。 早速試したのですが慌ててたせいか実行するとVBAのページに移行し悪い列だと思うのですが黄色色で塗ら れていて実行できませんでした。明日また挑戦しますが駄目なときはまたまたアドバイスお願いします。
- mt2008
- ベストアンサー率52% (885/1701)
手抜き版ですが。 セルの位置などは質問画像の通りとします。 シートや位置が異なる場合適当に変えてください。 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つ目のコマンドボタンが元台帳へ転記する物です。
補足
いつも早々と回答ありがとうございます。早速本日試しましたところ完璧にできました。 コマンドコード作成の時、同じシートの中の別ウィンドではできるのですが別シートになると(別々のシ ート)うまくできません。 どうもシート名がうまくいれられない?くぎれないかと思います。またまたよろしければアドバイスお願 いいたします。 元の台帳のシートの名前 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)
こんばんは! こういうコトですかね? ↓の画像で右側が「別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
お礼
早速の回答ありがとうございました。いろいろな方法がありますね。参考にさせていただきます。
- mt2008
- ベストアンサー率52% (885/1701)
今度は図がちゃんと見えました。 No.を入力すると事業所名を表示する部分はVLOOKUP関数で可能ですが、入力した日々の値を転記する部分はマクロが必要です。 以下の補足願います ・選択された事業所に既にデータが入力されていた場合はどうしますか? ・入力済みと言う事で、警告を出して終了 ・入力済みの値を別ウィンドのデータエリアに表示して値を変更できるようにする ・入力済みの値は表示せず、今回入力した値を上書きする
補足
早速の回答ありがとうございます。補足の件は2番目の別ウィンドウにデータを表示し変更かキャンセルで選択きればありがたいです。よろしくお願いします。
お礼
迅速な対応に感謝します。御陰様で無事完成しました。本当にありがとうございました。