Макрос для редактирования строк и записи их на другой лист - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в программировании, и мне трудно пытаться понять, как я могу выполнить свою задачу.

У меня есть шаблонный лист, который организован таким образом, что после его заполнения он будет преобразован в «.csv», а затем импортирован в программу, создающую базу данных.

И у меня есть еще один Лист с некоторыми данными, которые мне нужны, и с некоторыми, которые мне не нужны. Первый столбец, который я хочу прочитать, - это «Имена тегов», следующие этой модели:

Имена тегов /// LOW /// HIGH /// ELU

80-PIT-0001 /// 0 /// 1 /// C

32-XI-004B /// 1 /// 0 /// C

45-CIT-4001 /// 0 /// 1 /// D

Мне нужно получить все эти теги и:

а) убрать "-" из имен тегов б) написать имена тегов без "-" в шаблоне листа в) при записи его на лист шаблона необходимо добавить «_PV» и «_PB» в конце имени тега. Каждый из них должен быть в другой строке. d) Все атрибуты должны быть скопированы, а также

Так же, как это:

80PIT0001_PV /// 0 /// 1 /// C

80PIT0001_PB /// 0 /// 1 /// C

32XI004B_PV /// 1 /// 0 /// C

32XI004B_PB /// 1 /// 0 /// C

45CIT4001_PV /// 0 /// 1 /// D

45CIT4001_PB /// 0 /// 1 /// D

Если бы кто-нибудь мог дать мне представление о том, как правильно манипулировать и редактировать эти строки и как записать их на новый лист, в моем случае, на лист шаблона.

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Не проверено, написано на мобильном телефоне, но может быть что-то вроде этого. Я предполагаю, что ваши данные (исключая заголовки / имена столбцов) начинаются в ячейке A2 на листе с именем «Источник», а данные в столбце А являются смежными.

Сохраните копию рабочей книги перед запуском кода, поскольку код попытается перезаписать данные на листе «Шаблон» (при условии, что он существует).

Option Explicit

Sub FillTemplateSheet()

With Thisworkbook

' Change this to whatever sheet your data is on and change cell reference to the first tag name (excluding header) '
With .worksheets("Source").range("A2")

Dim lastRow as long
lastRow = .end(xldown).row ' This is not the best way to find the last row, but might work in your use case '

Dim arrayOfValues() as variant
arrayOfValues = .resize(lastRow - .row+1, 4).value2 ' Assumes we want the first four columns '

End with

Dim rowIndex as long
Dim columnIndex as long
Dim alteredTagName as string

' Appending PV and PB to each tag name means we basically need twice as many body rows in the output.'

Dim outputArray() as variant
Redim outputArray(lbound(arrayOfValues,1) to (ubound(arrayOfValues,1)*2), lbound(arrayOfValues,2) to ubound(arrayOfValues,2))

For rowIndex = lbound(arrayOfValues,1) to ubound(arrayOfValues,1)

For columnIndex = lbound(arrayOfValues,2) to ubound(arrayOfValues,2)

If columnIndex <> 1 then
' d) copy all other attributes to outputArray'

outputArray(rowIndex, columnIndex) = arrayOfValues(rowIndex,columnIndex)

outputArray(rowIndex+1, columnIndex) = arrayOfValues(rowIndex,columnIndex)

Else

alteredTagName = arrayOfValues(rowIndex,columnIndex) 

'a) get rid of all - '
alteredTagName = vba.strings.join(VBA.strings.split(alteredTagName,"-",-1,vbbinarycompare),vbnullstring)

'b) write to output array '
'c) append PV and PB '

outputArray(rowIndex, columnIndex) = alteredTagname & "_PV"

outputArray (rowIndex +1, columnIndex) = alteredTagName & "_PB"

End if

Next columnIndex

Next rowIndex

End with

' Assumes headers are on row 1 of sheet Template, and therefore first tag name will be in cell A2'
.worksheets("Template").range("A2").resize(ubound(outputArray,1),ubound(outputArray,2)).value2 = outputArray

End with

End sub
0 голосов
/ 03 июля 2018

ну, для этого вам не нужно программирование. Это достижимо с помощью формул в Excel и Google Sheets. Заменить формула удалит '-' и объединенную формулу в сочетании с IF и ROW добавит '_PV'. Arrayformula поверх этих других формул будет выполнять этот расчет во всем столбце без необходимости каждый раз перетаскивать формулу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...