У меня есть 2 листа в одной книге. Мне нужно сопоставить по 2 столбца в каждом листе и перенести данные из Листа2 в Лист1.
Лист1 (1–3 тыс. Строк)
- id1, name1
- id2, name2
- id3, name3
Лист 2 (строки от 1 до 10 тысяч)
- id1, name1, month1data1, month2data1, month3data1
- id2, name2, month1data2, month2data2, month3data2
- id3, name3, month1data3, month2data3, month3data3
Я уже написал код для этого, и он работает, но занимает очень много времени. Я сделал вложенный цикл для просмотра каждой строки и каждого столбца в Sheet1, а затем прошел цикл по Sheet2 (с 1k-5k строк) каждый раз. Я думаю, это то, к чему все это нужно. Может ли кто-нибудь помочь сделать это более эффективным?
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
th,
thead,
tfoot {
font-family: arial, sans-serif;
border: 1px solid #000000;
text-align: left;
padding: 8px;
}
td,
tr {
border: 1px solid #000000;
text-align: left;
padding: 8px;
}
<h1>Sheet 1 with 1k-3k rows</h1>
<table>
<tr>
<th>A-id</th>
<th>B-name</th>
<th>C-month1</th>
<th>D-month2</th>
<th>E-month3</th>
</tr>
<tr>
<td>id1</td>
<td>name1</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
</tr>
<tr>
<td>id2</td>
<td>name2</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
</tr>
<tr>
<td>id3</td>
<td>name3</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
<td>insert from sheet2</td>
</tr>
</table>
<h1>Sheet 2 with 1k-10k rows</h1>
<table>
<tr>
<th>A-id</th>
<th>B-name</th>
<th>C-month1</th>
<th>D-month2</th>
<th>E-month3</th>
</tr>
<tr>
<td>id1</td>
<td>name1</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
</tr>
<tr>
<td>id2</td>
<td>name2</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
</tr>
<tr>
<td>id3</td>
<td>name3</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
<td>insert to sheet1</td>
</tr>
</table>
For r = sheet1FirstRow To sheet1LastRow
DoEvents
m = sheet1StartRow
For c = sheet1FirstCol To sheet1LastCol
DoEvents
For i = sheet2FirstRow To sheet2LastRow
DoEvents
sheet1Id= Ws("Sheet1").Cells(r, sheet1Id_Col).Value
sheet1Name = Ws("Sheet1").Cells(r, sheet1Name _Col).Value
sheet2Id = Ws("Sheet2").Cells(i, sheet2Id_Col).Value
sheet2Name = Ws("Sheet2").Cells(i, sheet2Name _Col).Value
sheet2Data = Ws("Sheet2").Cells(i, m).Value
If sheet1Id = sheet2Id And sheet1Name = sheet2Name Then
Ws("Sheet1").Cells(r, c) = sheet2Data
i = sheet2LastRow
m = m + 1
End If
Next i
Next c
Application.StatusBar = "Updating " & (r) & " of " & sheet1LastRow
Next r
Вывод правильный, но при запуске 1k строк для sheet1 это заняло ~ 30 минут. Я бы хотел, чтобы это работало НАМНОГО быстрее ... надеюсь, через 5 минут. Это возможно?