質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

1回答

15850閲覧

日付が一致した行に別シートに入力されているデータを転記したい

syun0334

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/10/14 12:23

編集2020/10/16 16:49

日付が一致した行に別シートに入力されているデータを転記する。

やりたいことは、入力データ1シートのE3から入力してある社員番号の一致したシートに入力データ1シートのB列からD列に入力されているデータを日付が一致した行のD列からF列に転記を行いたいです。
自分で書いてみたコードは以下の通りで入力データ1の社員番号から該当のシートをアクティブにすることまではできたのですが(見つけた場合の処理内容としてメッセージボックスが出るようにしてあります。)、入力データ2に入力されている日付を各社員番号の一致したシートから検索することがいろいろ試してもできませんでしたのでアドバイスをお願いします。日付行だけが取得できれば転記の作業はこれでできると思います。
※・シートは実際には1000枚もありません。後の修正で最終行までループさせるようにするつもりです。
・入力シート1には入力シート2に入力された日付のB列:シフト番号、C列:出勤時間、D列:退勤時間が入  力されています。
・入力シート2にはマクロで組んだボタンを配置するつもりです。

vba

1Sub 個人別シートへ出力() 2Dim ws As Worksheet 3Dim 社員番号 As Long 4Dim b As Long 5For b = 3 To 1000 6社員番号 = Worksheets("入力データ1").Range("E" & b).Value 7 For Each ws In Worksheets 8 ws.Activate 9 If ws.Name Like "*" & 社員番号 & "*" Then 10 Range("D" & 日付行).Value = Worksheets("入力データ1").Range("B" & b).Value 11 Range("E" & 日付行).Value = Worksheets("入力データ1").Range("C" & b).Value 12 Range("F" & 日付行).Value = Worksheets("入力シート1").Range("D" & b).Value 13 14        MsgBox "ありました" 15 End If 16 Next ws 17Next b 18End Sub

イメージ説明

↑入力データ1

イメージ説明

↑入力データ2

イメージ説明

↑各社員の個人シート

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/10/14 13:02

> いろいろ試してもできませんでした 具体的には何を試されたのでしょうか?
syun0334

2020/10/14 13:42

WorksheetFunction.Matchのコードを書いたのですがエラーになってしまったりしました。他にも以下のコードを書いてみたのですが、社員番号の該当するシートの行番号を拾ってこなかったので質問に書いてあるコードの処理欄で処理を行おうと思っています。 ※このコードでは入力シート1A1に日付を入れてあるのでメッセージボックスでは1を拾ってきてしまいました。 【コード】 Sub a() Dim c As Range Dim ws As Worksheet Set ws = Worksheets("入力シート1") With ActiveSheet Set c = .Range("A:A").Find(What:=DateValue(ws.Range("A1")), LookIn:=xlFormulas, LookAt:=xlWhole) If Not c Is Nothing Then MsgBox c.Row End If End With End Sub
meg_

2020/10/14 22:27

上記コードで「行番号」は取得できている、ということですか?であれば、後は必要な列を指定してデータをコピーすれば良いのでは?(Cells(行番号,列番号)でセル指定すれば良いです)
syun0334

2020/10/15 00:47

上記コードでは入力シート1に入力されている日付の行番号を取得しています。本来取得したい行番号は入力シート2に入力してある日付と個人別シートのB列に入力されている日付が一致した行番号です。
guest

回答1

0

1.各シートのレイアウトがよくわからないので、例のような
入力シート1、入力シート2、及び入力データ1の社員番号から該当のシートの画像を提示していただけませんでしょうか。
入力シート1
入力シート2

2.入力シートの正しいシート名は、
入力データ1でしょうかそれとも入力シート1でしょうか。(2も同様)
(提示されたマクロでは両方が混在しています)

3.入力データ1の社員番号と該当のシートのシート名は、完全に一致しないのでしょうか。
例 社員番号=1234のとき、該当シートのシート名=AA1234BBのようになっているのですか。
それとも該当シートのシート名=1234でしょうか。
If ws.Name Like "" & 社員番号 & "" Then で、
社員番号の両端に*を付けているため、質問しました。

投稿2020/10/15 03:50

tatsu99

総合スコア5438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問