у меня есть такие данные в файле Excel
Exportfile.xlsx
A B
1) Head 31-Dec-2017
2) a 23
3) b 45
4) c 46
Datasheet.xlsx
И в данных таблицы вроде этого
1) **A**
2) ***QUARTER Data***
3) 31 Mar 2017
4) 30 Jun 2017
5) 30 Sep 2017
6) 31 Dec 2017
7)
8)
9) **B**
10) ***QUARTER Data***
11) 31 Mar 2017
12) 30 Jun 2017
13) 30 Sep 2017
14) 31 Dec 2017
15)
16)
17) **C**
18) ***QUARTER Data***
19) 31 Mar 2017
20) 30 Jun 2017
21) 30 Sep 2017
22) 31 Dec 2017
теперь я хочу вставить значения из файла экспорта в таблицу и хочу такие данные
1) **A**
2) ***QUARTER Data***
3) 31 Mar 2017
4) 30 Jun 2017
5) 30 Sep 2017
6) 31 Dec 2017 23
7)
8)
9) **B**
10) ***QUARTER Data***
11) 31 Mar 2017
12) 30 Jun 2017
13) 30 Sep 2017
14) 31 Dec 2017 45
15)
16)
17) **C**
18) ***QUARTER Data***
19) 31 Mar 2017
20) 30 Jun 2017
21) 30 Sep 2017
22) 31 Dec 2017 46
теперь я делаю этот код
Sub copy_data(File_Name)
For i = 2 To 4
Windows("Exportfile.xlsx").Activate
Sheets("ESheet").Select
Cells(i, 2).Select
Selection.Copy
Windows(File_Name).Activate
Sheets("Dsheet").Select
On Error Resume Next
**j = '' here what i do**
Cells(j, 2).Select
On Error Resume Next
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next
End Sub
теперь в приведенном выше коде в строке J что мне делать, чтобы значения копировались из файла экспорта и вставлялись в таблицу в квартале 31 декабря 2017 года через цикл
любое решение?
Если шаблон статический, как описано, это просто математика. Объявите и инициализируйте переменную start
вне for
с 6 и добавьте формулу внутри цикла для j
j = start + ((i-2) *8)
и на самом деле это фиктивные данные, мое фактическое положение данных отличается, например, в диапазоне экспорта файлов от 1802 до 1840 .. и в данных таблицы данных, где я вставляю позицию, составляет 60,88,116,144, 172,200,228,256,284,312,340,368,396,452,480,508,536,564,592, 620,648,676,704,732, 760
Dim start as Integer
в первой строке, а затем start = 6
. Теперь не имеет значения, где начинаются ваши данные и как они структурированы. Под статикой я имел в виду, что это фиксировано, и поэтому вы можете применить формулу, как указано выше. Я рекомендую записать формулу на бумаге и рассчитать несколько значений, чтобы полностью ее понять. start
используется для первого значения, потому что I-2
равно 0, умноженному на 8, это 0. 8 - это расстояние между двумя строками, поэтому (i-2)*8
перескакивает с 6 8 строк на каждую итерацию. Просто замените переменные фактическими данными, которые есть в вашем файле.
да .. я сделаю это .. теперь у меня есть данные, начинающиеся с 1803 года и заканчивающиеся на 1840 в экспортном файле .. так что в таблице данных за последний квартал 31 декабря 2017 года позиция 60 .. так что согласно o forumla = 1803 + ((1803- 2) * 8) это равно 16211. Таким образом, это позиция 16211 позиция, где фактическая позиция равна 60 .. надеюсь, вы понимаете
а на самом деле разница в данных составляет 27 .. так что я ставлю 27 вместо 8?
Это близко. Первое значение start
относится к первой позиции в вашем листе данных, а не к экспорту, поэтому оно 60. (i-2)
становится (i-3)
, поскольку итерация начинается с 1803, вам нужно сделать 0 в первом цикле. Тогда 8, да, становится 27.
если это не статично? и я объявляю, как это Dim start = 6, это показывает ошибку Ошибка компиляции: Ожидаемый конец инструкции