Nov 02 2023 06:55 PM
Hello I was wondering whether it is possible to achieve this result using VBA/UDF?
Basically what I wanted to do is to be able to concatenate various string from different cell and achieve the shown result without typing the concatenate formula over and over but only one function with VBA/UDF, so we can get different kind of result based on the chosen cells
Nov 02 2023 07:57 PM
@aijatiw Yes, you can create a VBA function but my question is why complicate it that much?
You could easily just have a column C with the below formula:
="Student with name "&A2&" is now on year "&B2
You can drag this formula down as many rows as you need. No need to be "typing the formula over & over again".
Nov 02 2023 08:34 PM
Nov 02 2023 09:00 PM
@aijatiw Sure thing. I still wouldn't use VBA, you can just add two additional columns for your inputs:
The formula will now be =C2&" "&A2&" "&D2&" "&B2
If you're really, really desperate for a VBA solution I could look into it but honestly it's overkill for a simple task as this.
Nov 02 2023 09:26 PM
Nov 02 2023 09:42 PM
Nov 03 2023 06:13 AM
It looks like you have 365. A VBA/UDF solution is superfluous with Lambda as an option:
'Results Lambda
=LAMBDA(words,name,year,LET(word1, TAKE(words, 1), word2, TAKE(words, -1), word1 & " " & name & " " & word2 & " " & year))
Nov 03 2023 05:42 PM
Cartesian_product?
select * from basic_Cartesian_product;
with a as(select f01 from basic_Cartesian_product where f01<>''),
b as (select f02 from basic_Cartesian_product where f02<>''),
c as(select f03 from basic_Cartesian_product where f03<>''),
d as (select f04 from basic_Cartesian_product where f04<>'')
select f01||' '||f03||f02||' '||f04 result from a,b,c,d;
f01 f02 f03 f04
student with name | is now on year | Mike | 1 |
Donna | 2 | ||
Lula | |||
Naomi | |||
Luca |
result
student with name Mikeis now on year 1 |
student with name Mikeis now on year 2 |
student with name Donnais now on year 1 |
student with name Donnais now on year 2 |
student with name Lulais now on year 1 |
student with name Lulais now on year 2 |
student with name Naomiis now on year 1 |
student with name Naomiis now on year 2 |
student with name Lucais now on year 1 |
student with name Lucais now on year 2 |
Nov 04 2023 10:24 AM
I agree with @Patrick2788 that there is little point in introducing VBA as a programming environment when worksheet formulas are sufficient. Now that dynamic arrays and recursion have made the worksheet formulas into a Turing complete language, that covers most computational tasks.
Another trick is to nest the Lambda functions to take two strings of parameters,
StudentYearλ
= LAMBDA(int, lnk, cls,
LAMBDA(param1, param2, CONCATENATE(int, " ", param1, " ", lnk, " ", param2, " ", cls))
)(intro, link, close)
This is still a Lambda function because only one parameter string is already provided. That allows a worksheet formula to return the appropriate message for a list of students
= StudentYearλ(Name, Year)
From there it is easy to envision related formulas generated from the same core such as
= StudentGradesλ(Name, Marks)