2016-11-14 15 views
0

Я пытаюсь объединить многие (300+) ячеек много (100+) раз, и считаю, что макрос, вероятно, лучший способ достичь этого.Вычисляемые значения, используемые в формуле макросом

Интернет предложил использовать concantenate фокусы для достижения этой цели:

= CONCANTENATE (B2: B400) и нажмите клавишу F9, в то время как выделение массива, и удалите фигурные скобки.

Это прекрасно работает, если сделано человеком. Однако при записи макроса excel решает вставить значения (т. Е. = CONCANTENATE («a», «b», «c»)), а не обман. Есть ли способ обойти это? Я думал об использовании sendkeys, но по очевидным причинам я бы предпочел не делать этого.

Или лучше отказаться от этого метода и использовать какой-то цикл, чтобы объединить их все вместе?

Благодарим за помощь!

Lukas

+0

Если я вас правильно понял, вы хотите функцию, которая принимает ряд и возвращает сцепленные значения всех ячеек в пределах этого диапазона? – arcadeprecinct

+0

Я решил это самостоятельно, изменив решение h2so4. –

+0

Я вижу, я рекомендую научиться [http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros] (использовать с помощью .Select). – arcadeprecinct

ответ

0

раствор через UDF

public function concatrange(r) 
s="" 
for each c in r 
s=s & c 
next 
concatrange=s 
end function 
+0

Hi H2SO4, Спасибо за помощь! Я пробовал ваше решение, но я не мог заставить его работать! Он возвращает ноль! Возможно, что-то я делаю неправильно! Является ли проблема с определением r? –

+0

Я работал его, адаптируя свое решение: 'Для count1 = 2 г Шаг 1 Dim реф В Диапазон ActiveCell.Select Set Ref = Выбор S = S & Ref ActiveCell.Offset (1, 0). Выберите Next' Спасибо за помощь! –

+0

введите код в новый модуль vba и используйте функцию, как и любую другую функцию excel. например, '= concatrange (A1: C1) для конкатенации диапазона A1: C1' – h2so4

Смежные вопросы