Excel formula 如何从单元格中间提取信息?

Excel formula 如何从单元格中间提取信息?,excel-formula,excel-2010,Excel Formula,Excel 2010,我有几千行数据,我正试图从中提取某些信息并将其放入自己的单元格中 我有一列数据,如下所示: 1@48x50x38 2@50x29x48 1@68x29x58 1@50x21x68 第一个数字是我可以用一个左公式轻松得出的量。我还需要把其他几组数字放在它们自己的单元格中,但我不知道如何从字符串的中间拉出这些数字 我希望它看起来像这样 A B C D 1 48 50 38 2 50 29

我有几千行数据,我正试图从中提取某些信息并将其放入自己的单元格中

我有一列数据,如下所示:

1@48x50x38
2@50x29x48
1@68x29x58
1@50x21x68

第一个数字是我可以用一个左公式轻松得出的量。我还需要把其他几组数字放在它们自己的单元格中,但我不知道如何从字符串的中间拉出这些数字

我希望它看起来像这样

A B C D
1             48          50            38
2             50          29            48
1             68          29            58
1502168


非常感谢您的帮助。

可以使用
MID
函数使用起始值和长度值提取字符串的任意部分。 但是,我怀疑您的问题是如何定位“开始”和“长度”值

FIND
功能将提供此功能,因此您可以将其用作MID的参数

因此,要获取您将使用的@符号后的第一个数字(假设单元格为C8):

其他中间编号可提取如下:

=MID(C8,FIND("x", C8)+1,FIND("x",C8,FIND("x",C8)+1)-FIND("x", C8)-1)
第一个和最后一个数字可以使用您提到的
功能

最终编号:

=RIGHT(C8,LEN(C8)-FIND("x",C8,FIND("x",C8)+1))

选择要分析的单元格并运行此小宏:

Sub convertt()
    For Each r In Selection
        V = r.Value
        If V <> "" Then
            ary = Split(V, "@")
            bry = Split(ary(1), "x")
            r.Value = ary(0)
            r.Offset(0, 1) = bry(0)
            r.Offset(0, 2) = bry(1)
            r.Offset(0, 3) = bry(2)
        End If
    Next r
End Sub
Sub-convertt()
对于选择中的每个r
V=r.值
如果V“那么
ary=分割(V,“@”)
bry=拆分(第(1)项,“x”)
r、 值=ary(0)
r、 偏移量(0,1)=bry(0)
r、 偏移量(0,2)=bry(1)
r、 偏移量(0,3)=bry(2)
如果结束
下一个r
端接头
编辑#1:

此版本不区分大小写:

Sub convertt()
    For Each r In Selection
        V = r.Value
        If V <> "" Then
            ary = Split(V, "@")
            bry = Split(LCase(ary(1)), "x")
            r.Value = ary(0)
            r.Offset(0, 1) = bry(0)
            r.Offset(0, 2) = bry(1)
            r.Offset(0, 3) = bry(2)
        End If
    Next r
End Sub
Sub-convertt()
对于选择中的每个r
V=r.值
如果V“那么
ary=分割(V,“@”)
bry=拆分(LCase(ary(1)),“x”)
r、 值=ary(0)
r、 偏移量(0,1)=bry(0)
r、 偏移量(0,2)=bry(1)
r、 偏移量(0,3)=bry(2)
如果结束
下一个r
端接头

很可能是我搞错了什么,但是当我运行这个宏时,我得到一个运行时错误“9”,表示“下标超出范围”。当我选择调试选项时,它会突出显示宏的“r.Offset(0,2)=bry(1)”部分。如果所选单元格之一没有一对小写x'sBingo!我不知道宏是区分大小写的。有些情况下x是大写的。宏的工作很漂亮,直到它偶然碰到其中一个,然后崩溃。你,先生,是我的英雄。也许有一天我会花点时间把它分解,弄清楚你到底做了什么。你为我节省了很多时间。祝你有美好的一天!谢谢你的反馈!谢谢你的意见,先生。我也感谢您抽出时间提供解决方案。非常感谢你。
Sub convertt()
    For Each r In Selection
        V = r.Value
        If V <> "" Then
            ary = Split(V, "@")
            bry = Split(LCase(ary(1)), "x")
            r.Value = ary(0)
            r.Offset(0, 1) = bry(0)
            r.Offset(0, 2) = bry(1)
            r.Offset(0, 3) = bry(2)
        End If
    Next r
End Sub