Как создать макрос, который работает только на выбранных ячейках - PullRequest
0 голосов
/ 13 ноября 2018

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

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

Проблема в том, что я хотел бы иметь возможность запускать макрос для выделения, то есть я хотел бы выбирать ячейки и запускать макрос только на этих ячейках. Затем я могу выбрать ячейки, запустить макрос, сделать другой выбор, запустить макрос и т. Д. Это значительно ускорит мою работу.

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

Объединение ссылок в Excel

  1. Допустим, ссылки, которые вы хотите объединить, находятся в E18: E27
  2. Создайте новый столбец рядом со столбцом условного обозначения для консолидированных ссылок
  3. В пустой ячейке в новом столбце, где вы хотите объединить все значения, введите:
  4. = CONCATENATE (транспонирование (
  5. Затем выберите ячейки, которые нужно объединить
  6. Формула изменится на = CONCATENATE (TRANSPOSE (E18: E27
  7. Пока не нажимайте ввод.
  8. Нажмите после последней ссылки на ячейку и нажмите пробел
  9. Введите оператор &
  10. Тип ”,” (двойная кавычка, запятая, пробел, двойная кавычка)
  11. Это добавит запятую и пробел после каждой ссылки
  12. Выберите TRANSPOSE (E18: E27 & "," и нажмите клавишу F9 (F9 заменяет формулы значениями)
  13. Это заменяет TRANSPOSE (E18: E27 & "" с его результатом, {"E18", "E19", "E20", "E21,", "E22,", "E23,", "E24 , "," E25, "," E26 "," E27, "}
  14. Теперь удалите фигурные скобки {и}
  15. Формула теперь будет выглядеть как = CONCATENATE («E18», «E19», «E20», «E21», «E22», «E23», «E24», «E25, "," E26 "," E27 ",
  16. Выберите всю формулу, включая знак =, и нажмите F9
  17. Нажмите Enter
  18. Готово!

Примечание: это работает только для 256 ссылок. Уже не так и формула выдаст ошибку. Если есть какой-либо способ изменить его, чтобы он работал больше, пожалуйста, дайте мне знать .

Вот код, который я получаю только с помощью записи макроса, описанной выше, с включенными «относительными ссылками». Я не знаю, поможет ли это мне или нет.

Sub ConsolidateReferencesMacro2()
'
' ConsolidateReferencesMacro2 Macro
'

'
    ActiveCell.Offset(-1, 3).Range("A1").Select
    ActiveCell.FormulaR1C1 = _
        "U102, U103, U104, U105, U199, U200, U201, U202, U204, U205, U206, 
U207, U232, U233, U234, U235, U245, U246, U44, U45, U65, U66, "
With ActiveCell.Characters(Start:=1, Length:=128).Font
    .Name = "Calibri"
    .FontStyle = "Regular"
    .Size = 11
    .Strikethrough = False
    .Superscript = False
    .Subscript = False
    .OutlineFont = False
    .Shadow = False
    .Underline = xlUnderlineStyleNone
    .ThemeColor = xlThemeColorLight1
    .TintAndShade = 0
    .ThemeFont = xlThemeFontMinor
End With
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub

Я не вижу «Concactencate» и «Transpose», поэтому я не знаю, что на самом деле происходит в этом фрагменте кода.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

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

Как я вижу, вы новичок в VBA-игре. Поэтому я объясняю вам кое-что, не знаю, знаете ли вы уже некоторые термины ...

Зацикливание в Excel можно использовать для диапазонов, для отличных результатов. Это позволит вам просматривать каждую ячейку и определять значение, формат или что угодно, основываясь на этой ячейке.

Вы сказали мне, что ваш диапазон был в выборе, и что вы хотите, чтобы ваш код был рядом с ним.

Ваш код может быть таким:

Sub ConsolidateValues()
Dim c As Range

MyRange = Application.Selection.Address(False, False, xlA1)
FrstC = Left(MyRange, Application.WorksheetFunction.Find(":", MyRange) - 1)
CVal = ""

For Each c In Selection

CValue = c
CVal = CVal & CValue & ", "

Next c

Range(FrstC).Offset(0, 1).EntireColumn.Insert
FrstCOff = Range(FrstC).Offset(0, 1).Address(False, False, xlA1)
Range(FrstCOff).Value = CVal

End Sub

Это должно объединить ваш диапазон в одну ячейку справа от «E17».

0 голосов
/ 13 ноября 2018

Вставьте следующий код в модуль:

Option Explicit

Sub concat_result()
Selection(Selection.Count, 1).Offset(0, 1) = concat_select(Selection)
End Sub

Function concat_select(R1 As Range) As String
concat_select = Join(Application.Transpose(R1.Value2), ",")
End Function

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

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