Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос: Найти данные и отредактировать соседние ячейки - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 212»
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос: Найти данные и отредактировать соседние ячейки (Макросы/Sub)
Макрос: Найти данные и отредактировать соседние ячейки
Yar4i4 Дата: Четверг, 11.02.2016, 09:20 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Приветствую!
Нужен макрос позволяющий найти текст "Электроды" в Excel и
1. если данные в ячейке справа ="т", то данные во второй ячейке справа от "электроды" отредактировать округлив до целого и умножив на 1000 т.е. не "0,00374", а "4". (D 22)
2. если данные в ячейке справа ="кг", то данные во второй ячейке справа от "электроды" отредактировать округлив до целого т.е. не "6,956", а "7". (D 23)
К сообщению приложен файл: 3422547.jpg(58Kb) · 8023850.xlsx(9Kb)


Сообщение отредактировал Yar4i4 - Четверг, 11.02.2016, 12:31
 
Ответить
СообщениеПриветствую!
Нужен макрос позволяющий найти текст "Электроды" в Excel и
1. если данные в ячейке справа ="т", то данные во второй ячейке справа от "электроды" отредактировать округлив до целого и умножив на 1000 т.е. не "0,00374", а "4". (D 22)
2. если данные в ячейке справа ="кг", то данные во второй ячейке справа от "электроды" отредактировать округлив до целого т.е. не "6,956", а "7". (D 23)

Автор - Yar4i4
Дата добавления - 11.02.2016 в 09:20
китин Дата: Четверг, 11.02.2016, 09:41 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3413
Репутация: 543 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
ну тут походу можно и формулами, но без файла по картинке как то не комильфо :p


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
Сообщениену тут походу можно и формулами, но без файла по картинке как то не комильфо :p

Автор - китин
Дата добавления - 11.02.2016 в 09:41
ShAM Дата: Четверг, 11.02.2016, 09:42 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1233
Репутация: 209 ±
Замечаний: 0% ±

Excel 2010
округлив до целого и умножив на 1000 т.е. не "0,00374", а "4"
Неа. Получите 0, а не 4. И прикладывать нужно не картинку а файл. Ознакомьтесь с Правилами форума.
 
Ответить
Сообщение
округлив до целого и умножив на 1000 т.е. не "0,00374", а "4"
Неа. Получите 0, а не 4. И прикладывать нужно не картинку а файл. Ознакомьтесь с Правилами форума.

Автор - ShAM
Дата добавления - 11.02.2016 в 09:42
Roman777 Дата: Четверг, 11.02.2016, 09:52 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 701
Репутация: 75 ±
Замечаний: 20% ±

Excel 2007, Excel 2013
Yar4i4, выделяете ячейки в столбике, в котором у Вас материалы и выполняете макрос
[vba]
Код
Sub Red()
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
    If rng.Offset(, 1) = "т" Then
       rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
    Else
       If rng.Offset(, 1) = "кг" Then
          rng.Offset(, 2) = Round(rng.Offset(, 2))
       End If
    End If
End If
Next rng
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеYar4i4, выделяете ячейки в столбике, в котором у Вас материалы и выполняете макрос
[vba]
Код
Sub Red()
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
    If rng.Offset(, 1) = "т" Then
       rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
    Else
       If rng.Offset(, 1) = "кг" Then
          rng.Offset(, 2) = Round(rng.Offset(, 2))
       End If
    End If
End If
Next rng
End Sub
[/vba]

Автор - Roman777
Дата добавления - 11.02.2016 в 09:52
Roman777 Дата: Четверг, 11.02.2016, 09:53 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 701
Репутация: 75 ±
Замечаний: 20% ±

Excel 2007, Excel 2013
ShAM, 3,7 округляя до единиц получим 4=) Вам, видимо, привидился лишний нолик, но тут всё верно
1000 т.е. не "0,00374", а "4"
...


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Четверг, 11.02.2016, 09:54
 
Ответить
СообщениеShAM, 3,7 округляя до единиц получим 4=) Вам, видимо, привидился лишний нолик, но тут всё верно
1000 т.е. не "0,00374", а "4"
...

