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

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

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

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

Q&A

解決済

2回答

510閲覧

エクセルマクロについて

kato00

総合スコア71

VBA

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

0グッド

2クリップ

投稿2020/04/18 07:25

編集2020/04/18 09:54

エクセルのマクロについて教えて下さい。

エクセルマクロ(VBA)初心者です。

今回、勤怠管理の自動化をしたいと思っています。
現在ファイルAのデータをファイルBに転記する作業を手動で行っています。
詳細は添付画像をご覧ください。

これをマクロでやろうと思っているのですが、
1 ファイルAのD列の日付をファイルBのA列から探す。
2 日付があった場合(例えば4日)、ファイルAの4日のE列、F列のデータを
ファイルBのD列、E列に転記

イメージ説明

という動きにしようと考えているのですが、そもそもこの動きはマクロで可能でしょうか?
可能な場合、記述の仕方を教えて頂けると幸いです(ざっくりでも結構です)

もし、もっといいやり方があれば教えて下さい。

宜しくお願いします。

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

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

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

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

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

m.ts10806

2020/04/18 07:39

>BVA タグにある通り「VBA」です。調整願います。 またこのタイトルでは要件が分かりません。もう少し具体的に要件を記載してください
meg_

2020/04/18 07:41

そもそもこの動きはマクロで可能でしょうか? → 可能です。 可能な場合、記述の仕方を教えて頂けると幸いです(ざっくりでも結構です) → まず、質問者さんはどのくらいエクセルVBAが出来ますか?
kato00

2020/04/18 09:53

どのくらい出来るかですが、どうお伝えすればいいか、、、、 とりあえず「マクロの記録」で作成されたVBAをネットで調べれば何をしているか分かるレベルです。 他の回答者さんがおっしゃっている "日付があった場合"という判断と、"日付があった場合"に何をして、 "日付が無かった場合"に何をするか、の部分はマクロのプログラムで補足してやる必要があります。 この部分はIF文かな?と推測できるレベルです。
meg_

2020/04/18 11:55

If文で良いと思います。あとはForループも必要となるでしょうが、とりあえず1行のデータの転記処理をするコードを書いて、質問に追記しましょう。
guest

回答2

0

ベストアンサー

こんにちはこんばんは、よろしくお願いいたします。
こういった課題の場合、私はいつも、検索したい列をRANGEで定義して、そしてFINDを使っております。
以下のようなVBAを作ってみました。私のほうで実験してみて、動作確認できています。
ご参考になれば幸いです。

VBA

1Option Explicit 2 3Sub GyomuJikanTenkiMacro() 4'ファイルAからファイルBに業務時間を転記するマクロです 5'ファイルA、ファイルBともに、開いてある状態からスタートするものとします 6'ファイルA、ファイルBともに、シート名はそれぞれ"Sheet1"であるものとします 7 8Dim ASheet As Worksheet 9Dim BSheet As Worksheet 10 11Set ASheet = Workbooks("ファイルA.xlsx").Worksheets("Sheet1") 12Set BSheet = Workbooks("ファイルB.xlsx").Worksheets("Sheet1") 13 14Dim BSheetSearchRange As Range 'ファイルBのSheet1のA列を検索するので、それを定義します 15Dim SheetBFoundRange As Range 'ファイルBのSheet1のA列を検索した結果を格納するための定義です 16 17Dim WorkDay_A As String '検索につかう”日付”を格納するための定義です 18Dim StartTime_A As Date '業務開始時間を転記するための定義です 19Dim EndTime_A As Date '業務終了時間を転記するための定義です 20 21Dim r As Range 'foreachを回すための変数です 22 23ASheet.Activate '”End”を使うときは、その対象のシートをアクティブにしておかないとうまくいかないので、ここで activateしています 24For Each r In ASheet.Range("D2", Range("D2").End(xlDown)) 25 26 WorkDay_A = r.Value 27 StartTime_A = r.Offset(0, 1).Value 'offsetを使って、転記するための業務開始時間を得て格納します 28 EndTime_A = r.Offset(0, 2).Value 'offsetを使って、転記・格納するための業務終了時間を得て格納します 29 30 BSheet.Activate '”End”を使うときは、その対象のシートをアクティブにしておかないとうまくいかないので、ここで activateしています 31 Set BSheetSearchRange = BSheet.Range("A2", Range("A2").End(xlDown)) 32 33 'ファイルAのシートの日付で、ファイルBの日付列をFINDします。FINDした結果をSheetBFoundRangeに格納します 34 Set SheetBFoundRange = BSheetSearchRange.Find(what:=WorkDay_A, lookat:=xlWhole) 35 36 If SheetBFoundRange Then '該当する日付が見つかったら 37 With SheetBFoundRange 'ファイルBのSheet1のその行に転記していきます 38 .Offset(0, 2).Value = StartTime_A '業務開始時間 39 .Offset(0, 3).Value = EndTime_A '業務終了時間 40 End With 41 End If 42 '見つからなかったらなにもしません 43 44'次の行に移ります 45Next r 46 47End Sub 48

投稿2020/05/02 07:38

AkiSaito

総合スコア110

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

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

kato00

2020/05/22 15:31

ご連絡遅くなりました! コードありがとうございました!
guest

0

Excelには、「マクロの記録」という機能があります。

「マクロの記録」を開始しておいて、"ファイルAのデータをファイルBに転記する作業"を手動で行うと、行った作業がマクロ(VBAのプログラム)として記録されます。

その記録されたマクロは、手動で行った作業を記述したものにほかなりませんから、参考になると思います。

” 日付があった場合(例えば4日)”という判断は人間がしたものですから、マクロには記録されません。
記録されるのは「ファイルAの4日のE列、F列のデータをファイルBのD列、E列に転記」の作業です。

"日付があった場合"という判断と、"日付があった場合"に何をして、"日付が無かった場合"に何をするか、の部分はマクロのプログラムで補足してやる必要があります。

投稿2020/04/18 07:55

coco_bauer

総合スコア6915

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問