2015-03-25 4 views
1

У меня есть книга Excel 2010 с 22 рабочими таблицами. Первый рабочий лист обозначается DATA, где данные вводятся пользователем. Строка A1-N1 содержит метки. Строки A2-A18 содержат данные за январь 2015 года для 17 местоположений, начинающихся как ячейка A2, т.е. строка 2 содержит данные для местоположения 1, строки 3 для местоположения 3 и т. Д. Данные в феврале начинаются в строке 19, март начинается в строке 36 и т. Д.Используйте код для изменения формул Excel

На каждом листе A1-M1 указаны метки и строки 2-13 - месяцы с января по декабрь. Ячейка B2 на листе №2 ссылается на ячейку J2 на листе данных DATA. Другие формулы в строке 2 таблицы рабочих таблиц №2 в строке 2 на листе DATA. Строка 3 листка № 2 ссылается на ячейки в строке 19 DATA. В столбце N каждого рабочего листа места есть номер в ячейке N2, который соответствует применимой строке на листе DATA.

Вот пример одного из моих формул:

= (IF (ISBLANK (DATA D2), "-", IF (ISERROR (DATA E2/DATA D2), "N!!/A»(DATA! E2/DATA! D2)))).

Я хотел бы иметь код VB или макро ?, который будет редактировать каждую формулу на каждом рабочем листе, заменив текущее число в формуле с номером в колонке N в той же строке, то есть, если содержится N7 число 88 код будет изменить любую формулу на этой строке, удалив текущее число в формуле и заменяя с номером 88.

Дополнительная информация:

на каждом листе существуют различные формулы для столбцов БМ , Коду нужно будет взять номер в столбце N для этой строки и заменить любое число в этой формуле числом в столбце N этой строки для каждой строки для каждого рабочего листа.

В настоящее время я должен прикоснуться к каждой формуле на каждом листе, и это слишком трудоемко. Начиная с апреля места будут увеличиваться с 17 до 148, что потребует кодирования для внесения соответствующих изменений.

DATA листа изображение

1Р расположение листа изображение

+0

Какой диапазон/ячейки являются формулами, которые вы хотите изменить?Всегда ли такое количество строк в каждом столбце? что ты уже испробовал? – eirikdaude

+0

В каждой таблице формула рабочих мест находится в пределах диапазона B2: M13, а каждый лист местонахождения содержит одинаковое количество строк/колмунов. У меня нет опыта кодирования, поэтому я не пробовал использовать какую-либо форму кодирования. Я изменяю каждую формулу, используя find/replace в каждой строке каждого листа. –

+0

Можете ли вы показать нам, как организованы ваши данные? Загрузите снимок экрана на любом сайте бесплатного хостинга изображений (например, http://imgur.com) и опубликуйте ссылку в комментарии или отредактируйте сообщение – L42

ответ

0

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

Sub replace_numbers() 
    Dim ws As Worksheet 
    Dim c As Range 
    Dim replace_with As Long 
    Dim objRegex As Object 

    'Application.EnableEvents = False 
    'Application.ScreenUpdating = False 
    'Application.DisplayStatusBar = False 
    'Application.Calculation = xlCalculationManual 

    Set objRegex = CreateObject("vbscript.regexp") 

    With objRegex 
    .Global = True 
    .Pattern = "\d+" 
    End With 

    For Each ws In Worksheets 
    If ws.Name <> "DATA" Then 
     For Each c In ws.Range("B2:M13") 
     replace_with = CLng(Intersect(ws.Columns("N"), ws.Rows(c.Row)).Value) 
     c.Formula = objRegex.Replace(c.Formula, replace_with) 
     Next 
    End If 
    Next 

    'Application.EnableEvents = True 
    'Application.ScreenUpdating = True 
    'Application.DisplayStatusBar = True 
    'Application.Calculation = xlCalculationAutomatic 
End Sub 

Если код работает, как задумано, удалите апостроф перед Application -calls, для того, чтобы сделать код запуска немного быстрее.

+0

Лучше сейчас? @TedBarberJr – eirikdaude

+0

Благодарим вас за помощь eirikdaude. Этот код изменяет формулы на различных листах мест, что идеально. Он также изменил данные на рабочем листе DATA, но я повторно разместил эти данные. Я искренне ценю вашу помощь в этом. Кроме того, я просмотрю некоторую информацию, чтобы лучше понять, что делает каждая строка этого кода. Еще раз спасибо! –

+0

ДА! Мне действительно нужно изучить VB. Вы спасли мне часы работы. Еще раз спасибо. Я искренне ценю помощь. –

0

Вы всегда можете использовать что-то вроде:

If IsEmpty(Worksheets("DATA").Cells(2, 4)) And _ 
    IsError(Worksheets("DATA").Cells(2, 5).Value/Worksheets("DATA").Cells(2, 4).Value) Then 
    ActiveCell = "NA" 
Else 
    ActiveCell = Worksheets("DATA").Cells(2, 5).Value/Worksheets("DATA").Cells(2, 4).Value 
End If 

Какая формула у вас есть пла nslated к коду VBA.

Однако вы должны добавить обработчики ошибок и другие материалы в соответствии с вашими входными данными.

+0

Разве это не то, что он уже имеет в своей формуле? : P – eirikdaude

+0

Да, только это :) –

+0

Опять же, простите меня, если мой оригинальный пост не был ясен. Я четко описал, что я пытаюсь сделать? –

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