【问题标题】:Extract Row Locations to Use as Reference提取行位置以用作参考
【发布时间】:2017-05-15 21:53:34
【问题描述】:

我使用来自this post. 的建议在我的工作表中填充了空白单元格位置的 Excel 工作表,所以我有一个 A 列,其中填充了以下格式的位置

$X$1$X2:$X$4

我想要做的是使用上面解释的列中的那些行号来填充单独的列。我想使用行号作为为列填充的内容的参考。所以 B 列看起来像

=$B$1=$B$2:$B$4 (取1和2-4作为参考调用的行号)

两列都引用了不同的工作表,所以请原谅任何列命名。

我不确定这是否需要 VBA,或者我是否可以仅使用公式就可以逃脱,由于所需的细节,我希望 VBA。我看过thisthis 这样的帖子。但这些都没有完全包含我正在寻找的东西。特别是因为我希望它表达 $B$2:$B$4 案例中的所有内容。

我对如何解决这个问题的直觉告诉我,将 A 列中的字符串解析为第一个数字,然后检查它是否是字符串的结尾。如果是,则将其提供给填充 B 列的引用,如果不是,则找到第二个数字并通过循环填充单元格(在这种情况下,希望将所有内容保留在一个单元格中),每个值的每个值尊敬。

=$B2

=$B3

=$B4

我的问题是我该怎么做?如何解析字符串?如何生成将通过必要步骤的循环?例如使用数字作为参考,从不同的列中提取信息并将其整齐地输入另一列。

【问题讨论】:

  • 抱歉,有什么问题吗?如何填充另一列?你尝试了什么?不太确定您要做什么。您是否正在使用公式,并且想要将其拖动到另一列中使用,而不是 Col.A?
  • "空白单元格的位置", "我希望它表达 $B$2:$B$4 案例中的所有内容" - 什么内容?
  • 您的问题中缺少一些明确的上下文。您想在这里实现什么目标?
  • 我认为你需要退后一步,用简单的语言解释你想要实现的目标。数据是什么?预期的结果是什么?不要沉迷于使用此参考公式的方法。你把事情复杂化了,朝着完全错误的方向发展。编辑您的问题并在完成后发表评论。
  • 对不起,伙计们,我的编辑试图详细说明。让我知道如何更好地解释问题。

标签: vba excel excel-formula excel-2010


【解决方案1】:

如果(例如)你的地址是 $X2:$X$4 那么

Dim rng As Range
Set rng = yourSheetReference.Range("$X2:$X$4")

如果您想将其映射到相同的行但 B 列然后

Set rng = rng.Entirerow.Columns(2)

会这样做。注意:从您的问题来看,您是在映射 X>>B 还是 B>>X,并不太清楚。

一旦你有了你想要的范围,你就可以循环它:

For Each c in rng.Cells
    'do something with cell "c"
next c

这样的东西应该适合你:

Sub Tester()

    Dim shtSrc As Worksheet, c As Range, rng As Range, c2, v, sep

    Set shtSrc = ThisWorkbook.Worksheets("Sheet1") '<< source data sheet

    Set c = ActiveSheet.Range("A2") '<<range addresses start here

    'process addresses until ColA is empty
    Do While c.Value <> ""
        'translate range to (eg) Column X
        Set rng = shtSrc.Range(c.Value).EntireRow.Columns(24)
        sep = ""
        v = ""
        'build the value from the range
        For Each c2 In rng.Cells
            v = v & sep & c2.Value
            sep = vbLf
        Next c2
        c.Offset(0, 1) = v '<< populate in colB
   Loop

End Sub

【讨论】:

  • 我将如何处理动态范围?我感兴趣的范围各不相同。范围列在列中,但我只对行感兴趣。我要做的是从 B 列中的值中提取行号,并使用它从同一行的 X 列中提取值。
【解决方案2】:

试试这个代码:

Sub Test()
    Dim fRng As Range ' the cell that has the formula
    Set fRng = Worksheets("sheet1").Range("A1")
    Dim tWS As Worksheet 'the worksheet that has the values you want to get
    Set tWS = Worksheets("sheet2")
    Dim r As Range
    For Each r In Range(fRng.Formula).Rows
     'Debug.Print r.Row ' this is the rows numbers
     Debug.Print tWS.Cells(r.Row, "N").Value 'N is the column name
    Next
End Sub

【讨论】:

  • 我将如何处理动态范围?我有一个我感兴趣的范围列表,它们之间有很多跳跃。
  • fRng 设置为您的动态范围,然后循环遍历此范围内的所有单元格。
  • 如何将其设置为动态范围?
  • 我认为@TimWilliams answer 会做你想做的事,我的回答只是关于如何从公式中获取行的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多