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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос: Найти данные и отредактировать соседние ячейки (Макросы/Sub)
Макрос: Найти данные и отредактировать соседние ячейки
Roman777 Дата: Понедельник, 15.02.2016, 09:46 | Сообщение № 21
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Yar4i4, скобку забыл:
[vba]
Код
If instr(1, uCase(rng), uCase("Электроды"))>0 Then
[/vba]


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

Сообщение отредактировал Roman777 - Понедельник, 15.02.2016, 09:46
 
Ответить
СообщениеYar4i4, скобку забыл:
[vba]
Код
If instr(1, uCase(rng), uCase("Электроды"))>0 Then
[/vba]

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

Excel 2013
скобку

Спасибо. Работает.

Увлёкся. Нарезаю теперь:
[vba]
Код
' выделить строку с ед. изм.
Columns("C:C").Select

' округлить м3 до 2 знаков после запятой
For Each rng In Selection
If rng = "м3" Then
rng.Offset(, 1) = Round(rng.Offset(, 1), 2)
End If
Next rng
[/vba]
[moder]Оформляйте код кнопкой #, а не спойлером.
Поправила.[/moder]


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

Спасибо. Работает.

Увлёкся. Нарезаю теперь:
[vba]
Код
' выделить строку с ед. изм.
Columns("C:C").Select

' округлить м3 до 2 знаков после запятой
For Each rng In Selection
If rng = "м3" Then
rng.Offset(, 1) = Round(rng.Offset(, 1), 2)
End If
Next rng
[/vba]
[moder]Оформляйте код кнопкой #, а не спойлером.
Поправила.[/moder]

Автор - Yar4i4
Дата добавления - 15.02.2016 в 16:52
Yar4i4 Дата: Четверг, 17.03.2016, 15:22 | Сообщение № 23
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Такой же код, но с небольшой поправочкой:
Хочу чтобы, если в выделение попадут "М/к, сталь или труб", и если ячейка справа "м", то вторая ячейка справа округлялась до трёх знаков после запятой.
Иначе, все остальные варианты текста в выделенных ячейках, если ячейка справа "м", то вторая ячейка справа округлялась до одного знака после запятой.
[vba]
Код
' М/к, сталь, труб в метрах до 3 знаков, остальные "М" до 1 знака
               For Each Rng In Selection
               If InStr(1, UCase(Rng), UCase("М/к")) > 0 Or InStr(1, UCase(Rng), UCase("сталь")) > 0 Or InStr(1, UCase(Rng), UCase("труб")) > 0 Then
               If Rng.Offset(, 1) = "м" Then
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3)
                Else
      '   If InStr(1, UCase(Rng), UCase("...  здесь беда неподъёмная  (как указать любой текст?  "*")
                If Rng.Offset(, 1) = "м" Then
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
               End If
               End If
               End If
               Next Rng
               End Sub
[/vba]
К сообщению приложен файл: 2233--3-.xlsx (12.0 Kb)


Сообщение отредактировал Yar4i4 - Четверг, 17.03.2016, 15:23
 
Ответить
СообщениеТакой же код, но с небольшой поправочкой:
Хочу чтобы, если в выделение попадут "М/к, сталь или труб", и если ячейка справа "м", то вторая ячейка справа округлялась до трёх знаков после запятой.
Иначе, все остальные варианты текста в выделенных ячейках, если ячейка справа "м", то вторая ячейка справа округлялась до одного знака после запятой.
[vba]
Код
' М/к, сталь, труб в метрах до 3 знаков, остальные "М" до 1 знака
               For Each Rng In Selection
               If InStr(1, UCase(Rng), UCase("М/к")) > 0 Or InStr(1, UCase(Rng), UCase("сталь")) > 0 Or InStr(1, UCase(Rng), UCase("труб")) > 0 Then
               If Rng.Offset(, 1) = "м" Then
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3)
                Else
      '   If InStr(1, UCase(Rng), UCase("...  здесь беда неподъёмная  (как указать любой текст?  "*")
                If Rng.Offset(, 1) = "м" Then
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
               End If
               End If
               End If
               Next Rng
               End Sub
[/vba]

Автор - Yar4i4
Дата добавления - 17.03.2016 в 15:22
RAN Дата: Четверг, 17.03.2016, 19:21 | Сообщение № 24
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub q()
    Dim Rng As Range
    For Each Rng In Selection
        If Rng.Offset(, 1) = "м" Then
            Select Case True
            Case LCase(Rng.Value) Like "*м/к*", LCase(Rng.Value) Like "*сталь*", LCase(Rng.Value) Like "*труб*"
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3)
            Case Else
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
            End Select
        Else
            Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
        End If
    Next
End Sub
[/vba]

[offtop]Электроды стальные видел, но чтобы толуол! :'(
[/offtop]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Sub q()
    Dim Rng As Range
    For Each Rng In Selection
        If Rng.Offset(, 1) = "м" Then
            Select Case True
            Case LCase(Rng.Value) Like "*м/к*", LCase(Rng.Value) Like "*сталь*", LCase(Rng.Value) Like "*труб*"
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 3)
            Case Else
                Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
            End Select
        Else
            Rng.Offset(, 2) = Round(Rng.Offset(, 2), 1)
        End If
    Next
End Sub
[/vba]

[offtop]Электроды стальные видел, но чтобы толуол! :'(
[/offtop]

