假设您有2个工作表,在第一个工作表中您有很多不同的数据。在D列中,您有一个数字(粗体)。数字的第一部分是2或3个字母,然后是几个数字(数字位数可以变化),例如 HTG5342355 或 PO23455 ,而不是每个单元格D列有这样的数字,它可以在D3但是它可以在D6,D7,D20 ......(它总是在D列中)
如何将前2个或3个字母作为一个单元格复制到第二个工作表中,将数字作为另一个单元格紧挨着它。
编辑:
只是想为这个问题添加一些信息:
在D栏中,还有其他数据,所以它看起来像这样:
**HTG5342355**
another text
**PO23455**
**BT3452342**
something
something else
**NN23355**
只需要分割粗体数字,其他内容与其他工作表无关
答案 0 :(得分:1)
使用Sheet2!D1中的数据,将以下公式放在要返回零件的位置:
对于开头的字母:
=LEFT(Sheet2!D1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},Sheet2!D1&"0123456789"))-1)
对于最后的数字:
=MID(Sheet2!D1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},Sheet2!D1&"0123456789")),99)
答案 1 :(得分:0)
你可以编写一个 big-and -gly 复杂的公式,但是,虽然这可能有点过分,但我会使用正则表达式。 Read this question and its answers以供进一步参考。
VBA支持正则表达式,但您必须在项目中启用它们:
Tools
菜单中,点击References
Microsoft VBScript Regular Expressions 5.5
并启用复选标记。现在,创建一个新模块并编写一些代码。像这样:
function Split_Letters_And_Digits(input_str as String) as String()
dim re as RegExp
set re = new RegExp
dim ans(2) as String
with re
.global = True
.ignoreCase = True
.multiline = False
.pattern = "([A-Za-z]{2,3})([0-9]*)"
' This pattern will match 2 or 3 upper or lower case letters
' and any number of digits after that.
' Each group is enclosed in parentheses; this will allow you
' to get each group separatedly
End With
' Check if the input string matches the pattern
if re.test(input_str) then
ans(1) = re.replace(input_str, "$1")
ans(2) = re.replace(input_str, "$2")
' Those "$1" and "$2" are special tokens that enable you to get
' the first and second piece of the pattern; that's the reason
' for those parentheses in the pattern
else
' If the input doesn't match the pattern, exit the function
exit function
end if
Split_Letters_And_Digits = ans
end function
这是一个数组函数。要使用它,请选择两个单元格范围,然后编写=Split_Letters_And_Digits(D3)
并按 Ctrl + Shift + 输入。
您可以编写正则表达式来匹配更复杂的模式(您可能无法使用普通公式拆分的模式),因此值得学习如何使用它们。
希望这有助于你
答案 2 :(得分:0)
Dim cellvalue as string, textlength as integer, foundnumber as boolean, _
y as integer, x as integer
with thisworkbook.sheet1
do until .cells(y,4).value=vbnullstring
cellvalue=.cells(y,4).value
textlength=len(cellvalue)
if textlength > 1 then
foundnumber=false
for x= 2 to textlength
if foundnumber=false then
if isnumber(mid(cellvalue,x,1)) then
foundnumber=true
thisworkbook.sheet2.cells(y,4).value=left(cellvalue,x-1)
thisworkbook.sheet2.cells(y,5).value=mid(cellvalue,x)
end if
end if
next x
end if
y=y+1
loop
end with
我相信这会奏效,虽然我有点紧张但没有测试过。它可能需要更多测试来确保单元格中的数据是您要复制的类型,但希望它能帮助您入门。我可以稍后回来评论。
答案 3 :(得分:0)
使用公式(复制到适合):
=IF(ISNUMBER(VALUE(MID(Sheet1!$D1,3,1))),LEFT(Sheet1!$D1,2),LEFT(Sheet1!$D1,3))
。
=IF(ISNUMBER(VALUE(MID(Sheet1!$D1,3,1))),MID(Sheet1!$D1,3,LEN($D1)),MID(Sheet1!$D1,4,LEN(D$1)))