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

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

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

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

0回答

1358閲覧

VBA マクロで転記をする際に、特定の行を追加したい

icecleam

総合スコア46

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/09/24 14:51

編集2020/09/24 14:51

以下の現状のソースを実行すると、[現状の実行結果]のようになります。
(ファイルごとの月数は同じです)

[現状の実行結果]だとD列以降の月数が以下の点で不正で、[得たい実行結果]のように転記を実行したいのですが、調べてもなかなかうまくいかないので、どのようにソースを修正すれば良いか教えていただきたいです。

・2行目の月数が最後(今回だと2つ目)のファイルの月数で上書きされてしまう。
・次のファイルに切り替わる時に開発A1の上に月数の行が表示されない。([得たい実行結果]の21行目のように表示したい)

よろしくお願いします。

[現状のソース]

Macro

1Sub sample1() 2 3 Dim lngRowsNo As Long ' 書きこむ位置 4 Dim lngSheetIndex As Long ' シートの番号 5 Dim strFile As String ' Excelファイルの場所 6 Dim xlsAcq As New Excel.Application ' 取得側Excel 7 Dim wbAcq As Workbook ' 取得側Excelブック 8 Dim wsAcq As Worksheet ' 取得側Excelシート 9 Dim wsSet As Worksheet ' 設定側Excelシート 10 Const strPath As String = "パスを指定" 11 Set wsSet = ActiveSheet 12 Dim i As Long 13 14 strFile = Dir(strPath & "*.xls") 15 lngRowsNo = 3 16 Do Until strFile = "" 17 '----- Excelブックを開く 18 Set wbAcq = Workbooks.Open(strPath & strFile) 19 20 '----- シートを検索 21 For lngSheetIndex = 1 To wbAcq.Worksheets.Count 22 '----- 「更新」シートを検索 23 If wbAcq.Worksheets(lngSheetIndex).Name = "更新" Then 24 '----- 「更新」シートを変数へ登録 25 26 Set wsAcq = wbAcq.Worksheets(lngSheetIndex) 27 '----- 「更新」シートの内容を現在のシートにコピー(自由に変更して下さい) 28 With wsAcq 29 Dim fname As String 'ファイル名 30 Dim n As Long 'ループで使用します。 31 Dim m As Long 'ループで使用します。 32 Dim ec1 As Long '各開発の一番下の担当者のセルを取得 33 Dim ec2 As Long '各開発の 月の一番右(最後)のセルを取得 34 Dim ColumnNo As Long ' 転記先の列番号(初期値4) 35 Dim ColumnNo2 As Long ' 転記元の列番号(初期値5)+3されていく 36 37 ColumnNo = 4 38 ColumnNo2 = 5 39 40 For i = 1 To .UsedRange.Rows.Count 41 42 If (Left(.Cells(i, 2).Value, 2) = "A1" Or Left(.Cells(i, 2).Value, 2) = "B1" Or Left(.Cells(i, 2).Value, 2) = "C1") And .Cells(i, 2).MergeCells = False Then 43 44 45 46 47 ' ------ 開発〇から一番上の担当者のセル位置を相対的にCells(i + 3, 3)として取得し 48 'データの入っているところまでループさせる (その時、開発名を転記) 49 ec1 = .Cells(i + 3, 2).End(xlDown).Row 50 For n = i + 3 To ec1 51 52 '担当者が空白の時スキップする 53 If Cells(n, 3) = "" Then 54 GoTo NEXT99 55 End If 56 57 'ファイル名 58 fname = ActiveWorkbook.Name 59 wsSet.Cells(lngRowsNo, 1).Value = fname 60 61 '開発 62 wsSet.Cells(lngRowsNo, 2).Value = .Cells(i, 2).Value 63 64 '担当者 65 wsSet.Cells(lngRowsNo, 3).Value = .Cells(n, 3).Value 66 67 '工数 68 wsSet.Cells(lngRowsNo, 4).Value = .Cells(n, 5).Value 69 70 wsSet.Cells(lngRowsNo, 5).Value = .Cells(n, 8).Value 71 72 wsSet.Cells(lngRowsNo, 6).Value = .Cells(n, 11).Value 73 74 wsSet.Cells(lngRowsNo, 7).Value = .Cells(n, 14).Value 75 76 wsSet.Cells(lngRowsNo, 8).Value = .Cells(n, 17).Value 77 78 wsSet.Cells(lngRowsNo, 9).Value = .Cells(n, 20).Value 79 80 wsSet.Cells(lngRowsNo, 10).Value = .Cells(n, 23).Value 81 82 wsSet.Cells(lngRowsNo, 11).Value = .Cells(n, 26).Value 83 84 wsSet.Cells(lngRowsNo, 12).Value = .Cells(n, 29).Value 85 86 wsSet.Cells(lngRowsNo, 13).Value = .Cells(n, 32).Value 87 88 '1行下へ 89 lngRowsNo = lngRowsNo + 1 90 91NEXT99: 92 Next n 93 '月を取得して転記 94 ec2 = .Cells(i + 1, 5).End(xlToRight).Column + 1 95 For col = 5 To ec2 96 97 wsSet.Cells(2, ColumnNo).Value = .Cells(i + 1, ColumnNo2).Value 98 99 ColumnNo = ColumnNo + 1 100 ColumnNo2 = ColumnNo2 + 3 101 102 Next col 103 104 End If 105 Next i 106 End With 107 108 '----- 検索の終了 109 Exit For 110 End If 111 Next lngSheetIndex 112 113 '----- シート参照の解放 114 Set wsAcq = Nothing 115 '----- ブックを閉じる 116 wbAcq.Close Savechanges:=False 117 118 '----- 次のファイルへ 119 strFile = Dir() 120 121 122 Loop 123 124 '----- Excelへの参照の解放 125 Set xlsAcq = Nothing 126 127 Dim maxrow As Long '最終行 128 maxrow = wsSet.Cells(Rows.Count, 3).End(xlUp).Row 'C列で最終行を求める 129 For i = 3 To maxrow 130 131 If wsSet.Cells(i, "C").Value = "担当者" Then 132 wsSet.Cells(i, "A").Value = "" 133 wsSet.Cells(i, "B").Value = "" 134 End If 135 Next 136 137End Sub

質問2.xls
イメージ説明

質問3.xls
イメージ説明

[現状の実行結果]
イメージ説明

[得たい実行結果]
イメージ説明

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

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

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

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

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

kuma_kuma_

2020/09/24 23:27

Excelには「マクロの記録」という機能があります。 「マクロの記録」を使って一度手作業で自分のしたい作業を行い どういうときどんな機能を使えば良いか確認されたほうが良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問