2015-01-12 5 views
0

У меня есть строки в SQL так же, как в следующем (строки 1 и 2):Добавление новых строк при выборе столбца # в зависимости от контура #

enter image description here

Важно, что я хочу, чтобы добавить каждую строку 12 раз снова в эту же таблицу. В столбцах с 1 по 12 содержится ежемесячная информация о бюджете для каждой категории (каждая строка). Мне понадобится это в формате 12 строк, где бюджет находится в поле DT_VALUE_Nbr, так как для чтения программного обеспечения ему нужен один бюджетный номер/строка.

Это не проблема, что 12 строк добавлены в ту же таблицу на данный момент, я изменю это в будущем, я просто не знаю, как писать циклы в vba, в которых вы меняете набор записей и вставляете измененный набор записей в db.

Я был рекомендован сделать это как модуль доступа VBA, потому что многие вычисления уже происходят с модулями.

Мой запрос для таблицы:

SQL = " SELECT AS_VAR_ORG_Version_SK, ORG_Sk, VAR_Sk, DT_VALUE_Nbr, [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12] " & _ 
     " FROM dbo.AAAAAA_TEMP " 
+1

Ваш вопрос остается неясным. ARe вы пытаетесь написать 'line 1' 12 раз, когда каждый' DT_VALUE_Nbr' будет другим месяцем? Итак, строка должна быть '15156', строка вторая должна быть' 51563153'? – Chrismas007

ответ

1

Учитывая эти данные в Excel на "Sheet1":

enter image description here

Вы можете запустить этот код:

Sub testit() 

Dim LastRow As Long, CurRow As Long, NewRow As Long, DestLast As Long 
Dim DataSht As Worksheet, DestSht As Worksheet 

Set DataSht = Sheets("Sheet1") 
Set DestSht = Sheets("Sheet2") 
LastRow = DataSht.Range("A" & Rows.Count).End(xlUp).Row 

DestSht.Cells.Clear 

DataSht.Rows(1).Copy 
DestSht.Range("A1").PasteSpecial 
DestSht.Range("F1").Value = "Month" 
DestSht.Range("G1:Q1").Delete 

For CurRow = 2 To LastRow 
    For NewRow = 1 To 12 
     DestLast = DestSht.Range("E" & Rows.Count).End(xlUp).Row + 1 
     DataSht.Range("A" & CurRow & ":Q" & CurRow).Copy 
     DestSht.Range("A" & DestLast).PasteSpecial 
     DestSht.Range("E" & DestLast).Value = DestSht.Cells(DestLast, NewRow + 5).Value 
     DestSht.Range("F" & DestLast).Value = NewRow 
     DestSht.Range("G" & DestLast & ":Q" & DestLast).Delete 
    Next NewRow 
Next CurRow 

End Sub 

И получить этот вывод на "Sheet2":

enter image description here

+0

По какой-то причине код 1: 1 не работал для меня (посмотрите на первый столбец вывода), это было идеально. Я теперь использую 'Для CurRow = 2 Для LastRow год = 201401 Для NewRow = от 1 до 12 DestLast = DestSht.Range ("D") и Rows.Count .END (xlUp) .Row + 1 DataSht. Range («A» & CurRow & «: Q» & CurRow) .Copy DestSht.Range («A» & DestLast) .PasteSpecial DestSht.Range («D» и «DestLast») .Value = DestSht.Cells (DestLast, NewRow + 5) .Value DestSht.Range ("E" & DestLast) .Value = Год Год = Год + 1 DestSht.Range ("F" & DestLast & ": Q" & DestLast). Удалить Next NewRow Следующий CurRow' –

+0

@ ben.w, если этот код доставил вас туда, где вам нужно было (с небольшим редактированием), предложите отредактировать мое сообщение а затем пометить его как принятое. – Chrismas007

Смежные вопросы