通过宏复制excel中的值

通过宏复制excel中的值,excel,vba,Excel,Vba,对于宏来说是个新手,我想了解一下 我希望根据选中框中的值,在单独的工作表上显示表格中的单元格信息 我有5个单元格,根据电影的评级返回电影的标题,这是从一个名为“电影”的表格中提取的。我旁边还有5个单元格,返回年份,然后是5个单元格,旁边有评级。下面是它的外观: A B C ______________________________________________________ 1 | E

对于宏来说是个新手,我想了解一下

我希望根据选中框中的值,在单独的工作表上显示表格中的单元格信息

我有5个单元格,根据电影的评级返回电影的标题,这是从一个名为“电影”的表格中提取的。我旁边还有5个单元格,返回年份,然后是5个单元格,旁边有评级。下面是它的外观:

                      A                        B      C
   ______________________________________________________
1 | Eternal Sunshine of the Spotless Mind  |  2004 | 8.5 |
2 | 3 Idiots                               |  2009 | 8.2 |
3 | Before Sunrise                         |  1995 | 8.1 |
4 | Groundhog Day                          |  1993 | 8.1 |
5 | (500) Days of Summer                   |  2009 | 8.0 |
    ID   Title                            Year   Duration   Rating   Plot
   _____________________________________________________________________________________________________________________________________________________________________________________
  |  1 | (500) Days of Summer           | 2009 |  95 min  |   8.0  | An offbeat romantic comedy about a woman who doesnt believe true love exists, and the young man who falls for her. |
我希望这样,当选择单元格A1时,绘图将从电影工作表中的电影表中提取

Worksheet = movies
Table = Movies
Column = Plot
我需要能够匹配标题和年份,因为在我的电影表中有多部同名电影

这是我迄今为止创建的用于测试的宏(Result1是A1的名称,Result2是A2的名称,等等):

我想将选定单元格中的电影情节复制到单元格B7中

例如,如果选择Result1,它将在电影表中找到无瑕心灵的永恒阳光,并在B7中输出其情节

谢谢你的帮助

编辑:这是电影表的外观:

                      A                        B      C
   ______________________________________________________
1 | Eternal Sunshine of the Spotless Mind  |  2004 | 8.5 |
2 | 3 Idiots                               |  2009 | 8.2 |
3 | Before Sunrise                         |  1995 | 8.1 |
4 | Groundhog Day                          |  1993 | 8.1 |
5 | (500) Days of Summer                   |  2009 | 8.0 |
    ID   Title                            Year   Duration   Rating   Plot
   _____________________________________________________________________________________________________________________________________________________________________________________
  |  1 | (500) Days of Summer           | 2009 |  95 min  |   8.0  | An offbeat romantic comedy about a woman who doesnt believe true love exists, and the young man who falls for her. |

我可能会使用自动过滤器。根据您正在引用的movies表的结构(我没有此表),您需要修改AutoFilter
字段的值,并确保您定义了
tblRange

修订了每个OP评论和示例文件结构

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim movieTitle As String
Dim movieYear As String

If Not Intersect(Target, Range("Result1")) Is Nothing Then
    movieTitle = Range("Result1").Value 'Modified because you use merged cells...
    movieYear = Range("Result1").Offset(0, 1).Value 'modified.
    GetMovieInfo movieTitle, movieYear
End If
If Not Intersect(Target, Range("Result2")) Is Nothing Then
    movieTitle = Range("Result2").Value 'Modified because you use merged cells...
    movieYear = Range("Result2").Offset(0, 1).Value 'modified.
    GetMovieInfo movieTitle, movieYear
End If
If Not Intersect(Target, Range("Result3")) Is Nothing Then
    movieTitle = Range("Result3").Value 'Modified because you use merged cells...
    movieYear = Range("Result3").Offset(0, 1).Value 'modified.
    GetMovieInfo movieTitle, movieYear
