以下のコードcode1で①のnの値に干渉せずに②のi+3をループさせたいです。
一度code2のように記載したのですが、もちろんそれだと①のnも同時に+1されてしまいます。
別の変数を用意して、mとnを別でループさせたいのですが書き方がわからずうまく実装できませんでしたので、その書き方を教えていただきたいです。
よろしくお願いします。
コード全体の大まかな仕様と、ソースは最下部に参考として、載せておきます。(参考までに)
code1
Macro
1 With wsAcq 2 Dim n As Long 'ループで使用します。 3 Dim m As Long 'ループで使用します。 4 Dim ec1 As Long '各開発の一番下の担当者のセルを取得 5 6 For n = i + 3 To ec1 '① 7 8 wsSet.Cells(lngRowsNo, 2).Value = .Cells(i, 2).Value 9 10 11 For m = i + 3 To ec1 12 wsSet.Cells(lngRowsNo, 3).Value = .Cells(i + 3, 3).Value '② 13 Next m 14 15 16 lngRowsNo = lngRowsNo + 1 17 18 Next n 19
code2
Macro
1wsSet.Cells(lngRowsNo, 3).Value = .Cells(i + 3, 3).Value '② 2i = i + 1
コード全体
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 15 strFile = Dir(strPath & "*.xls") 16 lngRowsNo = 2 17 Do Until strFile = "" 18 '----- Excelブックを開く 19 Set wbAcq = Workbooks.Open(strPath & strFile) 20 21 '----- シートを検索 22 For lngSheetIndex = 1 To wbAcq.Worksheets.Count 23 '----- 「更新」シートを検索 24 If wbAcq.Worksheets(lngSheetIndex).Name = "更新" Then 25 '----- 「更新」シートを変数へ登録 26 Set wsAcq = wbAcq.Worksheets(lngSheetIndex) 27 '----- 「更新」シートの内容を現在のシートにコピー(自由に変更して下さい) 28 With wsAcq 29 Dim n As Long 'ループで使用します。 30 Dim m As Long 'ループで使用します。 31 Dim ec1 As Long '各開発の一番下の担当者のセルを取得 32 33 For i = 1 To .UsedRange.Rows.Count 34 35 If Left(.Cells(i, 2).Value, 2) = "開発" Then 36 37 ' ------ 開発〇から一番上の担当者のセル位置を相対的にCells(i + 3, 3)として取得し 38 'データの入っているところまでループさせる (その時、開発名を転記) 39 40 ec1 = .Cells(i + 3, 3).End(xlDown).Row 41 For n = i + 3 To ec1 42 43 wsSet.Cells(lngRowsNo, 2).Value = .Cells(i, 2).Value 44 45 For m = i + 3 To ec1 46 wsSet.Cells(lngRowsNo, 3).Value = .Cells(i + 3, 3).Value 47 Next m 48 49 50 lngRowsNo = lngRowsNo + 1 51 52 Next n 53 54 End If 55 Next i 56 End With 57 '----- 書きこむ位置移動 58 59 '----- 検索の終了 60 Exit For 61 End If 62 Next lngSheetIndex 63 64 '----- シート参照の解放 65 Set wsAcq = Nothing 66 '----- ブックを閉じる 67 wbAcq.Close Savechanges:=False 68 '----- 次のファイルへ 69 strFile = Dir() 70 Loop 71 72 '----- Excelへの参照の解放 73 Set xlsAcq = Nothing 74 75End Sub
■マクロの概要
以下の画像のようにブックからブックへ転記をしたいです。
その時、転記元のエクセルファイル(拡張子はxls)が格納されているフォルダを指定してそのフォルダ内のエクセルファイルすべてに対してに「更新」というシートがあるときだけ以下の画像のように転記を実行したいです。(現在は作成途中で担当者を転記先のように転記したいです。)
回答2件
あなたの回答
tips
プレビュー