【问题标题】:Copy range indicated by inputbox输入框指示的复制范围
【发布时间】:2015-07-17 12:08:54
【问题描述】:

我正在寻找一种可以将 Excel 工作表中的特定范围复制到新工作表的模型。目前我有五列。第一列是年份。例如,我想用inputbox指出应该复制哪一年。在 B 栏中,显示了一年中的星期几。在 C 到 E 列中,记录了特定数据。结果,我的工作表如下所示:

Col A   Col B   Col C   Col D   ColE
Year    Week    Amount  time    forecast
2000    1       368     2000w1  400
2000    2       8646    2000w2  8500
until...
2014    52      46546   2014w52 47000

通过输入框,我想表明应该将 2014 年复制到下一张表中。到目前为止,我编写/编译了以下宏:

Sub Copy_year()
    Dim Forecastyear As String
    Dim Rng As Range

    Forecastyear = InputBox("Enter a year to forecast")

    If Trim(Forecastyear) <> "" Then
        With Sheets(2).Range("A:A")
            Set Rng = .Find(What:=Forecastyear, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not Rng Is Nothing Then
                Application.Goto Rng, True
            Else
                MsgBox "Nothing found"
            End If
        End With
    End If

    'Range(ActiveCell, RC[52,4]).Select
End Sub

这会选择包含年份值的第一个单元格。我想为具有所选单元格的行和接下来的 51 周(共 52 周)选择完整的 5 列。我怎样才能选择所有这些数据?

【问题讨论】:

  • 数据是否总是排序的?
  • 是的,数据总是按时间顺序排列的,接下来数据按星期顺序排列的第二列排序。

标签: vba excel range inputbox


【解决方案1】:

使用这个

Sub Copy_year()
    Dim Forecastyear As String
    Dim Rng As Range

    Forecastyear = InputBox("Enter a year to forecast")

    If Trim(Forecastyear) <> "" Then
        With Sheets(2)
            For Each cell In .Range("A:A")
                If cell.Value = Forecastyear Then'find first occurrence of year
                    Set Rng = cell
                    Exit For
                End If
            Next
            .Range(Rng.Address).Resize(52, 5).Select'resize for 52 rows and 5 columns
        End With
    End If
End Sub

你现在打算用它做什么?就cpu时间而言,仅仅选择是相当低效的

【讨论】:

  • 感谢您的解决方案。它工作得很好。但是,我首先必须提前定义单元格。您是否忘记了这一点,或者您是否有其他设置,因此您不需要定义?无论如何,非常感谢您的努力。我将使用它来复制所选区域以复制到下一张纸。在下一张纸中,我将回顾我使用的预测方法。为此,我制作了其他几个宏。
  • 我打算发布一个类似的方法。我相信这是最简单的方法。虽然一旦找到 Rng,您可以将调整大小应用于您自己的 rng @vba_interested,因为 Find 比该循环更快。但是,如果您的商品少于 100 件,则应该不会产生明显的差异。
  • 我在上面做的时候没有“选项显式”,所以我不必声明它,但声明它会更好。很高兴它对你有用
  • @DavidGM 真的,如果你想很快,你会把它读入数组或字典中
  • 谢谢大家。现在我有下一个问题:是否可以使用超过一年?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
相关资源
最近更新 更多