Щелкните ячейку, чтобы добавить строку в конец списка - PullRequest
0 голосов
/ 04 августа 2020

Я новичок в использовании макросов в Excel, поэтому надеюсь, что этот вопрос не слишком глуп.

Я создаю рабочий лист для отслеживания продаж. У меня есть список напитков в одном столбце, и я хотел назначить макрос для ячеек, чтобы при нажатии на них текст в их ячейках копировался в другой столбец.

Я знаю, что вы можете записывать макросы для копирования и вставки значений, но я не уверен, как заставить его копировать текст в следующую пустую ячейку в столбце, а не только в первую ячейку.

введите описание изображения здесь

Итак, это мои таблицы. Я хочу иметь возможность щелкнуть ячейку в столбце Напитки , и строка появится внизу столбца список (так после «Cuba Libre»)

Спасибо!

EDIT_1:

Хорошо, вот мой код:

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

^ Я повторил этот код для каждая из соответствующих ячеек в столбце C (C2: C5).

Как я уже сказал, я только дошел до того, что смог скопировать и вставить значения из Напитки в столбец Список , я не понимаю, как вставить значение в следующую пустую ячейку.

Ответы [ 3 ]

0 голосов
/ 04 августа 2020

ОБНОВЛЕНИЕ Итак, мне удалось выяснить, как заставить макрос вставить значение ячейки в конец списка!

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LastRow As String

   If Target.Address = "$C$2" 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

Однако у меня есть вопрос качества жизни. Есть ли способ отредактировать код, чтобы он применялся ко всем ячейкам в диапазоне C2: C10? Потому что в нынешнем виде мне пришлось бы повторять код для каждой ячейки, заменяя строки 3 и 4 для всех ячеек в диапазоне.

If Target.Address = "$C$2" Then
       Range("C2").Select
0 голосов
/ 04 августа 2020

Если вы действительно превратите 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
0 голосов
/ 04 августа 2020

Вам нужно расширить свой чек на Target, чтобы включить в него весь ассортимент напитков. Затем определите следующую доступную ячейку в списке

Что-то вроде (жестко запрограммировано для списка в столбце 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...