Arrays über Range befüllen in Function

Bild

Betrifft: Arrays über Range befüllen in Function
von: Manne
Geschrieben am: 06.06.2015 21:03:26

Hallo,
ich kniffel hier gerade seit einer Weile an einem Problem herum und komme einfach nicht weiter.
Ich habe eine große Tabelle in welcher ich über eine Funktion eine Art Zusammenfassung erstellen möchte. Viele Spalten davon sind lediglich mit Zahlen befüllt oder leer. Diese handhabe ich gerade so:
In der Tabelle:

=fFunction(A2; B2; C3)
Die Funktion:
function fFunction (a, b, c as integer) as string
dim strText
strText = "Zusammenfassung: "
if a <> "" then
  strText = strText & "(" & a & ")"
else
  strText = strText & "-"
end if
if b <> "" then
  strText = strText & "(" & b & ")"
else
  strText = strText & "-"
end if
if c <> "" then
  strText = strText & "(" & c & ")"
else
  strText = strText & "-"
end if
fFunction = strText
end function

Ist es irgendwie möglich, dies über ein Array zu lösen?
Einlesen würde ich die Zellen gerne über eine Range um Variablen zu sparen, also so
=fFunction(A2:C2)
Das scheint er auch irgendwie aufzunehmen. Allerdings habe ich mangels Erfahrung an Array keine Ahnung, wie ich diese Daten jetzt innerhalb der Funktion verwenden kann!?

Bild

Betrifft: AW: Arrays über Range befüllen in Function
von: Sepp
Geschrieben am: 06.06.2015 21:17:54
Hallo Manne,
erkläre zuerst mal anhand eines Beispieles genauer, was du erreichen willst.

Gruß Sepp


Bild

Betrifft: AW: Arrays über Range befüllen in Function
von: Manne
Geschrieben am: 06.06.2015 22:34:37
Hallo Sepp,
was ich erreichen möchte ist, meine bisherige Funktion in folgendes umzuwandeln:
Einlesen der Daten über eine Range:

=fFunction(A2:C2)
Und die Funktion selbst in folgendes zu ändern:
function fFunction (a as range) as string
dim strText
    ???
strText = "Zusammenfassung: "
for i = 1 to 3
  if arr(i) <> "" then
    strText = strText & "(" & arr(i) & ")"
  else
    strText = strText & "-"
  end if
next i
fFunction = strText
end function
Ich finde keine Möglichkeit um die eingelesene Range a in das Array zu übertragen (das ist der Teil mit ??? ;) )
Ist dies innerhalb einer Funktion überhaupt möglich?
Gruß,
Manne

Bild

Betrifft: AW: Arrays über Range befüllen in Function
von: Sepp
Geschrieben am: 06.06.2015 22:45:44
Hallo Manne,
Tabelle1

 ABCDEFGH
1123 5 7 
2        
3        
4        
5Zusammenfassung: (1)(2)(3)-(5)-(7)       
6        
7        

Formeln der Tabelle
ZelleFormel
A5=fFunction(A1:G1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Function fFunction(Bereich As Range) As String
  Dim strText As String
  Dim rng As Range
  
  strText = "Zusammenfassung: "
  
  For Each rng In Bereich
    If rng.Text <> "" Then
      strText = strText & "(" & rng.Text & ")"
    Else
      strText = strText & "-"
    End If
  Next
  
  fFunction = strText
End Function


Gruß Sepp


Bild

Betrifft: AW: Arrays über Range befüllen in Function
von: Manne
Geschrieben am: 06.06.2015 23:13:08
Wow!
Das ist ja einfacher und besser als was mir im Kopf herum schwebte. Ich danke dir vielmals!
Aber wo ich mir jetzt nicht ganz sicher bin, ist das jetzt überhaupt ein Array?

Bild

Betrifft: AW: Arrays über Range befüllen in Function
von: Sepp
Geschrieben am: 06.06.2015 23:18:21
Hallo Manne,
nein, Range ist kein Array, sondern ein Range-Objekt.

Gruß Sepp


Bild

Betrifft: Ein einfaches Join hätte schon fast gereicht, ...
von: Luc:-?
Geschrieben am: 07.06.2015 03:50:17
…Leute;
mit etwas RECHERCHE käme man dann auf die Vielzahl der bereits im Archiv befindlichen LösungsFktt (UDF), u.a. auch welche, die auch Datenfelder (aus Ausdrücken=Teil-Fmln als HptArgument) verarbeiten können.
Ich hätte das dann bspw per Fml so gelöst: =WECHSELN("("&VJoin(A1:G1;")(")&")";"()";"-")
Die UDF VJoin kann man nämlich auch für andere, ähnlich gelagerte Aufgaben einsetzen und nicht nur für diese eine und einzige Spezifik. Sepps Fkt ist also ein Einweg-Produkt und damit unökologisch. ;-]
Sie löst einerseits das augenblickliche Problem des Fragestellers und zeigt andererseits, dass der Verfasser eine spezifisch orientierte (Pgmierer-)Fkt schreiben kann. Nicht weniger, aber auch nicht mehr…
Gruß + schöSo, Luc :-?

Bild

Betrifft: Ach Luc, ...
von: Sepp
Geschrieben am: 07.06.2015 08:09:09
... musst du eigentlich überall deinen Senf dazugeben?
Die von Dir genannten Funktionen sind mir wohl bekannt.
Ich hatte den Fragesteller ja gefragt, was er eigentlich erreichen will, aber er wollte wohl SEINE eigen UDF. Jetzt weiß er wenigstens, wie man dieser einen Bereich übergibt, mit einer fertigen UDF aus dem Archiv wäre er gleich Klug als wie davor.

Gruß Sepp


Bild

Betrifft: Naja, wenn du meinst! Ist denn deine UDF ...
von: Luc:-?
Geschrieben am: 10.06.2015 03:07:07
…nicht auch schon fertig, Sepp?
Was unterscheidet die also außer ihrer …Einweg-Verpackungsart“ von bereits vorhandenen Lösungen. Hättest du nur die vbFkt Join adaptiert, wär's mir zwar auch zu simpel gewesen, aber wenigstens etwas universeller. Du hättest wenigstens auf die Deklarierung von Arg1 As Range verzichten können. Das mache ich nämlich nur, wenn's unbedingt erforderlich ist. Aber als AWer meint ja so mancher, nichts auf erfahrungs­praktische Lösungen geben zu müssen. Wer so etwas tut, muss damit rechnen, dass ich „meinen Senf“ dazugebe.
Ich gebe zwar zu, dass deine UDF anders aussieht als die gängigen (mal von den speziellen Spezifika abgesehen), aber muss denn die Anzahl der „Eintagsfliegen“, mit denen womöglich spätestens der Amtsnachfolger des Fragestellers nichts mehr anfangen kann, nur deshalb stetig vermehrt wdn?! Das Netz ist ohnehin schon voll von so etwas (und manche PCs sicher auch).
Viele behaupten ja, dass das Lernen in einem Forum von Gegenseitigkeit geprägt ist. Davon merke ich hier allerdings nur wenig…
Nichts für ungut! Gruß, Luc :-?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Arrays über Range befüllen in Function"