エクセルのシート間の値の加算処理、スキップ処理を含めた転記処理についてです。
以下、画像のようにMacのエクセルで転記を実装したいです。
大学の課題で、以下を出されています。
転記の際の加算の方法、同列に同じ文字列が含まれるさいには処理を実行しないことなど、インターネットで調査をしたのですが、なかなかうまく書けませんでした。。
何卒、よろしくお願いします。
実現したいこと
このような手順で処理を行っていこうと考えています。
結果的に[転記先]のように転記したい。
担当者名を上から順番に「転記元」から転記していく、そのとき「担当者」というセルがある場合、担当者名が同列で重複する場合の2通りで処理をスキップします。
転記元シートで各担当者の右に入力されている数値をそのまま年月日に対応して転記していく。
K3のように、同じ担当者で「年月日」が重なっているときは重なった数値同士を加算する。
[質問1シート]1行目 セルに値がない
→無処理
[質問1シート]2行目 C列の値が「担当者」
→スキップ
[質問1シート]3行目 C列の値が「担当者名」
→[質問2シート]のC3に転記
[質問1シート] 21行目 C列の「担当者名」が3行目と重複
→担当者名は重複しているので無処理、「年月日」と数値部分は担当者Aに追記、この時数値が重なった場合は加算する
以降繰り返し
困っている事
下記のソースコード記載の①、②部分が特にわからずに困っています。
①同列に同じ担当者が含まれる際の条件の設定方法
②数値を転記していく際に重複している値同士をを加算する
他の部分でも、修正するべき箇所等ございましたら、修正してくださって構いませんので、サンプル等をいただけないでしょうか。
長くなってしまいましたが、何卒よろしくお願いいたします。
現在まで完成しているコード
VBA
1Sub SheetTenki2() 2Dim ec As Long '年月の一番左から一番右までを取得 3Dim lngFromRowsNo As Long ' 検索する行位置 4Dim lngToRowsNo As Long ' 書きこむ行位置 5Dim lngFromColumnNo As Long ' 検索する列位置 6Dim lngToColumnNo As Long ' 書きこむ列位置 7Dim wsFrom As Worksheet ' 取得側Excelシート 8Dim wsTo As Worksheet ' 設定側Excelシート 9Dim ec1 As Long ' 担当者列の一番下の担当者のセルを取得 10Dim ec2 As Long ' 各担当者の一番右の数値のセルを取得 11 12'シート"質問1"を選択 13 Sheets("質問1").Select 14 15 lngFromRowsNo = 2 16 17 ec1 = wsFrom.Cells(lngFromRowsNo, 3).End(xlDown).Row 18 For lngFromRowsNo = 2 To .ec1 19 20 ' 「担当者」以外の文字列が含まれるセルの値をC3から下に転記していく 21 ' 転記していくとき、同じ担当者が含まれるときはスキップする(同じ担当者が記載されないようにする) ① 22 If Not (Left(wsFrom.Cells(lngFromRowsNo, 3).Value, 3) = "担当者" Or '転記する列に同じ担当者が含まれるときという処理 ) Then 23 24 GoTo NEXT99 25 26 End If 27 28 '担当者列に担当者を転記 29 wsTo.Cells(ToRowNo, 3).Value = wsFrom.Cells(lngFromRowsNo, 3).Value 30 31 '各担当者の右の数値を順に転記していく, −1としているのは一番右は「見込み合計」が入るから 32 ec2 = wsTo.Cells(ToRowNo, 4).End(xlToRight).Column - 1 33 lngToColumnNo = 4 34 35 36 ' 転記元のD列から数値が存在するセルまで検索 37 For lngFromColumnNo = 4 To .ec2 38 39 ' 取得した数値を転記していく 40 '数値を 転記していくときにセルが重複したら、その重複した数値同士を加算する② 41 wsTo.Cells(ToRowNo, lngToColumnNo).Value = wsFrom.Cells(lngFromRowsNo, lngFromColumnNo).Value 42 43 Next lngFromColumnNo 44 45 ' 1行下へ(転記先) 46ToRowNo = ToRowNo + 1 47 48NEXT99: 49 50 Next lngFromRowsNo 51 52End Sub
回答3件
あなたの回答
tips
プレビュー