Автор - Roman777
Дата добавления - 11.02.2016 в 09:53
_Boroda_ Дата: Четверг, 11.02.2016, 10:04 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
3,7 округляя до единиц получим 4=)

Не согласен
Цитата полностью
данные во второй ячейке справа от "электроды" отредактировать округлив до целого и умножив на 1000 т.е. не "0,00374", а "4".

выполняем последовательно - округляем 0,00374 до целого, получаем 0, умножаем на 1000, получаем 0.
Конечно, чисто по-человечески понятно, что имелось в виду наоборот - сначала умножаем, потом округляем.

Мой вариант макроса
[vba]
Код
Sub tt()
    r1_ = Range("C" & Rows.Count).End(xlUp).Row
    For i = 20 To r1_
        If Range("C" & i) = "т" Then
            Range("D" & i) = Round(Range("D" & i) * 1000, 0)
        ElseIf Range("C" & i) = "кг" Then
            Range("D" & i) = Round(Range("D" & i), 0)
        End If
    Next i
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
3,7 округляя до единиц получим 4=)

Не согласен
Цитата полностью
данные во второй ячейке справа от "электроды" отредактировать округлив до целого и умножив на 1000 т.е. не "0,00374", а "4".

выполняем последовательно - округляем 0,00374 до целого, получаем 0, умножаем на 1000, получаем 0.
Конечно, чисто по-человечески понятно, что имелось в виду наоборот - сначала умножаем, потом округляем.

Мой вариант макроса
[vba]
Код
Sub tt()
    r1_ = Range("C" & Rows.Count).End(xlUp).Row
    For i = 20 To r1_
        If Range("C" & i) = "т" Then
            Range("D" & i) = Round(Range("D" & i) * 1000, 0)
        ElseIf Range("C" & i) = "кг" Then
            Range("D" & i) = Round(Range("D" & i), 0)
        End If
    Next i
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 11.02.2016 в 10:04
Roman777 Дата: Четверг, 11.02.2016, 11:46 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 701
Репутация: 75 ±
Замечаний: 20% ±

Excel 2007, Excel 2013
_Boroda_, точно
выполняем последовательно - округляем 0,00374 до целого, получаем 0, умножаем на 1000, получаем 0
, голова перекручивает на свой лад... моя невнимательность, ShAM, Вы были правы)))


Много чего не знаю!!!!
 
Ответить
Сообщение_Boroda_, точно
выполняем последовательно - округляем 0,00374 до целого, получаем 0, умножаем на 1000, получаем 0
, голова перекручивает на свой лад... моя невнимательность, ShAM, Вы были правы)))

Автор - Roman777
Дата добавления - 11.02.2016 в 11:46
Yar4i4 Дата: Четверг, 11.02.2016, 12:27 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Спасибо за отзывчивость.
Вечером испытаю.

Файл в Экселе не прикладывал, ибо важен алгоритм.
Но Правила превыше всего, и я согласен с этим.

(не ожидал, что это решаемо - год мучился сам)
К сообщению приложен файл: 5800465.xlsx(9Kb)
 
Ответить
СообщениеСпасибо за отзывчивость.
Вечером испытаю.

Файл в Экселе не прикладывал, ибо важен алгоритм.
Но Правила превыше всего, и я согласен с этим.

(не ожидал, что это решаемо - год мучился сам)

Автор - Yar4i4
Дата добавления - 11.02.2016 в 12:27
Yar4i4 Дата: Четверг, 11.02.2016, 13:41 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Мой вариант макроса

Спасибо.
Но я не вижу в макросе поиска "электроды".
И последующего перехода к соседним ячейкам.
У меня беда на переход от найденных "элекртодов" к соседним ячейкам
 
Ответить
Сообщение
Мой вариант макроса

Спасибо.
Но я не вижу в макросе поиска "электроды".
И последующего перехода к соседним ячейкам.
У меня беда на переход от найденных "элекртодов" к соседним ячейкам

