我的工作场所正在改变CMS系统,我们有大约5,000种产品需要导入。问题来自图像URL格式化,因为这两个系统的布局截然不同。我需要一个函数或VB代码来转换一个单元格:
主| 1 | Vaterra / VTR03014C-1.JPG; VTR03014C | 2 | Vaterra / VTR03014C-2.JPG; VTR03014C | 3 | Vaterra / VTR03014C-3.JPG; VTR03014C | 4 | Vaterra / VTR03014C-4.JPG ; VTR03014C | 5 | Vaterra / VTR03014C-5.JPG; VTR03014C | 6 | Vaterra / VTR03014C-6.JPG; VTR03014C | 7 | Vaterra / VTR03014C-7.JPG; VTR03014C | 8 | Vaterra / VTR03014C-8.JPG; VTR03014C | 9 | Vaterra / VTR03014C-9.jpg; VTR03014C | 10 | Vaterra / VTR03014C-10.JPG; VTR03014C | 11 | Vaterra / VTR03014C-11.JPG; VTR03014C | 12 | Vaterra / VTR03014C-12.JPG; VTR03014C | 13 | Vaterra / VTR03014C-13.jpg; VTR03014C | 14 | Vaterra / VTR03014C-14.JPG
分为两个单元格:
Vaterra / VTR03014C-1.JPG
这就是它变得棘手的地方:
Vaterra / VTR03014C-2.JPG; Vaterra / VTR03014C-3.JPG; Vaterra / VTR03014C-4.JPG; Vaterra / VTR03014C-5.JPG; Vaterra / VTR03014C-6.JPG; Vaterra / VTR03014C-7.JPG ; Vaterra / VTR03014C-8.JPG; Vaterra / VTR03014C-9.jpg; Vaterra / VTR03014C-10.JPG; | Vaterra / VTR03014C-11.JPG; Vaterra / VTR03014C-12.JPG; Vaterra / VTR03014C-13.jpg; Vaterra / VTR03014C-14.JPG
注意" Main|1|
"已被删除,棘手的部分是,并非所有这些都以#34; Main|1|
"开始或包含#34; $('li.nav-about').click(function () {
$('#arrow-about').toggleClass("rotate");
$('#arrow-indusrty').removeClass("rotate");
$('#arrow-application').removeClass("rotate");
$(this).find('ul').toggle();
});
$(' li.nav-industry').click(function () {
$('#arrow-about').removeClass("rotate");
$('#arrow-indusrty').toggleClass("rotate");
$('#arrow-application').removeClass("rotate");
$(this).find('ul').toggle();
});
$('li.nav-application').click(function () {
$('#arrow-about').removeClass("rotate");
$('#arrow-indusrty').removeClass("rotate");
$('#arrow-application').toggleClass("rotate");
$(this).find('ul').toggle();
});
"并非所有选项都以" Vaterra"。
主要步骤是删除每个图像的后缀,然后捕获文本行,直到" .jpg"并将其移至一个单独的单元格。
答案 0 :(得分:0)
通过一些微调,你可以在没有VBA的情况下实现它。
首先,将 | 和 / 替换为; ,以便您可以拥有一致的分隔符。
此外,您可以删除Main | 1 |用空格替换它。
现在,选择Data =>文本到列 选择Delimeted选项 您现在可以使用分隔符分号,并且您将在单独的单元格中使用每个单元格中的as进行数据。
您现在可以删除不需要的条目。
答案 1 :(得分:0)
作为替代方案,这是一个公式解决方案。假设大单个文本块在单元格A1中,将此公式放在单元格B1中并向下复制,直到它开始给出错误:
=TRIM(MID(SUBSTITUTE("|"&$A$1,";",REPT(" ",LEN($A$1))),LEN($A$1)*(ROW(A1)-1)+1+LOOKUP(2,1/(MID(SUBSTITUTE("|"&$A$1,";",REPT(" ",LEN($A$1))),LEN($A$1)*(ROW(A1)-1)+ROW(INDIRECT("1:"&LEN($A$1))),1)="|"),ROW(INDIRECT("1:"&LEN($A$1)))),LEN($A$1)))
错误意味着没有更多条目要返回,因此您可以删除有错误的单元格,然后选择具有公式的所有单元格 - >复制 - >右键单击 - >选择性粘贴 - >将它们转换为文本而不是公式的值。 (我强烈建议这样做,因为间接功能是不稳定的,如果你有很多配方单元,它可能会大大减慢你的工作簿。)
答案 2 :(得分:0)
由于您拥有VBA标签,因此这是一种最快的VBA方法 假设您的数据位于第1页上第1行的第A列中 该宏将分别在B列和C列中写下以下两行。
Column B
Vaterra / VTR03014C-1.JPG
Column C
Vaterra / VTR03014C-2.JPG; Vaterra / VTR03014C-3.JPG; Vaterra / VTR03014C-4.JPG; Vaterra / VTR03014C-5.JPG; Vaterra / VTR03014C-6.JPG; Vaterra / VTR03014C-7.JPG ; Vaterra / VTR03014C-8.JPG; Vaterra / VTR03014C-9.jpg; Vaterra / VTR03014C-10.JPG; | Vaterra / VTR03014C-11.JPG; Vaterra / VTR03014C-12.JPG; Vaterra / VTR03014C-13.jpg; Vaterra / VTR03014C-14.jpg
这是宏。
Public RegMatchArray
Sub test()
Dim sh As Worksheet
Dim rowCount As Long
Dim i, j As Integer
Dim strValue, strValue1, strValue2 As String
Set sh = Sheets("Sheet1")
rowCount = sh.Range("A1048576").End(xlUp).Row
For i = 1 To rowCount
strValue = sh.Cells(i, 1).Value
If InStr(1, strValue, "Main|1|") > 0 Then
strValue = Replace(strValue, "Main|1|", "")
End If
iPos = InStr(1, strValue, ";")
strValue1 = Left(strValue, iPos - 1)
strValue2 = Mid(strValue, iPos + 1, Len(strValue) - iPos - 1)
Call splitUpRegexPattern(strValue2, "([\w\s-]+?)\/([\w\s-]+?\.jpg)")
For j = LBound(RegMatchArray) To UBound(RegMatchArray)
If j < 1 Then
strValue2 = RegMatchArray(j)
Else
strValue2 = strValue2 & ";" & RegMatchArray(j)
End If
Next
sh.Cells(i, 2).Value = strValue1
sh.Cells(i, 3).Value = strValue2
Next
Set sh = Nothing
End Sub
Public Function splitUpRegexPattern(targetString, strPattern)
Dim regEx As New RegExp
Dim strReplace As String
Dim arrArray()
i = 0
'CREATE THE REGULAR EXPRESSION
regEx.Pattern = strPattern
regEx.IgnoreCase = True
regEx.Global = True
'PERFORM THE SEARCH
Set Matches = regEx.Execute(targetString)
'REPORTING THE MATCHES COLLECTION
If Matches.Count = 0 Then
RegMatchArray = ""
Else
'ITERATE THROUGH THE MATCHES COLLECTION
For Each Match In Matches
'ADD TO ARRAY
ReDim Preserve arrArray(i)
arrArray(i) = Match.Value
i = i + 1
Next
RegMatchArray = arrArray
RegExpMultiSearch = 0
End If
If IsObject(regEx) Then
Set regEx = Nothing
End If
If IsObject(Matches) Then
Set Matches = Nothing
End If
End Function
注意:您必须添加&#34; Microsoft VBSript正则表达式5.5&#34;通过进入 Tools -> References
进行参考。
如果您不想保留原始列A,请更改以下行。这将删除原始数据,并在A和B列中显示结果。
来自:
sh.Cells(i, 2).Value = strValue1
sh.Cells(i, 3).Value = strValue2
致:
sh.Cells(i, 1).Value = strValue1
sh.Cells(i, 2).Value = strValue2