Копирование и вставка значений в Excel 2016 с использованием VBA

1028
Asad Khan

Я новичок в VBA. Мне нужна помощь в написании функции, которую я могу вызывать в формуле, функция должна копировать значения ячейки (эта ячейка не должна быть предопределенной фиксированной ячейкой, а должна быть, мы должны иметь возможность ее выбрать. при вызове функции) и вставьте их в ячейку рядом с ячейкой, в которой вызывается функция.

Пример:

enter image description here

В приведенной выше функции, если значения в ячейке B3 и C3 равны, тогда формула в ячейке E3 должна вызывать функцию «Myfunction ()», эта функция должна копировать сумму в ячейке D3 в ячейку F3, и мы должны иметь возможность выбрать ячейку для копирования (моя функция (D3) D3 может отличаться, это может быть E3 или F3 и т. д.)

Мой код:

 Dim c As Range Function myfunction(c) myfunction = c.Select Selection.Copy Range("c" + 1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Function 

«С» должен быть переменным.

0
Я не понимаю, почему вы хотите иметь функцию для выполнения того, что вы просите. Попробуйте это `= IF (B3 = C3, B3 + C3," ")` в ячейке F3. Этот "вид" решает вашу проблему? Prasanna 6 лет назад 2
HI Prasanna, спасибо за ваш ответ, на самом деле моя проблема гораздо больше, чем то, что я здесь просил, я планирую, и мой проект включает в себя работу по «заранее заданному» графику действий, для этого изменяется количество, определенное для каждого действия каждый час с фиксированной скоростью, как только количества равны, мы должны искать и отфильтровывать каждое действие, которое составляет 100%, а затем вставлять значения вручную, в противном случае на следующий час процент выполнения изменится на более чем 100%, для этого макроса может работать, но снова диапазон будет фиксированным, я просто хотел написать формулу, которая является динамической по своей природе. Asad Khan 6 лет назад 0

2 ответа на вопрос

1
Máté Juhász

и вставьте их в ячейку рядом с ячейкой, в которой вызывается функция.

Это невозможно, функции VBA, вызываемые по формуле на листе, не имеют доступа ни к какой другой ячейке на листе.


Пользовательским функциям не разрешается делать что-либо кроме возврата значения в формулу на рабочем листе или в выражение, используемое в другом макросе или функции VBA. Например, пользовательские функции не могут изменять размеры окон; редактировать формулу в ячейке; или измените параметры шрифта, цвета или рисунка для текста в ячейке. Если вы включите код «действия» такого рода в процедуру функции, функция возвратит # ЗНАЧЕНИЕ! ошибка.

из руководства Microsoft Excel UDF

0
Anaksunaman

Как отмечает Мате Юхас, пользовательские формулы не могут изменять другие ячейки. Попытка сделать это вернет # ЗНАЧЕНИЕ! Ошибка в ячейке, которую занимает формула.

Что касается первой части (доступ к значению случайной ячейки, то есть D3), вы можете просто вернуть значение переменной диапазона ячеек источника:

Function MyFunction(SourceCell As Range) MyFunction = SourceCell.Value End Function 

Это можно использовать в вашей исходной формуле =IF(C3=B3,myfunction(D3),""), причем эта формула помещается непосредственно, например, в F3. Его также можно использовать, например, в E3, изменив значение F3 на =E3.

Вы (очевидно) не ограничены одной ячейкой - если вы хотите выполнить начальное сравнение в самой формуле, вы можете использовать, =myfunction(B3, C3, D3)где функция может выглядеть примерно так:

Dim ReturnValue As Variant  Function MyFunction(FirstCell As Range, SecondCell As Range, SourceCell As Range)  If FirstCell.Value = SecondCell.Value Then 'If our source is empty, return an error If SourceCell.Value = "" Then ReturnValue = "Empty Source" Else ReturnValue = SourceCell.Value End If Else 'Our input cells aren't equal ReturnValue = "Not Equal" End If  'Return our final value to the cell MyFunction = ReturnValue  End Function 
Привет Anaksunaman, спасибо за ваш ответ, на самом деле мой проект включает в себя работу по «заданному» графику действий, для этого количество, определенное для каждого действия, меняется каждый час с фиксированной скоростью, как только количества равны, мы должны искать и отфильтруйте каждое действие, которое составляет 100%, а затем вставьте значения вручную, иначе на следующий час процент выполнения изменится на более чем 100%, для этого макрос может работать, но снова диапазон будет фиксированным, я просто хотел написать формулу это динамический характер. Но «сейчас» я знаю, что UDF не могут изменять ячейки. Asad Khan 6 лет назад 1

Похожие вопросы