Автор - Yar4i4
Дата добавления - 11.02.2016 в 13:41
Yar4i4 Дата: Четверг, 11.02.2016, 13:42 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
выделяете ячейки в столбике, в котором у Вас материалы и выполняете макрос

Спасибо. Попробую.
[moder]Не нужно цитировать посты целиком - это нарушение Правил форума!
Удалила лишнее.[/moder]


Сообщение отредактировал Manyasha - Четверг, 11.02.2016, 13:44
 
Ответить
Сообщение
выделяете ячейки в столбике, в котором у Вас материалы и выполняете макрос

Спасибо. Попробую.
[moder]Не нужно цитировать посты целиком - это нарушение Правил форума!
Удалила лишнее.[/moder]

Автор - Yar4i4
Дата добавления - 11.02.2016 в 13:42
Yar4i4 Дата: Пятница, 12.02.2016, 07:05 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Доброе утро господа и дамы!
Ещё один связанный вопрос по поиску ячеек с текстом и редактированием соседних ячеек:
Всё тоже самое, но надо найти не конкретный текст "Элекстроды", а любой текст в ячейке (ячейку занятую любым содержанием) и эта ячейка самая нижняя в документе (листе).
На примере:
Всё тот же файл Excel с материалами (вложил), но надо найти самую нижнюю ячейку (D7) занятую любым текстом. И далее проследовать на три ячейки вниз (D10) и до упора влево (A10) и внести текст "Исполнитель____" (красным выделил в файле.
... т.е. высота документа с материалами меняется (в зависимости от количества материалов), а мне надо вносить стандартную "бороду" после самой нижней строки:


К сообщению приложен файл: 7372387.xlsx(10Kb)
 
Ответить
СообщениеДоброе утро господа и дамы!
Ещё один связанный вопрос по поиску ячеек с текстом и редактированием соседних ячеек:
Всё тоже самое, но надо найти не конкретный текст "Элекстроды", а любой текст в ячейке (ячейку занятую любым содержанием) и эта ячейка самая нижняя в документе (листе).
На примере:
Всё тот же файл Excel с материалами (вложил), но надо найти самую нижнюю ячейку (D7) занятую любым текстом. И далее проследовать на три ячейки вниз (D10) и до упора влево (A10) и внести текст "Исполнитель____" (красным выделил в файле.
... т.е. высота документа с материалами меняется (в зависимости от количества материалов), а мне надо вносить стандартную "бороду" после самой нижней строки:



Автор - Yar4i4
Дата добавления - 12.02.2016 в 07:05
китин Дата: Пятница, 12.02.2016, 07:51 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3413
Репутация: 543 ±
Замечаний: 0% ±

Excel 2007;Excel 2010
Ща придет злобный :D модератор и спросит:а какое отношение имеет данный вопрос к теме "Макрос: Найти данные и отредактировать соседние ячейки"


Не судите строго:я пытаюсь научиться
ЯД 41001877306852/WM R249698041931; Z239672726538
 
Ответить
СообщениеЩа придет злобный :D модератор и спросит:а какое отношение имеет данный вопрос к теме "Макрос: Найти данные и отредактировать соседние ячейки"

Автор - китин
Дата добавления - 12.02.2016 в 07:51
_Boroda_ Дата: Пятница, 12.02.2016, 07:53 | Сообщение № 13
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
я не вижу в макросе поиска "электроды"

А он и не нужен. Ищутся килограммы и тонны.
И последующего перехода к соседним ячейкам.

А он и не нужен. В макросе прописан столбец D.
ВЫ бы попробовали сначала макрос использовать, а потом писали.
У меня беда на переход от найденных "элекртодов" к соседним ячейкам
Offset, например. Или определяем номер столбца (.Column) и прибавляем 1. Или еще что-нибудь придумать можно. Но зачем, если у Вас четко прописано, что менять нужно в столбце D?
Правила превыше всего, и я согласен с этим.
Согласен, но не прочитал. Ибо сразу же
Ещё один связанный вопрос
. Это не связанный вопрос, это другой вопрос.
Тема закрыта, Вам предупредительное замечание.
[moder]По просьбе ТС тема снова открыта


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Пятница, 12.02.2016, 16:06
 
Ответить
Сообщение
я не вижу в макросе поиска "электроды"

А он и не нужен. Ищутся килограммы и тонны.
И последующего перехода к соседним ячейкам.

А он и не нужен. В макросе прописан столбец D.
ВЫ бы попробовали сначала макрос использовать, а потом писали.
У меня беда на переход от найденных "элекртодов" к соседним ячейкам
Offset, например. Или определяем номер столбца (.Column) и прибавляем 1. Или еще что-нибудь придумать можно. Но зачем, если у Вас четко прописано, что менять нужно в столбце D?
Правила превыше всего, и я согласен с этим.
Согласен, но не прочитал. Ибо сразу же
Ещё один связанный вопрос
. Это не связанный вопрос, это другой вопрос.
Тема закрыта, Вам предупредительное замечание.
[moder]По просьбе ТС тема снова открыта

Автор - _Boroda_
Дата добавления - 12.02.2016 в 07:53
Yar4i4 Дата: Пятница, 12.02.2016, 16:31 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Спасибо.
и выполняете макрос

макрос выполнил, но обнаружил, что при умножении на 1000 меняется число, а единицы измерения остаются прежние ("тонны").
Это моё упущение - я не верно изложил суть своей проблемы, хотел облегчить Вам задачу, думал сам смогу отредактировать. Но не смог поменять "т" на "кг" в первой справа ячейке от "Электроды" в макросе.
 
Ответить
СообщениеСпасибо.
и выполняете макрос

макрос выполнил, но обнаружил, что при умножении на 1000 меняется число, а единицы измерения остаются прежние ("тонны").
Это моё упущение - я не верно изложил суть своей проблемы, хотел облегчить Вам задачу, думал сам смогу отредактировать. Но не смог поменять "т" на "кг" в первой справа ячейке от "Электроды" в макросе.

Автор - Yar4i4
Дата добавления - 12.02.2016 в 16:31
_Boroda_ Дата: Пятница, 12.02.2016, 16:34 | Сообщение № 15
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Выделите столбец - Контрл h - и меняйте.

Или добавьте одну строку в марос
[vba]
Код
Sub tt()
    r1_ = Range("C" & Rows.Count).End(xlUp).Row
    For i = 20 To r1_
        If Range("C" & i) = "т" Then
            Range("D" & i) = Round(Range("D" & i) * 1000, 0)
             Range("C" & i) = "кг"
        ElseIf Range("C" & i) = "кг" Then
            Range("D" & i) = Round(Range("D" & i), 0)
        End If
    Next i
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВыделите столбец - Контрл h - и меняйте.

Или добавьте одну строку в марос
[vba]
Код
Sub tt()
    r1_ = Range("C" & Rows.Count).End(xlUp).Row
    For i = 20 To r1_
        If Range("C" & i) = "т" Then
            Range("D" & i) = Round(Range("D" & i) * 1000, 0)
             Range("C" & i) = "кг"
        ElseIf Range("C" & i) = "кг" Then
            Range("D" & i) = Round(Range("D" & i), 0)
        End If
    Next i
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.02.2016 в 16:34
Yar4i4 Дата: Пятница, 12.02.2016, 16:51 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Выделите столбец - Контрл h - и меняйте

это приведет к смене всех "т" на "кг", но у меня ряд материала, который нужно считать в "тоннах"
Например металлоконструкции мне нужно округлить до тысячных и оставить в тоннах, битумы также идут в тоннах округлённых до тысячных, Сваи стальные в тоннах округлённых до тысячных и другой материал.
т.е. Металлоконструкция т 5,555
Сваи т 2,222

А Электроды, Пропан, Эмаль, Уайт-спирит и ряд других материалов идут в килограммах. (должны идти в кг по правилам оформления)
т.е. Пропан кг 5
Уайт-спирит кг 2


Сообщение отредактировал Yar4i4 - Пятница, 12.02.2016, 16:52
 
Ответить
Сообщение
Выделите столбец - Контрл h - и меняйте

это приведет к смене всех "т" на "кг", но у меня ряд материала, который нужно считать в "тоннах"
Например металлоконструкции мне нужно округлить до тысячных и оставить в тоннах, битумы также идут в тоннах округлённых до тысячных, Сваи стальные в тоннах округлённых до тысячных и другой материал.
т.е. Металлоконструкция т 5,555
Сваи т 2,222

А Электроды, Пропан, Эмаль, Уайт-спирит и ряд других материалов идут в килограммах. (должны идти в кг по правилам оформления)
т.е. Пропан кг 5
Уайт-спирит кг 2

Автор - Yar4i4
Дата добавления - 12.02.2016 в 16:51
Roman777 Дата: Пятница, 12.02.2016, 17:44 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 701
Репутация: 75 ±
Замечаний: 20% ±

Excel 2007, Excel 2013
при умножении на 1000 меняется число, а единицы измерения остаются прежние ("тонны")

поправил =)
[vba]
Код
Sub Red()
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
    If rng.Offset(, 1) = "т" Then
    rng.Offset(, 1)="кг"
    rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
    Else
    If rng.Offset(, 1) = "кг" Then
        rng.Offset(, 2) = Round(rng.Offset(, 2))
    End If
    End If
End If
Next rng
End Sub
[/vba]


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 12.02.2016, 17:45
 
Ответить
Сообщение
при умножении на 1000 меняется число, а единицы измерения остаются прежние ("тонны")

поправил =)
[vba]
Код
Sub Red()
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
    If rng.Offset(, 1) = "т" Then
    rng.Offset(, 1)="кг"
    rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
    Else
    If rng.Offset(, 1) = "кг" Then
        rng.Offset(, 2) = Round(rng.Offset(, 2))
    End If
    End If