End If
If Not Intersect(Target, Range("Result4")) Is Nothing Then
    movieTitle = Range("Result4").Value 'Modified because you use merged cells...
    movieYear = Range("Result4").Offset(0, 1).Value 'modified.
    GetMovieInfo movieTitle, movieYear
End If
If Not Intersect(Target, Range("Result5")) Is Nothing Then
    movieTitle = Range("Result5").Value 'Modified because you use merged cells...
    movieYear = Range("Result5").Offset(0, 1).Value 'modified.
    GetMovieInfo movieTitle, movieYear
End If

End Sub
子例程,
GetMovieInfo
将过滤Movies表,并返回消息框中第6列(绘图)的结果

Sub GetMovieInfo(movieTitle As String, movieYear As String)
Dim tblRange As Range
Set tblRange = Sheets("movies").Range("Movies")
With tblRange
 .AutoFilter Field:=2, Criteria1:=movieTitle  '<change to filter column "2"
 .AutoFilter Field:=3, Criteria1:=movieYear  'change to filter to column "3"
    With .SpecialCells(xlCellTypeVisible)
        If .Areas.Count > 1 Then
            MsgBox .Areas(2).Cells(1, 10).Value
        Else:
            MsgBox .Areas(1).Cells(1, 10).Value
        End If
    End With
 .AutoFilter
End With
End Sub
Sub-GetMovieInfo(movieTitle作为字符串,movieYear作为字符串)
变暗TBL范围作为范围
设置tblRange=工作表(“电影”)。范围(“电影”)
带TBL范围

.AutoFilter字段:=2,准则1:=movieTitle'我建议使用
Find
Range属性。该功能可以如下所示:

Function GiveMeMoviePlot(MovieRange As Range, MovieTitle As String, _
            MovieYear As String)
    'pass movieTable to MovieRange

Dim A As Range
Dim checkAddress As String

Set A = MovieRange.Find(MovieTitle, , xlValues, xlWhole, , xlNext, False)
checkAddress = A.Address

If Not A Is Nothing Then

    Do
        Debug.Print A.Address
        If A.Offset(0, 1) = MovieYear Then
            'found
            GiveMeMoviePlot = A.Offset(0, 4)
            Exit Function
        Else
            Set A = MovieRange.FindNext(A)

        End If

    Loop While A.Address <> checkAddress

End If

        GiveMeMoviePlot = "Nothing found"
End Function
函数给定memovieplot(MovieRange作为范围,MovieTitle作为字符串_
电影年(以字符串形式)
'将movieTable传递给MovieRange
使范围变暗
Dim checkAddress作为字符串
设置A=MovieRange.Find(MovieTitle、xlValues、xlother、xlNext、False)
checkAddress=A.地址
如果不是,那就什么都不是了
做
调试。打印地址
如果A.Offset(0,1)=电影年,则
“找到
曲线图=A.Offset(0,4)
退出功能
其他的
设置A=MovieRange.FindNext(A)
如果结束
当A.地址检查地址时循环
如果结束
GiveMeMoviePlot=“未找到任何内容”
端函数

其余的逻辑与@DavidZemens的逻辑非常相似

你能上传你的文件并给我们链接吗,或者让我们知道你的电影表在哪里以及它的结构是什么。文件非常大,但我会在OPM中发布一个例子。电影表不是一个特定的范围,这就是我命名该表的原因。桌子将不断地扩大和缩小。我们可以把它设置为整个表还是整个工作表?如果你所说的“命名表”是指一个命名的范围,而不是一个特定的地址。或者,你可以
设置tblRange=Sheets(“Movies”).UsedRange
,它会随着表格的增长而增长。啊,我明白了。唯一的问题是我似乎无法定义GetMovieInfo(你的GetMovieInfo子系统中有一个输入错误…你有GetMoveInfo)。我修复了输入错误,现在你说“我似乎无法定义GetMovieInfo”是什么意思?在为Movies表添加后,当我点击一个框时,我得到一个编译错误:脚本中的语法错误,它突出显示了GetMovieInfo(movieName,movieYear)