Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2021, 22:07   #1
RoDaMa
Пользователь
 
Регистрация: 16.03.2020
Сообщений: 24
Печаль Проблема в формуле ЕСЛИ

День добрый

есть задача скопировать макросом с листа на лист данные
строки максимум 12, но файлов таких за день могут быт 30-40
хочу выделить время для чая

но там копирование с условием, 1 две цифры нужно заменить на анг буквы, удалить все лишнее слово после 5 цифры и добавить с условием (если в ячейке H6 последняя цифра 1 то добавить 11)
я сделал так:
так как я знаю что данных не будет больше 12 строк спустился вниз, и здесь вычеслю данные, потом удалю макросом
1 заменил на буквы цифры =ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(П ОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОД СТАВИТЬ(ПОДСТАВИТЬ(sheetc3!D6,"62", "GC"),"61","GB"), "71","HB"), "72","HC"), "51", "FB"), "52", "FC"), "81", "IB"), "82", "IC")
2 удалил лишнее слова
=ЗАМЕНИТЬ(D838, 6, 20, "")
3 определил последную цифру в ячейке H6
=ПСТР(H6, 5, 1)
4 так как следующая формула понимает только цифру, скопировал только значение
5 =ЕСЛИ(E838=1,F838&"11", ЕСЛИ(E838=2,F838&21, ЕСЛИ(E838=3,F838&31, ЕСЛИ(E838=6,F838&12, ЕСЛИ(E838=7,F838&22, ЕСЛИ(E838=8,F838&32))))))
но эта формула вместо GC19821 выводить значение ЛОЖЬ

если самому писать цифру формула корректно работает.

Спасибо, буду рад к любой помощи, ссылки, гиперссылки

во вложении файл с которым я мудрил
Вложения
Тип файла: xlsx пример.xlsx (15.5 Кб, 2 просмотров)
RoDaMa вне форума Ответить с цитированием
Старый 24.03.2021, 09:00   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Вы описали как решали проблему. Самого же описания проблемы не видно или оно не очевидное для меня.





вариант макроса обработки. На вход подаются W и Pkey
Код:
Option Explicit


' sText - значение W
' Pkey - значение P Key
Function DoSomething(sText As String, PKey As String)
    Dim Cross(14, 1) As String
    Dim sNewText As String
    Dim i As Integer
    Dim j As Integer
    Cross(0, 0) = "0"
    Cross(0, 1) = "A"
    Cross(1, 0) = "1"
    Cross(1, 1) = "B"
    Cross(2, 0) = "2"
    Cross(2, 1) = "C"
    Cross(3, 0) = "3"
    Cross(3, 1) = "D"
    Cross(4, 0) = "4"
    Cross(4, 1) = "E"
    Cross(5, 0) = "5"
    Cross(5, 1) = "F"
    Cross(6, 0) = "6"
    Cross(6, 1) = "G"
    Cross(7, 0) = "7"
    Cross(7, 1) = "H"
    Cross(8, 0) = "8"
    Cross(8, 1) = "I"
    Cross(9, 0) = "1"
    Cross(9, 1) = "11"
    Cross(10, 0) = "2"
    Cross(10, 1) = "21"
    Cross(11, 0) = "3"
    Cross(11, 1) = "31"
    Cross(12, 0) = "6"
    Cross(12, 1) = "12"
    Cross(13, 0) = "7"
    Cross(13, 1) = "22"
    Cross(14, 0) = "8"
    Cross(14, 1) = "32"
    sNewText = vbNullString
    For j = 1 To 2
        For i = 0 To 8
            If Cross(i, 0) = Mid(sText, j, 1) Then
                sNewText = sNewText & Cross(i, 1)
                Exit For
            End If
        Next i
    Next j
    sNewText = sNewText & Mid(sText, 3, 3)
    
    For i = 9 To 14
        If Cross(i, 0) = Right(Trim$(PKey), 1) Then
            sNewText = sNewText & Cross(i, 1)
        End If
    Next i
    DoSomething = sNewText