End If
Next rng
End Sub
[/vba]

Автор - Roman777
Дата добавления - 12.02.2016 в 17:44
Yar4i4 Дата: Суббота, 13.02.2016, 06:55 | Сообщение № 18
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
поправил

С электродами работает, но я не остановился и попробовал продолжить макрос с "Уайт-спирит". И он тоже работает, но поскольку я пришел к этому макросу методом (тыка) удаления строк на которые ругалась система, то не уверен, что всё верно сделал:
[vba]
Код
' выделить строку с материалами
Columns("B:B").Select

' электроды из тонн в кг
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng

' Уайт-спирит из тонн в кг
For Each rng In Selection
If rng = "Уайт-спирит" Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng
[/vba]
Проверьте пожалуйста. Буду добавлять цепочку таких материалов.
Спасибо.

Столкнулся с проблемой. Макрос не работает, если в ячейке находятся не "Электроды", а "Электроды диаметром 4 мм Э42" или "Электроды диаметром 5 мм Э42А".
Я конечно привожу все типичные марки электродов в виду "Электроды" (а потом запускаю Ваш макрос), но есть вероятность человеческого фактора (лишний пробел в наименовании материала).


Сообщение отредактировал Manyasha - Понедельник, 15.02.2016, 17:03
 
Ответить
Сообщение
поправил

