【问题标题】:Set part of string as percentage将字符串的一部分设置为百分比
【发布时间】:2019-10-11 08:20:12
【问题描述】:

一直在尝试获取一个 msgbox 来显示用户可以看到和使用的一系列单元格。这需要是我的工作簿另一张工作表中两列的列表。完成了大部分代码,但我得到了一个我无法理解的输出。

在代码中,我希望 NCol 在 msgbox 提示时显示为百分比。

第一个想法是将该变量中的每个单元格设置为Format(NCol,"0.00%")For NCol = ... 之后。

第二个想法是在Str & Rng.Cells...Format(Ncol.. 内部,显然没有按预期进行。

非常感谢任何指向正确方向的指针。下图显示了 msgbox 中的结果。 输入

结果

Sub ShowTopCat()
    Dim Rng As Range
    Dim ACell As Range
    Dim Str As String
    Dim ARow As Long
    Dim NCol As Long
    Dim art As Worksheet
    Set art = Worksheets("Sheet1")
    On Error Resume Next
    Set Rng = art.Range("x2:y101")
    If Rng Is Nothing Then Exit Sub
    On Error Resume Next
    For ARow = 1 To Rng.Rows.Count
        For NCol = 1 To Rng.Columns.Count
                Str = Str & Rng.Cells(ARow, NCol).Value & vbTab
        Next
        Str = Str & vbCrLf
    Next
    MsgBox Str, vbInformation, "You top cats"
End Sub

【问题讨论】:

  • 为什么不使用Right()Split() 来获取字符串的数字部分并将其存储在Double 中。然后你可以操纵它?
  • 您的输入和预期输出是什么?
  • @Tom 用图片编辑了问题,如果 msgbox 的范围从中获取值
  • 对不起,但对我来说完全不清楚你想得到什么
  • 我只是想说,Format(NCol, "0.00%") 可以和我一起工作(如果Ncol 是对数字的引用)以将其放入MsgBox。否则,也许您正在寻找 NumberFormat 来格式化您的实际单元格?

标签: excel vba msgbox


【解决方案1】:

当您的范围固定时,为什么要使用两个循环?

Sub ShowTopCat()
    Dim art As Worksheet
    Dim Rng As Range
    Dim Str As String
    Dim ARow As Long

    Set art = Worksheets("Sheet1")

    On Error Resume Next
    Set Rng = art.Range("x2:y101")
    If Rng Is Nothing Then Exit Sub
    On Error Resume Next

    For ARow = 1 To Rng.Rows.Count
        With Rng.Cells(ARow, 1)
            If .Value2 <> vbNullString Then
                Str = Str & .Value2 & vbTab & Format(.Offset(0, 1).Value2, "0" & Application.DecimalSeparator & "00%")
                Str = Str & vbCrLf
            End If
        End With
    Next ARow
    MsgBox Str, vbInformation, "You top cats"
End Sub

【讨论】:

  • 谢谢汤姆。它看起来是正确的,但由于某种原因它给了我最后一个范围。
  • @krib '最后一个范围'是什么意思?
  • Range("X2:Y101") 填充有X 中的类别和Y 中的百分比值。此代码仅给出最后一行值。我用过所有范围。我已将其修改为 Y12,因为我知道 msgbox 的范围太大,但仍然给我 X12:Y12 中的内容。
  • 它是如此接近,但它仍然没有将所有值存储到字符串中。我自己看不出来怎么回事。但是值是正确的,所以这给了我一些想法
  • @krib - 它在我的测试中运行良好,但是代码会跳过列 X 为空白的任何行?这是你的意思吗?
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
相关资源
最近更新 更多