Excel VBA 質問スレッド №1991 (解決済)

データの呼び出し

投稿者 : おぼん     投稿日時 : 2024/08/14(Wed) 16:36:50     OS : 未指定     EXCEL : 未指定
sheet1のA1セルに名前を入力すると、sheet2の名前の人の各曜日の出退勤時間を呼び出す。
そして、sheet1の内容をsheet3に転記しようと考えています。
お聞きできたらうれしいのが、sheet1のA1セルに名前を入力すると、sheet2の名前の人の各曜日の出退勤時間を呼び出す。でみなさんが思われた方法をお聞きしたいです。
画像にあるsheet2の人数は一部で、合計で70人ほど下に同じ配列で登録しようと思います。人数は今後増えることや、減ること、時間の変更などあると思います。
マクロや数式、Excelの機能ありましたら教えていただけると幸いです。
お忙しいと思うので、ヒントだけでもいただけるとありがたいです。
よろしくお願いします。

画像1 https://ibb.co/SKDtTwJ
画像2 https://ibb.co/F33tPJ9
画像3 https://ibb.co/bWMcrr0
画像4 https://ibb.co/8M8MvTh

スポンサーリンク
[返信 1] Re : データの呼び出し
投稿者 : さんこう     投稿日時 : 2024/08/14(Wed) 17:21:44
>sheet1のA1セルに名前を入力すると、sheet2の名前の人の各曜日の出退勤時間を呼び出す。
>そして、sheet1の内容をsheet3に転記しようと考えています。

最初からsheet3に呼び出せばよさそうに思いますが。


>sheet1のA1セルに名前を入力すると、sheet2の名前の人の各曜日の出退勤時間を呼び出す。でみなさんが思われた方法

Sheet2の形式を変更して、SUMIFS関数にします。

(現状の形式でも、INDEX関数とMATCH関数中心の数式でできましたが...)


とはいえ、ここはVBAの掲示板なので、ユーザー定義関数を提示しておきます。
実用的ではないので、参考程度で。

Function 出勤時間(名前, 曜日)
    Set ws = Worksheets("Sheet2")
    
    出勤時間 = "えらー"
    For r = 1 To ws.Cells(Rows.Count, "A").End(xlUp).Row
        If ws.Cells(r, "A") = 名前 Then
            For i = 1 To 5
                If ws.Cells(r + i, "A") = 曜日 Then
                    出勤時間 = ws.Cells(r + i, "B")
                    Exit For
                End If
            Next
        End If
    Next
End Function

[返信 2] Re : データの呼び出し
投稿者 : ピロリ     投稿日時 : 2024/08/17(Sat) 08:07:01
> ・・・ sheet1の内容をsheet3に転記しようと考えています。
Sheet1へ1人ずつ呼び出さないと Sheet3への転記ができないって、面倒なのでは?
私も Sheet2から Sheet3へ全員分を直接転記すれば・・・と思いますが、何か事情があるのでしょうかね。

> sheet1のA1セルに名前を入力すると、sheet2の名前の人の各曜日の出退勤時間を呼び出す。
「Sheet1」シートモジュールの Worksheet_Changeイベントで処理させても良いでしょう。
例えば下のような感じでしょうか。 ヒントになるか分かりませんけど。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet, r As Range
    Set ws = Worksheets("Sheet2")
    If Target.Address = "$A$1" Then                         'A1セル(名前)の入力なら、
        Application.EnableEvents = False
        Range("A2:C6").ClearContents                        '一旦、出退勤情報を消去
        If Target = "" Then
            Target.Select: MsgBox "名前を入力して!"
        Else
            Set r = ws.Columns(1).Find(What:=Target, LookAt:=xlWhole)   '名前の検索
            If r Is Nothing Then                            '検索できなかったら、
                Target.Select: MsgBox "検索異常:" & Target 'エラーメッセージを表示
            Else                                            '検索できたら、
                r.CurrentRegion.Copy Target                 '該当者の全情報をコピペ
            End If
        End If
        Application.EnableEvents = True
    End If
End Sub

[返信 3] Re : データの呼び出し
投稿者 : おぼん     投稿日時 : 2024/08/18(Sun) 12:48:14
さんこう様、ピロリ様、ありがとうございます。
Sheet2から Sheet3へ直接転記はその発想が質問時点でなかったです。教えていただいて、なるほどと気づきましたが、自分にはそれを実現できる技量もないかなと。あとは、最初の形で進んでいるのもありまして。
これは、質問後に発生したことなのですが、sheet2の内容の必要な部分(例で表a1:f4の範囲のa1:a4,c1:d4)だけをsheet3に転記することも必要になりました。
この場合、sheet2からsheet1に呼び出したデータから必要部分だけを、sheet1の別セルにコピーし、それをsheet3に転記するという形をとってます。
結果的にはsheet1からの転記が必要なことになったのかな?もっと別の方法、シンプルな方法があるだろうとも思っていまして。
結論から言うと問題は解決しましたが、またお暇なときにお気づきの点を教えていただけると幸いです。

[返信 4] Re : データの呼び出し
投稿者 : 解決     投稿日時 : 2024/08/28(Wed) 12:05:14
かいけつ

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-06 04:44:05 )
タイトルとURLをコピーしました