![如何从 Excel 中的字符串中提取引号中的数据](https://linux22.com/image/1602765/%E5%A6%82%E4%BD%95%E4%BB%8E%20Excel%20%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E6%8F%90%E5%8F%96%E5%BC%95%E5%8F%B7%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE.png)
我有一个 csv 文件形状的时间戳,其中每个字符串如下所示:
TT_TU_MN009,"5009","200001010000","-1.8","3","4"
TT_TU_MN009,"5009","200001010200","-1.7","10","1"
TT_TU_MN009,"5009","200001011400","1","10","1"
...
我的目标是从该字符串(不带双引号)中提取第二、第三和第四个位置到它自己的列中:
- 5009
- 200001010000
- -1.8
我成功地在第一栏中实现了这一点
=LEFT(A2;SEARCH(",";A2)-1)
但不知道如何对其他 2 个位置进行操作。不使用 VBA 可以实现吗?
先感谢您
A
答案1
我想建议两种不同的方法从单元格中的文本字符串中提取第 n 个文本。
方法 1:
单元格中的公式
J16
:=TRIM(MID(SUBSTITUTE("""" & $J$13& REPT(" ",6),"""",REPT(CHAR(32),255)),2*255,255))
注意:
2*255
确定文本的位置,在 中J13
是5009
第 2 个单词/文本。由于公式在它之前算作第三个,因此位置是第 4 位,因此将单元格中的公式替换
20000101000
为,并将中的公式替换为。,
J17
2*255
4*255
6*255
-1.8
J18
方法 2:
它包含 VBA 宏,是一个 UDF(用户定义函数)。
- 按任意键Alt+F11或者R点击年代按 TAB 键并从弹出菜单中点击查看代码获取 VB 编辑器。
- C奥皮&磷将此代码粘贴为模块。
Function FindWord(Source As String, Position As Integer)
Dim arr() As String
arr = VBA.Split(Source, ",")
xCount = UBound(arr)
If xCount < 1 Or (Position - 1) > xCount Or Position < 0 Then
FindWord = ""
Else
FindWord = arr(Position - 1)
End If
End Function
- 单元格中的公式
J3
:=SUBSTITUTE(J1,CHAR(34),"")
- 在单元格中输入此公式
J5
:=FindWord(J3,2)
注意:
- 在此公式中,
2
确定单元格中的第二个单词/文本,以便下一个单词/文本=FindWord(J3,3)
依此类推。
如果需要所有内容都在一个单元格中,则可以使用 CONCATENATION。