Функція Excel VBA для пошуку значення та формату


2

Мені потрібна спеціальна функція для пошуку як значення комірки, так і копіювання вихідного формату. У мене є список значень у двох стовпцях. Перший є цілими числами, а другий стовпець - відповідними текстовими значеннями. Наприклад:

AB
--- ----------
1 Моє перше значення
2 Моє друге значення
3 Моє третє значення

Я хочу знайти надане вами значення, яке відповідає значенню у стовпці А. На підставі номера рядка комірки, знайденого із співвідношенням у стовпці A, воно вибере відповідне значення у стовпці B. Це досить просто за допомогою LOOKUP () функція в Excel. Однак я хочу ТАКОЖ скопіювати форматування тексту комірки у стовпчик B.

Спочатку я підходив до цього за допомогою функції VBA, але, на жаль, функція не може змінити форматування комірки. Були б вдячні за ідеї, як підходити.


Ви хочете знайти рядок у стовпці A і повернути значення та форматування відповідного значення у стовпці B? Повернути його куди? І де цінність, яку ви шукаєте?
Райстафаріан

Відповіді:


1
Sub test()
    On Error GoTo Suberror
    'turn off screen updating
    Application.ScreenUpdating = False
    'ask for input
    strName = InputBox(Prompt:="Lookup Value", _
              Title:="Lookup Value", Default:="0")
        'if no input - exit
        If strName = "0" Or _
               strName = vbNullString Then

               Exit Sub
        'otherwise Find
        Else

            Columns("A:A").Select
            Selection.Find(What:=strName, After:=ActiveCell, _
            LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, _
            SearchFormat:=False).Activate

            'Copy
            ActiveCell.Offset(0, 1).Copy

        End If

        'Paste to the range that you define
            Range("J1").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
Suberror:
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

    End Sub

Дякуємо за надання цього Raystafarian! Намір був використати це як таку функцію, як = LookupWithFormatting (A1, IDSource, TextSource). Параметри в цьому прикладі ідентичні функції MSExcel = LOOKUP (). Ось так я сподівався підійти до цього. Думки?
BigBrother

@BigBrother пошук поверне лише значення, а не форматування
Raystafarian

Так - саме з цього і почалася вся ця біль. Я почав рішення, написавши власну функцію VBA, яка прийняла три параметри як = LOOKUP (...). У коді функції VBA я викликаю LOOKUP (...) І я сподівався використати код для копіювання форматування, але це не спрацювало. Я виявив, що функції MS Excel VBA не можуть змінити форматування. Будь-які ідеї?
BigBrother

Моя ідея була кодом VBA вище. Він займе ваше введення, перегляне його та скопіює інше значення (та форматування) у визначений діапазон. Я читав це як рішення VBA, а не рішення функції робочого аркуша
Raystafarian

Дякуємо, що зняли знімок! Як ви вважаєте, це неможливо зробити це як функцію?
BigBrother

0

Взагалі, функції, введені в комірку, не можуть змінити форматування комірки, в якій вони перебувають, оскільки функція не знає, в якій комірці вона знаходиться. Єдиний спосіб її переходу - передати адресу поточної комірки у функцію.

Function LookupWithFormatting(rValue As Range, rLookup As Range, rResult As Range, rFormatThisCell As Range) As String

Функція буде введена у комірку B1 як =LookupWithFormatting(A1, IDSource, TextSource, B1).

Якщо у вас не багато форматів, ви можете скористатися умовним форматуванням замість написання функції VBA. (Вам знадобиться окремий умовний формат для кожного значення в таблиці пошуку.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.