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

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

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

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

Q&A

解決済

1回答

1309閲覧

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

green_frog

総合スコア2

VBA

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

0グッド

1クリップ

投稿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

1Private Sub 集計btn_Click() 2 3 '変数の宣言 4 Dim S1 As Long 'Sheet1の案件番号の列をカウント 5 Dim S2 As Long 'Sheet2の案件番号の列をカウント 6 Dim Sheet1 As Worksheet 7 Dim Sheet2 As Worksheet 8 9 Set Sheet1 = Sheets("Sheet1") 10 Set Sheet2 = Sheets("Sheet2") 11 12 'Sheet1 D案件の採番1からD案件の最終行までループしたい 13 '※毎回(B11)とは限らない。 14 For S1 = 11 To Sheet1.Cells(Rows.Count, 2).End(xlUp).Row 15 16 'Sheet2 (A5:最終行) ループ 17 For S2 = 5 To Sheet2.Cells(Rows.Count, 1).End(xlUp).Row 18 19 'Sheet1と同じ案件番号だったら、、、 20 If Sheet1.Cells(S1, 2) = Sheet2.Cells(S2, 1) Then 21 22 'Sheet2にデータを転記 23 Sheet2.Cells(S2, 5) = Sheet1.Cells(S1, 3) 24 25 End If 26 27 Next S2 28 29 Next S1 30 31End Sub

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

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

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

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

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

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

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

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にわざわざテキストボックスを作成する必要がないことに気づかされました。
guest

回答1

0

ベストアンサー

Sheet1はループをしたい始まりのセル番号(画像のS1=11)が必ずしも固定値でない為、
どのように記述すればよいか見当もつきません。

とりあえず、この部分だけ。WorksheetFunction.Matchを使うといいでしょう。

WorksheetFunction.Match メソッド (Excel) | Microsoft Docs

vba

1 Dim StartRow As Long 2 3 StartRow = WorksheetFunction.Match("D案件", Sheet1.Columns("A"), 0) + 1 4 MsgBox StartRow '確認用 5' For S1 = StartRow To Sheet1.Cells(Rows.Count, 2).End(xlUp).Row 6' Next

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

A1セルに月が入力されているようなので、これを使って、Matchで検索すればどうでしょう。

vba

1 Dim MonthColumn As Long 2 3 MonthColumn = WorksheetFunction.Match(Sheet1.Range("A1"), Sheet2.Rows(4), 0) 4 MsgBox MonthColumn

あと、案件番号もMatchを使えば、2重ループにする必要はなくなります。

投稿2022/09/04 08:49

編集2022/09/04 09:01
hatena19

総合スコア33715

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問