【发布时间】:2019-07-23 13:18:21
【问题描述】:
我刚开始在工作中使用 VBA,几乎没有任何经验,因此非常感谢任何帮助/建议!
我正在编写一份自动报告,我需要使用设备编号来查找属于它的数据。示例 90902018436270200 是完整的数字,所需的数字是 18436。
在我复制并将它们从默认值更改为数字之前,数字显示为 9.0902E+16。
数字前的金额始终保持不变,但所需的数字很少只有 4 位数。
我尝试使用以下方法删除第一个数字:
If Left(Range("A5"), 1) = "9" Then
Range("A5").Value = WorksheetFunction.Replace(Range("A5").Value, 1, 4, "")
但是,当使用该数字时,我认为实际上是因为指数符号我可能不得不以某种方式删除。
在屏幕截图中,您可以看到较大的数字是我使用公式编辑的。
左侧的数字表示要使用的设备的名称 =vlookup 我需要过滤掉不必要的数字,否则它无法识别从哪一行获取数据。在另一张纸上,我有一个单元格,用户可以输入设备编号,然后它应该找到与该设备编号匹配的数据。但是,公式 =Vlookup 无法识别原始/大数字中所需的数字。
这是我目前用来排列数据以使用 excel 公式的代码。
Sub CorrectNames()
'replaces complicated names to easier ones
Range("B3").Select
ActiveCell.FormulaR1C1 = "10"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "20"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "50"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "100"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "1000"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "200"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "2000"
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.FormulaR1C1 = "500"
ActiveCell.Offset(0, 1).Range("A1").Select
'moves device digits to the left side and changes format
Range(Selection, Selection.End(xlDown)).Select
Selection.Cut
ActiveCell.Offset(0, -9).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "0."
End Sub
Sub ExposeDevicedigits()
If Left(Range("A5"), 1) = "9" Then
Range("A5").Value = WorksheetFunction.Replace(Range("A5").Value, 1, 4, "")
End If
End Sub
【问题讨论】:
-
请提供最小可行示例
-
不要将序列号或其他标识号视为数字。将它们视为字符串,并将它们显示在格式化为文本的单元格中。
Mid可以提取出需要的子串。 -
你好 RussellB 我不太清楚你指的是什么,因为这是我第一次使用这个网站,但我试图用更多数据编辑我的问题,这可能会有所帮助,谢谢
-
添加到 John 的评论 - Excel 对数字的精度限制为 15 位:尝试在单元格中输入 20 位数字(例如 20 个 2)并将格式设置为“数字” - 你会发现你丢失了一些信息。在处理不用作数字的“数字”时,您应该始终在填充内容之前将单元格格式化为文本。