# How to create a user defined function

How do I get a function that says if B2 or C2 is empty the result is empty, but otherwise C2 is divided by B2

First time here? Check out the FAQ!

We will be migrating from Ask to Discourse on the first week of August, read the details here

How to create a user defined function

1

**
answered 2018-06-22 19:27:42 +0200 **

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Every macro written in LO BASIC as FUNCTION can be used as function in Calc. LO BASIC Functions, when used as Calc functions, get the current cell as parameter and return a value to the cell.

Edited by @Lupp:

*More precise: The parameters passed to the function are described by the parameter list appended (enclosed in parentheses) to the function's name. Each parameter may be a constant or a reference or a formula again. When called from a cell's formula the function gets passed parameters always as if specified 'ByVal' in Calc. (Excel may do it otherwise.)*

1

@Calcasieu You should read this essential book. It's the best out there that I've yet found: OpenOffice.org Macros Explained - OOME_3_0 Andrew Pitonyak -669 pages

2

It's fairly simple to literally translate your requirements

if B2 or C2 is empty the result is empty, but otherwise C2 is divided by B2

to a formula

```
=IF(OR(ISBLANK(B2), ISBLANK(C2)), "", C2/B2)
```

I think your question is good and precise, but the headline is misleading, because User-Defined Functions has to do with using macros to defined named functions, whereas your problem can be solved just fine with a simple formula.

(If this works for you, please click on the ✓ to accept the answer.)

0

In OpenOffice.org Macros Explained - OOME_3_0 by Andrew Pitonyak -669 pages, on page 514 or section 15.7 is 'Write your own Calc functions'.

**Here is another example to fill in for a missing function in standard Calc:**

This Basic Macro adds a new Calc function that can format a number as a string using the Basic (not Calc) ** format** function to do the work, for example you can now format a number as a string with leading zeros or the like:

```
Function FORMAT_(Number As Integer, sFormat As String) As Variant
Dim s$ : s=format(CStr(Number), sFormat)
Format_ = s
End Function
```

*Note that this could not simply be named Format, as that name conflicts with the other built in function named Format. (I think it's strange that Calc can't seem to use that built in function, but that is something to figure out another day. Also I was surprised that I couldn't find a function in Calc to format a number as a string, perhaps it's there by a name that I just haven't found yet.)*

**If you just want to keep it simple** this works the same as the code above:

```
Function FORMAT_(N, s) As Variant : Format_ = format(CStr(N), s) : End Function
```

**Then call your new Basic macro in a cell formula** just like any other function, with the name followed by a parenthesized list of parameters, like this: `=FORMAT_(A15,"0#") & "/" & FORMAT_(B15,"0#") & "/" & C15`

to format a fixed width date string from Day, Month, and Year integer columns. The `0#`

string parameter says to output a string where if the 10's numeral (in a 2 digit number the left most numeral) is missing then display a zero, and a numeral 0-9 for the right most digit. I.e. 5 --> "05", and 15 --> "15".

**TIPS:**

Once you've created your Basic Macro, to get it to work, you must do two things: First save your Calc doc. Then do

`Menu`

|`File`

|and be sure to click on`Reload`

when it reloads. This will cause Calc to read the new list of available Basic Macros.`Enable Macros`

Also after you make any further edits to your macro, you can hit the

`F9`

key to cause Calc to re-calculate using the newly edited macro code.

Asked: ** 2018-06-22 18:55:35 +0200 **

Seen: **5,406 times**

Last updated: **Jan 18 '20**

How do I export a chart in an image format from LibreOffice Calc? [closed]

Are there plans for a "papercut" project for libreoffice [closed]

Is it normal for Calc goal seek to take very long? [closed]

Please refine "Search" in Calc - implement functions in Gnumeric [closed]

LibreOffice Calc will not link to external data via internet [closed]

Is there a LibreOffice .odt, .ods viewer for Android? [closed]

Why is Calc so much slower at opening/saving files than MS-Office? (win7 x64) [closed]

Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.

The term "user defined function" for Calc is commonly supposed to mean a function added - based on user code, that's by programming - to the standard functions of Calc. What you got suggested by @hjek and accepted as a correct answer is not something of that kind. In commonly used terms it is a

formula(aka spreadsheet-formula"). Given the literal subject the other answer was correct though probably not very helpful to you. No reason, however, to downvote it. Serious attempt to help!