С электродами работает, но я не остановился и попробовал продолжить макрос с "Уайт-спирит". И он тоже работает, но поскольку я пришел к этому макросу методом (тыка) удаления строк на которые ругалась система, то не уверен, что всё верно сделал:
[vba]
Код
' выделить строку с материалами
Columns("B:B").Select

' электроды из тонн в кг
Dim rng As Range
For Each rng In Selection
If rng = "Электроды" Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng

' Уайт-спирит из тонн в кг
For Each rng In Selection
If rng = "Уайт-спирит" Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng
[/vba]
Проверьте пожалуйста. Буду добавлять цепочку таких материалов.
Спасибо.

Столкнулся с проблемой. Макрос не работает, если в ячейке находятся не "Электроды", а "Электроды диаметром 4 мм Э42" или "Электроды диаметром 5 мм Э42А".
Я конечно привожу все типичные марки электродов в виду "Электроды" (а потом запускаю Ваш макрос), но есть вероятность человеческого фактора (лишний пробел в наименовании материала).

Автор - Yar4i4
Дата добавления - 13.02.2016 в 06:55
Roman777 Дата: Суббота, 13.02.2016, 10:10 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 701
Репутация: 75 ±
Замечаний: 20% ±

Excel 2007, Excel 2013
Yar4i4, У Вас вроде бы всё правильно (работает же?).
Ну а чтобы заменять если в ячейке не находится "Электроды", а строка содержит "Электроды", как составляющие, да и причём, если хотите, чтобы не зависело от регистра букв (заглавные или строчные) то можно так:
[vba]
Код
Columns("B:B").Select