End Function

Sub RunMe()
    MsgBox "Ответом для 62198Yellow будет " & DoSomething("62198Yellow", "64431")
End Sub
Вложения
Тип файла: xls Копия пример.xls (77.0 Кб, 5 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 24.03.2021 в 09:33.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.03.2021, 09:36   #3
RoDaMa
Пользователь
 
Регистрация: 16.03.2020
Сообщений: 24
По умолчанию

День добрый
сделал так

Код:
Sheets("sheeti2 (2)").Select  'указал лист, так как если макрос запустит в другим листе выходит ошибка
    Range("$D$6").Select 'жестко указал ячейку
    ActiveCell.Value = "=DoSomething($D6, $H6)"
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("D6:D15") 'растянул формулу вниз до 15 ячейки
вроде заработал

Aleksandr H. Спасибо большое

Последний раз редактировалось RoDaMa; 25.03.2021 в 12:18.
RoDaMa вне форума Ответить с цитированием
Старый 25.03.2021, 13:28   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sheets("sheeti2 (2)").Select  'указал лист, так как если макрос запустит в другим листе выходит ошибка
    Range("$D$6").Select 'жестко указал ячейку
заменить на короче, не сработает?
Код:
Sheets("sheeti2 (2)").Range("$D$6").Select



Код:
Sheets("sheeti2 (2)").Select  'указал лист, так как если макрос запустит в другим листе выходит ошибка
    Range("$D$6").Select 'жестко указал ячейку
    ActiveCell.Value = "=DoSomething($D6, $H6)"
макрос установил курсор в ячейку D6 и в ней прописал формулу которая использует все ту же ячейку D6. Ну такооое.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 25.03.2021 в 13:30.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.03.2021, 18:16   #5
RoDaMa
Пользователь
 
Регистрация: 16.03.2020
Сообщений: 24
По умолчанию

то есть можно было так


Код:
Sheets("sheeti2 (2)").Select  'указал лист, так как если макрос запустит в другим листе выходит ошибка
    Range("$D$6").Value = "=DoSomething($D6, $H6)"
попробую
Код:
Sheets("sheeti2 (2)").Range("$D$6").Select
RoDaMa вне форума Ответить с цитированием
Старый 25.03.2021, 18:59   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

И для разнообразия, вдруг сработает
Цитата:
Сообщение от RoDaMa Посмотреть сообщение


Код:
Sheets("sheeti2 (2)").Range("$D$6").Value = "=DoSomething($D6, $H6)"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 31.03.2021, 21:55   #7
RoDaMa
Пользователь
 
Регистрация: 16.03.2020
Сообщений: 24
По умолчанию

При формуле
d6.value = 61168yellow
Код:
=если(левсимвол(d6, 1) = 6, 1952)
выводит сообщение ЛОЖ, так как символ обробатываеться как символ а не как цифра.
как преоброзовать в цифру
и выводил 1952?

без макроса сразу в формуле можно делать?
макрос
Код:
        Selection.NumberFormat = "General"
    Selection.Value = Selection.Valu
спасибо большое
RoDaMa вне форума Ответить с цитированием
Старый 31.03.2021, 21:57   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

"6"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.04.2021, 22:21   #9
RoDaMa
Пользователь
 
Регистрация: 16.03.2020
Сообщений: 24
По умолчанию

Доброго вечера
указание как символ "" не помогла
RoDaMa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вернуть диапазон в формуле "если" (тема простая, но нужна помощь) a18lex Microsoft Office Excel 4 22.09.2017 09:15
Текущее время в формуле с условием ЕСЛИ() paylevan Microsoft Office Excel 23 16.11.2013 04:15
Проблема с пониманием даты в формуле val67 Microsoft Office Excel 3 25.07.2013 22:31
Проблема с присваиванием в формуле motorway Microsoft Office Excel 7 23.07.2009 04:45
Сгенерировать рандомом последовательность, по заданной формуле, если 1ое число известно! Алексей_xXx Помощь студентам 2 24.05.2009 16:40