单击一个单元格以将字符串添加到列表底部

Click a cell to add a string to the bottom of a list

我对在 Excel 中使用宏还很陌生,所以我希望这个问题不会太傻。

我正在创建一个工作表来跟踪销售情况。我在一列中有一个饮料列表,我想为单元格分配一个宏,这样当你点击它们时,它们单元格中的文本就会被复制到另一列。

我知道您可以录制宏来复制和粘贴值,但我不确定如何让它复制列中下一个空单元格中的文本,而不仅仅是第一个单元格中的文本。

总而言之,这些是我的表格。我希望能够单击 Drinks 列中的一个单元格,并让字符串出现在 list 列的底部(所以在 'Cuba Libre')

谢谢!

EDIT_1:

好的,到目前为止这是我的代码:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Address = "$C" Then
       Range("C2").Select
       Selection.Copy
       Range("A2").Select
       ActiveSheet.Paste
   End If
End Sub

^我已经为 C 列 (C2:C5) 中的每个相关单元格重复了此代码。

就像我说的,我只能将 Drinks 列中的值复制粘贴到 List 列,我不知道如何将值粘贴到下一个空单元格中。

您需要扩大对 Target 的检查以包括整个饮料系列。然后确定 List

中的下一个可用单元格

类似于(A 列中的列表和 C 列中的饮料的硬编码)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rDrinks As Range
    
    ' single cell has been selected
    If Target.Cells.Count = 1 Then
        ' Get ref to Drinks range
        Set rDrinks = Me.Range(Me.Cells(2, 3), Me.Cells(Me.Rows.Count, 3).End(xlUp))
        ' Is selected cell in drinks range?
        If Not Application.Intersect(Target, rDrinks) Is Nothing Then
            ' add to list
            Me.Cells(Me.Rows.Count, 1).End(xlUp).Offset(1, 0).Value2 = Target.Value2
        End If
    End If
End Sub

更新 所以我设法弄清楚如何让宏将单元格值粘贴到列表底部!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LastRow As String

   If Target.Address = "$C" Then
       Range("C2").Select
       Selection.Copy
       LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
       Range("A" & LastRow).Activate
       ActiveSheet.Paste
       Application.CutCopyMode = False
   End If
End Sub

但是,我有一个 quality-of-life 问题。有什么方法可以编辑代码,使其适用于 C2:C10 范围内的所有单元格?因为就目前而言,我将不得不为每个单元格重复代码,替换范围内所有单元格的第 3 行和第 4 行。

If Target.Address = "$C" Then
       Range("C2").Select

如果你真的把 List 和 Drinks 变成表格(用那些名字),你可以使用下面的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Integer
    Dim row As Integer
    
    ' Check user has clicked on a drink
    If Not Intersect(Target, [Drinks]) Is Nothing And Target.Cells.Count = 1 Then
        ' Find first blank row in List
        For i = [List].Rows.Count To 1 Step -1
            If [List].Cells(i, 1) = "" Then
                row = i
            End If
        Next
        
        ' If no blank row, add a new row
        If row = 0 Then
            ListObjects("List").ListRows.Add
            row = [List].Rows.Count
        End If
        
        [List].Cells(row, 1) = Target
    End If
End Sub