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

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

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

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

受付中

ExcelVBA、Sheet1からSheet2へ特定のデータを特定の位置にコピーするシステム。

green_frog
green_frog

総合スコア0

VBA

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

1回答

0リアクション

1クリップ

318閲覧

投稿2022/09/04 03:10

編集2022/09/04 06:49

前提

ExcelVBAでSheet1の特定のデータをSheet2にコピーするシステムを作成することになりました。
しかし、プログラミングの知識がほとんど皆無であり、また社内など周囲に詳しい方がおらず
困っているため、どうか助けていただきたいです。
分かりやすい説明が出来ず、申し訳ございません。

実現したいこと

まず、ExcelのSheet2のテキストボックスに「8」と入力し、「集計」ボタンを押下します。

処理は、Sheet1とSheet2の同じ案件番号に、Sheet1から取得した月累計時間データを、Sheet2の8月の列(F列)にコピーするようにしたいです。
Sheet1の月累計時間が空欄の場合はSheet2も空欄のままでコピーする予定です。
イメージ説明
イメージ説明

画像で説明すると、Sheet1(1枚目の画像)のB11と、Sheet2(2枚目の画像)のA5の値を比較する。
同値のため、Sheet1のC11の値をSheet2のF5にコピーする。
ような感じにします。

また、Sheet2のテキストボックスに「8」と入力したらSheet2のF列に、
「9」と入力したらSheet2のG列にコピーできるようにしたいです。

発生している問題

使用するExcelファイルは、毎月新規作成ではなく、上書きしています。
そのため、Sheet1は、案件番号が追記されたり、削除されたりします。Sheet2の案件番号の方は、追記されたら削除することはないです。
私の考えでは、ループでSheet1とSheet2の案件番号が等しかったら、Sheet1の月累計時間をSheet2の該当箇所にコピー → 次のセルへ というふうに考えているのですが、
Sheet1はループをしたい始まりのセル番号(画像のS1=11)が必ずしも固定値でない為、
どのように記述すればよいか見当もつきません。
例えば、月によってSheet1は、B11からやB20、B31などから始まる月があります。

VBA

Private Sub 集計btn_Click() '変数の宣言 Dim S1 As Long 'Sheet1の案件番号の列をカウント Dim S2 As Long 'Sheet2の案件番号の列をカウント Dim Sheet1 As Worksheet Dim Sheet2 As Worksheet Set Sheet1 = Sheets("Sheet1") Set Sheet2 = Sheets("Sheet2") 'Sheet1 D案件の採番1からD案件の最終行までループしたい '※毎回(B11)とは限らない。 For S1 = 11 To Sheet1.Cells(Rows.Count, 2).End(xlUp).Row 'Sheet2 (A5:最終行) ループ For S2 = 5 To Sheet2.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet1と同じ案件番号だったら、、、 If Sheet1.Cells(S1, 2) = Sheet2.Cells(S2, 1) Then 'Sheet2にデータを転記 Sheet2.Cells(S2, 5) = Sheet1.Cells(S1, 3) End If Next S2 Next S1 End Sub

補足情報(FW/ツールのバージョンなど)

Excel2016 64bit、Windows10
フォームのボタンとテキストボックスはActive Xコントロールで作成しています。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/04 06:40依頼された後にこの質問は修正されています

こちらの質問が複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

hatena19

2022/09/04 03:24

画像の解像度が低すぎて判読できません。判読可能な解像度でアップロードしなおしてください。 また、このままではteratailでは非推奨の丸投げの質問となっています。 うまく行っていないものでも構いませんので、現状のコードを追記して、 どの部分が分からないのか具体的に明示してください。
meg_

2022/09/04 03:33

> Sheet1の月累計時間をSheet2の該当箇所にコピー → 次のセルへ というふうに考えている それで良いかと思いますが、何か問題があるのでしょうか? > ループをしたい始まりのセル番号が固定値でない為 どのSheetのどこのことをおっしゃっていますか?
meg_

2022/09/04 06:55

> Sheet1はループをしたい始まりのセル番号(画像のS1=11)が必ずしも固定値でない為、どのように記述すればよいか見当もつきません。 A列から「D案件」の文字列を検索して見つかったセルの次の行がループの開始行だと思いますが違いますでしょうか?
green_frog

2022/09/04 07:00

声をかけて下さり、ありがとうございます。 > A列から「D案件」の文字列を検索して見つかったセルの次の行がループの開始行だと思いますが違いますでしょうか? おっしゃる通りでございます。
hatena19

2022/09/04 08:23

>「9」と入力したらSheet2のG列にコピーできるようにしたいです。 とのことですが、 Sheet1の画像では8月のデータしかないですが、9月のデータはどこにありますか。
green_frog

2022/09/04 08:32

hatena19さん、声をかけて下さりありがとうございます。 9月のデータは、手入力でSheet1の「月累計時間」に上書きしていくかたちになります。 余談ですが、ボタン名が「集計」だと不適切かもしれませんね。ボタン名は「転記」に変更した方が 誰が見ても誤解がなくなりそうだと今思いました。
hatena19

2022/09/04 08:46

だとしたら、テキストボックスに「9」と入力せずとも、Sheet1のA1セルを参照すればいいと思いますが、 それでもいいですか。(A1セルに必ず月が入力されている前提ですが。)
green_frog

2022/09/04 08:56

hatena19さん、ありがとうございます。 > (A1セルに必ず月が入力されている前提ですが。) おっしゃるとおりです。Sheet1のA1セルは必ず月が入力されるようにしていますので、 Sheet2にわざわざテキストボックスを作成する必要がないことに気づかされました。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VBA

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