【问题标题】:Convert text number to value将文本数字转换为值
【发布时间】:2016-05-07 21:55:04
【问题描述】:

我有来自单元格 A17:A29 的以下值

Col A      ColH   ColI
02494/1    191    191  Average  
02585/3    77     77   Average
02341/1    22     131 (Average for same ID in ColA)
02341/1    218

我需要根据 Col A 中的相同 ID 对 Col H 中的值进行平均,并将平均值放在 Col I 中。由于 Col A ID 是字符串,我在 Col I 中没有收到错误 #N/A。以下我的代码是否首先尝试将 ID 转换为值。

    Sub conver()
    Range("A17:A20").Select
    With Selection
    Selection.NumberFormat = "General"
    .Value = .Value
    End With
    End Sub 

然后

    Sub averag()
    With Worksheets("averages")
Range("I17:I" & .Cells(.Rows.Count, 1).End(xlUp).Row).Formula = "=   IF(A17<>A16,AVERAGEIF(A17:INDEX($A17:INDEX(A16:A55,MATCH(1E+99,A16:A55)+1),MATCH(TRUE,(INDEX($A17:INDEX(A16:A55,MATCH(1E+99,A16:A55)+1)<>A17,)),0)),A17,H17:INDEX($H17:INDEX(H17:H55,MATCH(1E+99,A16:A55)+1),MATCH(TRUE ,(INDEX($A17:INDEX(A16:A55,MATCH(1E+99,A16:A55)+1)<>A17,)),0))),"""")"
    End With

    End Sub

但它还没有工作。有人可以帮忙吗?或者有其他方法可以做到这一点。我无法更改 ID 格式。谢谢你。

【问题讨论】:

  • 0249/1 是否意味着您在一个单元格中有0249,或者您想将 0249 除以 1?
  • 仅复制和粘贴特殊值没有帮助吗?
  • @Scott 实际上它是一个 ID '02494/1" 而不是 249 除以 1。

标签: vba excel excel-formula


【解决方案1】:

已编辑:为“无限”范围添加了解决方案

不需要任何A列值转换

如果您的相关范围位于工作表“平均值”的第 17 行和第 29 行之间,那么只需这样:

Sub averag()
     Worksheets("averages").Range("A17:A29").SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 8).FormulaR1C1 = "=IF(COUNTIF(R17C1:RC1,RC1)>1,"""",AVERAGEIF(R17C1:R29C1,RC1,R17C8:R29C8))"
end sub

此外,如果范围的下侧是动态的(即,不限于第 29 行),那么您可以如下所示:

Option Explicit

Sub averag()
Dim IDRng As Range

With Worksheets("averages")
    Set IDRng = .Range("A17:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
    IDRng.SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 8).FormulaR1C1 = "=IF(COUNTIF(R17C1:RC1,RC1)>1,"""",AVERAGEIF(" & IDRng.Address(, , xlR1C1) & ",RC1," & IDRng.Offset(, 7).Address(, , xlR1C1) & "))"
End With

End Sub

【讨论】:

  • 嗨,当我使用代码时,它给出了从“Col H”到“Col I”的相同值,没有平均值?
  • 我根据您的数据测试了代码并且它有效。 1)您实际使用的是哪个代码版本:“静态”还是“动态”? 2)你的数据是什么样的?它们是常数还是公式的结果?您可以发布具有该行为的数据
  • 嗨,是的,它运行良好,可能是我在 col A 中的格式设置错误。 Function SplitSum(r As Range) As Double Dim i As Integer, X X = Split(r.Value, " /") For i = LBound(X) To UBound(X) SplitSum = SplitSum + X(i) Next i End Function 然后使用 Sub ss() Worksheets("check").Range("B17").Formula = " =SplitSum(A17)" Range("B17").AutoFill Destination:=Range("B17:B20") End Sub 感谢
  • 你成功了。无论如何,如果我的回答确实解决了您的问题,您可以将其标记为已接受。如果它被证明有用,你可能想要投票。谢谢
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多