' электроды из тонн в кг
Dim rng As Range
For Each rng In Selection
If instr(1, uCase(rng), uCase("Электроды")>0 Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng
[/vba]
Но сразу Вас предупрежу, в столбце "B:B" могут быть строки, где этого нет необходимости делать, но есть строки содержащие "электроды", может возникнуть ошибка (некорректная обработка)... тут внимательно надо...


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Суббота, 13.02.2016, 10:11
 
Ответить
СообщениеYar4i4, У Вас вроде бы всё правильно (работает же?).
Ну а чтобы заменять если в ячейке не находится "Электроды", а строка содержит "Электроды", как составляющие, да и причём, если хотите, чтобы не зависело от регистра букв (заглавные или строчные) то можно так:
[vba]
Код
Columns("B:B").Select

' электроды из тонн в кг
Dim rng As Range
For Each rng In Selection
If instr(1, uCase(rng), uCase("Электроды")>0 Then
If rng.Offset(, 1) = "т" Then
rng.Offset(, 1) = "кг"
rng.Offset(, 2) = Round(rng.Offset(, 2) * 1000)
Else
If rng.Offset(, 1) = "кг" Then
rng.Offset(, 2) = Round(rng.Offset(, 2))
End If
End If
End If
Next rng
[/vba]
Но сразу Вас предупрежу, в столбце "B:B" могут быть строки, где этого нет необходимости делать, но есть строки содержащие "электроды", может возникнуть ошибка (некорректная обработка)... тут внимательно надо...

Автор - Roman777
Дата добавления - 13.02.2016 в 10:10
Yar4i4 Дата: Понедельник, 15.02.2016, 06:51 | Сообщение № 20
Группа: Пользователи
Ранг: Участник
Сообщений: 55
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
то можно так:


Красным подсвечивает строку макроса If instr(1, uCase(rng), uCase("Электроды")>0 Then
и при воспроизведении макроса выскакивает "Can't execute code in break mode"
Возможно в макросе идёт ссылка на наименование листа.

Я немного не понял как будет работать макрос в случае с "раствор цементный" и "растворитель". Если я пропишу в макросе "раствор", то макрос и на "растворитель" сработает, однако раствор идёт в метрах кубических (м3), а растворитель в тоннах или килограммах. Но мы же учитываем правую ячейку и макрос не перейдёт к условию замены (думается так).


Сообщение отредактировал Yar4i4 - Понедельник, 15.02.2016, 06:54
 
Ответить
Сообщение
то можно так:


Красным подсвечивает строку макроса If instr(1, uCase(rng), uCase("Электроды")>0 Then
и при воспроизведении макроса выскакивает "Can't execute code in break mode"
Возможно в макросе идёт ссылка на наименование листа.

Я немного не понял как будет работать макрос в случае с "раствор цементный" и "растворитель". Если я пропишу в макросе "раствор", то макрос и на "растворитель" сработает, однако раствор идёт в метрах кубических (м3), а растворитель в тоннах или килограммах. Но мы же учитываем правую ячейку и макрос не перейдёт к условию замены (думается так).

Автор - Yar4i4
Дата добавления - 15.02.2016 в 06:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос: Найти данные и отредактировать соседние ячейки (Макросы/Sub)
Страница 1 из 212»
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!