【问题标题】:Selecting a Cell based on Row and Column Headers, and Inputting a Value From an Input Section on that Sheet根据行标题和列标题选择单元格,并从该工作表的输入部分输入值
【发布时间】:2014-02-09 09:10:27
【问题描述】:

我从 A112:H206 范围内创建了一个表格,星期几(星期日、星期一等)从 B112-H112 开始作为表格行。在 A 列中,我列出了个人的姓名,一直到 A206。

我在电子表格顶部有一个输入部分,用户将在其中从单元格 A109 的下拉菜单中选择一个名称一周中的某一天从单元格 B2 的下拉菜单中,最后是单元格 C109 中的 ,该值应输入到表中的相应单元格中。

我创建了一个名为“Enter”的按钮,单击该按钮应根据上面的输入部分搜索相应的单元格,并在该单元格中输入 C109 值。不幸的是,我使用 VBA 的尝试没有成功!任何帮助将不胜感激。

谢谢!

 Private Sub CommandButton1_Click()

   Dim ws1 As Worksheet
    Dim x As Range
    Dim y As Range

    Dim valX, valY

    Set ws1 = Sheets("Sheet1")

    valX = ws1.Range("B2").Value
    Set x = ws1.Range("A112:H112").Find(What:=valX, LookIn:=xlValues, _
                                        lookat:=xlWhole)

    If x Is Nothing Then
        MsgBox "'" & valX & "' not found on '" & ws1.Name & "' !"
        Exit Sub
    End If

    valY = ws1.Range("A109").Value
    Set y = ws1.Range("A112:A206").Find(What:=valY, LookIn:=xlValues, _
                                        lookat:=xlWhole)

    If Not y Is Nothing Then
        Range("C109").Select
        Selection.Copy

        ws1.Cells(x.Column, y.Row).Select
        ActiveSheet.Paste

        Range("C109").Select
        Selection.ClearContents

        Exit Sub
    End If


    End Sub

【问题讨论】:

  • 您可以使用Find() 定位每个所需的列/行“标题”单元格,然后从这些单元格中确定数据需要去往的“相交”单元格。
  • 如果您有现有代码,则应将其添加到您的问题中 - 不必实际工作。
  • 啊不幸的是我有点沮丧,从头开始;我想我需要复习一下 Find() 函数!
  • 这里有一个类似的问题:stackoverflow.com/questions/20477168/…
  • 谢谢!我会尝试将那里的答案应用于我的问题!

标签: excel vba


【解决方案1】:

朋友帮忙,发在这里,供大家参考!

Range("C109").Select
Selection.Copy

Dim Day As String
Dim Name As String
Dim nameFound As Boolean
Dim dayFound As Boolean

Name = Cells(109, "A").Value
Day = Cells(2, "B").Value

Range("A113").Select
nameFound = False
Do Until IsEmpty(ActiveCell)
    If ActiveCell.Value = Name Then
        nameFound = True
        Exit Do
    End If
    ActiveCell.Offset(1, 0).Select
Loop

If nameFound = True Then
    Dim nameAddress As Integer
    nameAddress = ActiveCell.Row
Else
    MsgBox "Name not found"
End If

Range("B112").Select
dayFound = False
Do Until IsEmpty(ActiveCell)
    If ActiveCell.Value = Day Then
        dayFound = True
        Exit Do
    End If
    ActiveCell.Offset(0, 1).Select
Loop

If dayFound = True Then
    Dim dayAddress As Integer
    dayAddress = ActiveCell.Column
Else
    MsgBox "Day not found"
End If



Cells(nameAddress, dayAddress).Select
ActiveSheet.Paste
If ActiveCell.Column = 2 Or ActiveCell.Column = 4 Or ActiveCell.Column = 6 Or ActiveCell.Column = 8 Then
    ActiveCell.Interior.Color = RGB(83, 142, 213)

    ElseIf ActiveCell.Column = 3 Or ActiveCell.Column = 5 Or ActiveCell.Column = 7 Then
        ActiveCell.Interior.Color = RGB(182, 221, 232)
End If



Range("C109").Select
Selection.ClearContents

【讨论】:

    【解决方案2】:

    未经测试:

    Private Sub CommandButton1_Click()
    
        Dim ws1 As Worksheet
        Dim x As Range
        Dim y As Range
    
        Dim valX, valY
    
        Set ws1 = Sheets("Sheet1")
    
        valX = ws1.Range("A109").Value
        Set x = ws1.Range("A112:H112").Find(What:=valX, LookIn:=xlValues, _
                                            lookat:=xlWhole)
    
        If x Is Nothing Then
            MsgBox "'" & valX & "' not found on '" & ws1.Name & "' !"
            Exit Sub
        End If
    
        valY = ws1.Range("B2").Value
        Set y = ws1.Range("A112:A206").Find(What:=valY,LookIn:=xlValues, _
                                            lookat:=xlWhole)
    
        If Not y Is Nothing Then
            With ws1.Range("C109")
                .Copy ws1.Cells(y.Row, x.Column)' <<EDITED
                .ClearContents
            End With
        Else
            MsgBox "Name '" & valY & "' not found on '" & ws1.Name & "' !"
        End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2019-05-31
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多