【问题标题】:Extracting Columns in Excel having multiple number formats在 Excel 中提取具有多种数字格式的列
【发布时间】:2017-05-02 06:15:47
【问题描述】:

我有一份可以下载的网络报告。在同一列上,我发现了数字的多种格式样式。即:

1.000 EA (#,##0.000" EA")

1.000 AU(#,##0.000" AU")

1.000 PAK (#,##0.000" PAK")

我需要从此列中提取 EA、PAK 和 AU,但我无法复制,因为在所有情况下存储的值实际上都是“1”。有什么方法可以提取或创建具有不同格式数字作为值的列?c

【问题讨论】:

  • @Ralph,我认为他想将格式作为列中的文本获取。不复制格式。它可能不是重复的。
  • 是的,看起来确实很相似。我没有使用过vba代码。你能解释一下我需要在哪里做这个吗?或者这可以是任何方式的单元格值吗?
  • 哦,在这种情况下,您可能正在寻找=CELL("format",A1),对吧?如果这没有帮助,那么您将不得不编写一些 VBA 代码(因为这不能仅通过 Excel 公式来实现)。 VBA 代码将包含一个循环和.NumberFormat
  • @Ralph 那没有给出正确的格式。它给了我“,3”
  • 那么你必须编写一个基于 VBA 的解决方案(如我上面的评论中所述)。当然你也可以使用@nightcrawler23 提供的UDF 解决方案。但我(个人)不会,因为这个解决方案会严重影响 Excel 的性能,也可能不会给你想要的结果(因为这些函数不会像你想象的那样经常更新)。

标签: excel numbers format copy-paste


【解决方案1】:

将此代码放在 VB 编辑器中的模块中(Alt F11)

Function myFormat(r As Range) As String
    myFormat = r.NumberFormat
End Function

如果您在单元格中使用公式=myFormat(A1),它将为您提供单元格A1 的格式为字符串。

现在在所需的单元格中输入此公式

=TRIM(SUBSTITUTE(RIGHT(myFormat(A1), LEN(myFormat(A1)) - FIND("""",myFormat(A1),1)),"""",""))

这应该会给你想要的结果

更新:

以下是一个全 vba 解决方案。您需要根据您的要求更改myRangeoutputRange

Sub runThis()
    Dim myRange As Range
    Set myRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A3") 'Change this as per your requirement

    Dim outputRange As Range
    Set outputRange = ThisWorkbook.Sheets("Sheet1").Range("F1") 'Change this as per your requirement

    Dim s As String

    For i = 1 To myRange.Rows.Count
        s = myRange(i, 1).NumberFormat
        s = Right(s, Len(s) - WorksheetFunction.Find("""", s, 1))
        s = Trim(WorksheetFunction.Substitute(s, """", ""))
        outputRange.Offset(i - 1, 0) = s
    Next i
End Sub

【讨论】:

  • 你检查过如果你使用这样的公式会发生什么:=myFormat("A1:B5")
  • @Ralph 需要做什么?顺便说一句,我添加了一个 vba 解决方案:D
  • 只要数字格式不包含",VBA 解决方案就会生成运行时错误,因为您使用的是WorksheetFunction.Find 而不是InStr()WorksheetFunction.Substitute 而不是Replace()。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多