宏以编辑字符串并将其写在另一张纸上

时间:2018-07-03 18:40:10

标签: excel database string vba edit

我是程序设计的新手,我很难弄清楚如何完成任务。

我有一个模板表,其组织方式如下:填充后,它将被转换为“ .csv”,然后导入到程序中以建立数据库。

我还有另一个工作表,其中包含一些我需要的数据和一些我不需要的数据。 我要阅读的第一列是遵循此模型的“标记名称”:

标记名称///低///高/// ELU

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

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

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

我需要获取所有这些标签,并且:

a)从标签名称中删除“-” b)在模板表中写上没有“-”的标签名称 c)将其写入模板表时,必须在标签名称的末尾添加“ _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 :(得分:0)

好吧,您完全不需要编程即可实现此目的。使用Excel和Google表格中的公式都可以实现这一点。 替换公式将删除“-”并与 IF 结合使用公式,而 ROW 将添加“ _PV”。在其他公式上方的 Arrayformula 会在整个列中进行此计算,而不必每次都向下拖动公式。

答案 1 :(得分:0)

未经测试,写在手机上,但也许是这样。我假设您的数据(不包括列标题/名称)始于名为“源”的工作表的单元格A2中,并且数据是连续的列A。

在运行代码之前保存工作簿的副本,因为代码将尝试覆盖工作表“模板”上的数据(假设存在)。

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