Excel VBA从一个单元格中提取单元格地址,从另一个单元格中提取值,然后输入另一个单元格

时间:2016-03-12 05:14:49

标签: excel vba excel-vba

时间海报。我正在运行Excel 2010,我已经完成了一些VBA的工作,但我仍然是一个新手,我真的一直在转动这个。所以......

我的工作表中有这些单元格 - 这是他们所做的(这是假设的):

  • A1是空白的;它将在稍后输入。
  • B1中会有一个单元格地址 - 假设地址是B3。这个地址将由excel公式生成,基于我放入A1的内容(我能够做到的那部分)。
  • C1会有一些东西 - 让我们说“你好”这个词。

这就是我需要一个宏来做的事情,只要我把它放入A1并点击返回:

  1. 从B1
  2. 抓取单元格地址
  3. 从C1
  4. 中抓住“你好”这个词
  5. 将“hello”放入B3
  6. 转到A1并删除其内容,但保持活动状态,然后结束
  7. 提前感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:0)

您需要将其放在要使其处理的特定工作表的代码中。当我测试它时,它的速度非常快,你真的没有看到A1含有任何东西。如果你想看到它,我想你可以在那里等一下。但是要将此代码放在左侧树上的工作表中(只是因为您不知道),您将看到VBAProject("工作簿名称")> Microsoft Excel对象>第1页("工作表名称")

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ws As Worksheet
Dim keyCell As Range
Dim adr As String, str As String

Set ws = ActiveSheet
Set keyCell = ws.Range("A1")

If Not Application.Intersect(keyCell, Target) Is Nothing Then
    adr = ws.Range("B1")
    str = ws.Range("C1")

    ws.Range(adr) = str
    With ws.Range("A1")
        .ClearContents
        .Select
    End With
    End
End If

End Sub

希望这有帮助!

答案 1 :(得分:0)

好的,所以这就是我最终想出来的,它有效......

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        c = Range("b1").Value
        i = Range("c1").Value
            If Target.Value = "" Then
                Exit Sub
            Else
                Range(c) = i
                Target.Select
                Selection.ClearContents
            End If
    End If
End Sub

我假设(还没有这样做)我可能将变量c和i嵌入到“else”下面的那一行,但是现在,我想这更容易思考。我不确定为什么这有效,其他人没有。出于某种原因,我的宏似乎......间歇性的。

无论如何,再次感谢!