Автор - RAN
Дата добавления - 17.03.2016 в 19:21
Yar4i Дата: Суббота, 09.07.2016, 07:40 | Сообщение № 25
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Приветствую.
С утра не могу собраться с мыслями и найти ответ почему этот код
[vba]
Код
For Each rng In Selection
       If rng = "шт" Then
          rng.Offset(, 1) = Round(rng.Offset(, 1))
     End If
      Next rng
[/vba]
округляет 392,5 до 392 (это же не арифметично как-то)

Разобрался:
Код чётные 4,5 и 6,5 и 8,5 округляет в меньшую сторону, а
не чётные 3,5 и 5,5 и 7,5 округляет в большую (точнее правильную) сторону. Я читал, что это банковское округление и сделано оно для нивелирования погрешности. Но мне по душе простое арифметическое округление до целого числа.
К сообщению приложен файл: 1-5.xlsx (9.6 Kb)


Сообщение отредактировал Yar4i - Суббота, 09.07.2016, 09:29
 
Ответить
СообщениеПриветствую.
С утра не могу собраться с мыслями и найти ответ почему этот код
[vba]
Код
For Each rng In Selection
       If rng = "шт" Then
          rng.Offset(, 1) = Round(rng.Offset(, 1))
     End If
      Next rng
[/vba]
округляет 392,5 до 392 (это же не арифметично как-то)

Разобрался:
Код чётные 4,5 и 6,5 и 8,5 округляет в меньшую сторону, а
не чётные 3,5 и 5,5 и 7,5 округляет в большую (точнее правильную) сторону. Я читал, что это банковское округление и сделано оно для нивелирования погрешности. Но мне по душе простое арифметическое округление до целого числа.

Автор - Yar4i
Дата добавления - 09.07.2016 в 07:40
RAN Дата: Суббота, 09.07.2016, 11:00 | Сообщение № 26
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Есть такая беда. Round VBA использует "банковское" округление. Для обычного округления используйте округление Excel.
[vba]
Код
Application.Round (rng.Offset(, 1))
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЕсть такая беда. Round VBA использует "банковское" округление. Для обычного округления используйте округление Excel.
[vba]
Код
Application.Round (rng.Offset(, 1))
[/vba]

Автор - RAN
Дата добавления - 09.07.2016 в 11:00
Yar4i Дата: Суббота, 09.07.2016, 13:46 | Сообщение № 27
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub Round2()
Range("c1:c12").Select
   For Each rng In Selection
       If rng = "шт" Then
         rng.Offset(, 1) =Application.Round (rng.Offset(, 1))   
     End If
Next rng
End Sub
[/vba]
Выдает: run-time error 1004 неверное число аргументов и подкрашивает жёлтым эту строку [vba]
Код
rng.Offset(, 1) =Application.Round (rng.Offset(, 1))
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub Round2()
Range("c1:c12").Select
   For Each rng In Selection
       If rng = "шт" Then
         rng.Offset(, 1) =Application.Round (rng.Offset(, 1))   
     End If
Next rng
End Sub
[/vba]
Выдает: run-time error 1004 неверное число аргументов и подкрашивает жёлтым эту строку [vba]
Код
rng.Offset(, 1) =Application.Round (rng.Offset(, 1))
[/vba]

Автор - Yar4i
Дата добавления - 09.07.2016 в 13:46
Manyasha Дата: Суббота, 09.07.2016, 14:22 | Сообщение № 28
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Yar4i, Вы не указали количество разрядов, до которых округлять.
Если до целых, то вот так:
[vba]
Код
Rng.Offset(, 1) = Application.Round(Rng.Offset(, 1), 0)
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеYar4i, Вы не указали количество разрядов, до которых округлять.
Если до целых, то вот так:
[vba]
Код
Rng.Offset(, 1) = Application.Round(Rng.Offset(, 1), 0)
[/vba]

Автор - Manyasha
Дата добавления - 09.07.2016 в 14:22
Yar4i Дата: Суббота, 09.07.2016, 14:33 | Сообщение № 29
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
количество разрядов

чувствовал))) что не хватает аргумента количества знаков после запятой, но не ожидал что это ноль. Не встречал такого ранее.
Спасибо.
Round VBA использует

Спасибо.
 
Ответить
Сообщение
количество разрядов

чувствовал))) что не хватает аргумента количества знаков после запятой, но не ожидал что это ноль. Не встречал такого ранее.
Спасибо.
Round VBA использует

Спасибо.

Автор - Yar4i
Дата добавления - 09.07.2016 в 14:33
Yar4i Дата: Вторник, 10.01.2017, 13:00 | Сообщение № 30
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 137
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Решил...
К сообщению приложен файл: 3955542.xlsx (32.0 Kb)


Сообщение отредактировал Yar4i - Вторник, 10.01.2017, 14:55
 
Ответить
СообщениеДобрый день.
Решил...

Автор - Yar4i
Дата добавления - 10.01.2017 в 13:00
Yar4i4 Дата: Пятница, 14.04.2017, 12:29 | Сообщение № 31
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Просматривал старые записи и не смог понять, что я тогда "решил" (приложил неверный файл). Теперь мне он понадобился и пришлось опять тестировать Round.
Теперь-то точно решил.
Спасибо.
К сообщению приложен файл: 3780797.xlsm (21.6 Kb)
 
Ответить
СообщениеПросматривал старые записи и не смог понять, что я тогда "решил" (приложил неверный файл). Теперь мне он понадобился и пришлось опять тестировать Round.
Теперь-то точно решил.
Спасибо.

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

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