2017-02-13 27 views
1

Я хотел бы читать из разных диапазонов, в которых есть значения, вычисленные по некоторой формуле в этих ячейках, в VBA и перезаписывать эти диапазоны значениями, которые были сохранены, чтобы автоматически избавиться от формул в ячейках.Чтение из отдельных диапазонов в массив и переписывание в одни и те же диапазоны в VBA

Код выглядит следующим образом:

allValues = Range("AR8:AW8,AR10:AW10,AR12:AW24,AR26:AW52,AR54:AW61,AR64:AW87,AR89:AW94,AR96:AW96,AR98:AW104,AR106:AW106,AR108:AW110,AR112:AW122,AR125:AW140,AR142:AW162,AR164:AW192,AR194:AW196,AR198:AW198,AR200:AW202,AR204:AW218,AR220:AW230,AR232:AW232,AR234:AW240").Value 

Range("AR8:AW8,AR10:AW10,AR12:AW24,AR26:AW52,AR54:AW61,AR64:AW87,AR89:AW94,AR96:AW96,AR98:AW104,AR106:AW106,AR108:AW110,AR112:AW122,AR125:AW140,AR142:AW162,AR164:AW192,AR194:AW196,AR198:AW198,AR200:AW202,AR204:AW218,AR220:AW230,AR232:AW232,AR234:AW240")= allValues 

Для присоединительных диапазонов такая идея разработана, но для них нет вообще.

Я ценю любой вход.

+0

вам нужно хранить значения в памяти или вы просто пытаетесь делать преобразовать из формул в значения? –

+0

Я просто пытаюсь заменить формулы на соответствующие значения без использования цикла for. Мне не нужно хранить их в памяти. Спасибо, что позволил мне это понять! – user3565521

+0

Вы столкнетесь с множеством проблем, связанных с несколькими выборами. Я не верю, что вы можете избежать цикла for в этом случае, если не выбрать смежный диапазон. Рассматривали ли вы изменение формул на значения для всего рабочего листа? Или есть особая причина, по которой вы не можете использовать цикл for? –

ответ

1

С диапазоном мульти-зоны, итерацию по направлениям:

Dim r As Range 
For Each r In Sheet1.Range("AR8:AW8, AR10:AW10, ..., ...").Areas 
    r.Value = r.Value 
Next 
+1

Хороший ответ. Гораздо лучше, чем у меня! – CallumDA

+1

с учетом потребностей, просто блестящий. Большое спасибо! – user3565521

+0

@ user3565521 Добро пожаловать :) –

0

Я бы как следует:

With Range("AR8:AW8,AR10:AW10,AR12:AW24,AR26:AW52,AR54:AW61,AR64:AW87,AR89:AW94,AR96:AW96,AR98:AW104,AR106:AW106,AR108:AW110,AR112:AW122,AR125:AW140,AR142:AW162,AR164:AW192,AR194:AW196,AR198:AW198,AR200:AW202,AR204:AW218,AR220:AW230,AR232:AW232,AR234:AW240") 
    .Value = .Value 
End With 
+1

Я протестировал этот метод и обнаружил, что он сохранил только первое значение - не все независимые значения. Вы получаете то же самое? – CallumDA

+0

Я ценю ваш вклад – user3565521