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

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

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

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

Q&A

解決済

1回答

478閲覧

結合セルの値を検索対象にして該当セルの値を入力したい。

youyou40

総合スコア1

VBA

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

0グッド

0クリップ

投稿2022/12/27 14:34

編集2022/12/27 14:40

前提

画像のような案件管理表とそのコストを集計するファイルがあります。

案件管理表
利益管理ファイル

実現したいこと

利益管理ファイルの「案件名」と「担当者名」を検索値として使用し、
案件管理表ファイルの「案件名」と「担当者名」が合致するデータの「人件費」を利益管理ファイルの「対応コスト」に転記したいです。

発生している問題・エラーメッセージ

現状のコードだと、案件名に関わらず、該当する担当者名の人件費が対応コストに転記されてしまっています。
また、担当者名が複数いた場合、案件管理表の列が後に記載されている担当者名のデータのみが取得されてしまっています。

該当のソースコード

vba

1Sub rieki1_Clic() 2'変数定義 3Dim i As Integer '行の番号 4Dim j As Integer '列の番号 5Dim k As Integer '担当者名の列指定 6Dim x As Long '案件管理表の行番号 7Dim y As Long '案件管理表の列番号 8Dim TargetBook As String '案件管理表指定 9Dim RiekiBook As String '案件管理表指定 10Dim RiekiSheet As String '案件管理表指定 11TargetBook = "案件管理表.xlsm" 12RiekiBook = "利益管理.xlsm" 13RiekiSheet = "Sheet2" 14 15For x = 2 To 250 16 17'行の指定 18For i = 8 To 74 19'列の指定 20For j = 6 To 15 21For k = 6 To 16 Step 2 '利益管理ファイルの担当者名列の指定 22'利益管理ファイルの案件名が空欄でない 23If Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, 2).Value <> 0 24'利益管理ファイルの対応コストの指定 25And j Mod 2 = 1 26'利益管理ファイルの案件名と案件管理ファイルの案件名が一致する 27And Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, 2).Value = Workbooks(TargetBook).Worksheets("Sheet1").Cells(10, x).MergeArea(1,1).Value 28'利益管理ファイルの担当者名と案件管理ファイルの担当者名が一致する 29And Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, k).Value = Workbooks(TargetBook).Worksheets("Sheet1").Cells(2, x).MergeArea(1,1).Value Then 30'利益管理ファイルの担当コストに案件管理表の人件費を転記 31Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, j).Value = Workbooks(TargetBook).Worksheets("Sheet1").Cells(16,x).MergeArea(1,1).Value 32Else 33End if 34Next k 35Next j 36Next i 37Next x 38End Sub

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

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

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

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

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

tatsu99

2022/12/28 02:25

提示されたソースをコピーしてこちらで実行するとコンパイルエラーになります。 実際に動作させたソースを提示していただけませんでしょうか。 (コンパイルエラーがとれないということでしたら、そのように質問をし直してください)
youyou40

2022/12/28 02:32

コンパイルエラーはどの行にエラーが発生していると出ていますか? IF文の改行は見やすくするために入れているので、Andの前に改行を削除して試していただけますでしょうか。
tatsu99

2022/12/28 03:22

コピペして、そのまま実行すると下記行でエラーになります。 If Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, 2).Value <> 0 見やすくするために、意図的に改行しているのですね。了解しました。
tatsu99

2022/12/28 04:35

不明点です。 1.案件管理表のD列、E列の案件名は、見出しのように見えますが、実際の案件名が設定されますか。 もし、実際の案件名が設定されるなら、xの開始は2ではなく、5になります。 もし、実際の案件名が設定されないなら、xの開始は2ではなく、3になります。 2.利益管理ファイルの担当者の検索は、 For j = 6 To 15 の行が余分と思われますがいかがでしょうか。 For k = 6 To 16 Step 2 の行と重複しています。
youyou40

2022/12/28 05:50

1. わかりづらくて申し訳ございません。  D・E列は見出しとなります。 2. kは担当者名の列を指定  jは担当者と対応コスト全体を指定しており、if文で対応コストのみを指定するようにしています。  
guest

回答1

0

ベストアンサー

修正しました。多少見やすくするために、変数を追加しました。

VBA

1Sub rieki1_Clic() 2'変数定義 3 Dim i As Integer '行の番号 4 Dim j As Integer '列の番号 5 Dim k As Integer '担当者名の列指定 6 Dim x As Long '案件管理表の行番号 7 Dim y As Long '案件管理表の列番号 8 Dim TargetBook As String '案件管理表指定 9 Dim RiekiBook As String '案件管理表指定 10 Dim RiekiSheet As String '案件管理表指定 11 Dim anken As String '案件名(利益管理ファイル) 12 Dim tanto As String '担当者(利益管理ファイル) 13 Dim anken2 As String '案件名(案件管理表) 14 Dim tanto2 As String '担当者(案件管理表) 15 TargetBook = "案件管理表.xlsm" 16 RiekiBook = "利益管理.xlsm" 17 RiekiSheet = "Sheet2" 18 19 For x = 3 To 250 20 21 '行の指定 22 For i = 8 To 74 23 anken = Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, 2).Value 24 For k = 6 To 16 Step 2 '利益管理ファイルの担当者名列の指定 25 tanto = Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, k).Value 26 '利益管理ファイルの案件名が空欄でないかつ 利益管理ファイルの担当者が空欄でない 27 If anken <> "" And tanto <> "" Then 28 anken2 = Workbooks(TargetBook).Worksheets("Sheet1").Cells(10, x).MergeArea(1, 1).Value 29 tanto2 = Workbooks(TargetBook).Worksheets("Sheet1").Cells(2, x).MergeArea(1, 1).Value 30 '利益管理ファイルの担当者名と案件管理ファイルの担当者名が一致する 31 If tanto = tanto2 And anken = anken2 Then 32 '利益管理ファイルの担当コストに案件管理表の人件費を転記 33 Workbooks(RiekiBook).Worksheets(RiekiSheet).Cells(i, k + 1).Value = Workbooks(TargetBook).Worksheets("Sheet1").Cells(16, x).MergeArea(1, 1).Value 34 End If 35 End If 36 Next k 37 Next i 38 Next x 39End Sub 40

投稿2022/12/28 06:52

tatsu99

総合スコア5436

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

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

youyou40

2022/12/28 12:00

回答ありがとうございます!無事やりたいことを実現できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問