VBA - Müssen eine Funktion erstellen, die den Bereich als Eingang
Habe ich eine zwei-dimensionale Tabelle in Excel. zB.
outputproduct blending combination
**5 P1:0.6/P3:0.5**
2 P1:0.3/P2:0.7
4 P5:0.4/P2:0.7
7 P11:0.7/P7:0.4
Angenommen, der Bereich der Tabelle variiert von B2:C6 (kann variieren). Ich habe so eine Funktion zu erstellen, deren erste Aufgabe ist das Lesen dieser Reihe( das wäre einer vom Anwender definierten Eingabe) und speichert dann die Daten in ein 2 dimensionales array, so dass ich verwenden könnte, die Daten(ganze Zahl) in die erste Spalte und die Zeichenfolge in der zweite Spalte, entsprechend.
Der ersten Spalte ist das resultierende Produkt index, während die zweite Spalte ist die Mischung der Produkte in dem angegebenen Verhältnis kombinieren zusammen, um das Produkt in der ersten Spalte.
Dann gibt es eine andere Tabelle:
product index current stock updated stock
**1** **10**
2 20
**3** **50**
4 15
**5** **100**
. .
. .
. .
Ich das update der Aktien Betrag in dieser Tabelle nach der Verarbeitung der Daten.
Zum Beispiel auf die Kombination von Produkt 1 mit Produkt-3 im Verhältnis von 6:5 (Einheiten), 1 Einheit von Produkt 5 produziert wird. Also, ich habe zur Aktualisierung der Anzahl von Aktien für jedes der Produkte in Tabelle 2.
Irgendwelche Vorschläge, wie konvertiert man die Reihe in einem 2 dimensionalen array?
Public Function Blending_function( R1 as Range, R2 as Range)
' R2 is the range of table 2, where the updating is to be done
' R1 is first stored in to a 2 dimensional array, such that the data in the
' column 1 could be read, and the data in the column 2 could be read (of table 1).
' the integer in the column 1 of table 1 refers to the product index in table 2.
' P(i) stands for the ith product. In first row of table-1, P1 and P3 combine in the
' ratio of 6:5 to give P5. The current stock of each product is provide in table-2,
' whose range is R2(entire table 2).
' R1 is the range of table 1, from where the processing is to be done
End Function
Die wichtigste Hürde für mich ist, zu konvertieren Bereich R1 (Tabelle-1) in ein 2-dimensionales array. Und dann schauen Sie aus dem array, der index des output-Produkt, und suchen Sie das Produkt in Tabelle 2 für die Aktualisierung der Lagerbestände.
updated stock
in der 2. Tabelle?wie in "Tabelle1", row1, die Begrenzung der agent ist P1. So aktualisiert die Werte der in Tabelle 2 ist P1 10-(10/.6), P3 50 -(10/.6) und P5 100 +(10/.6). wie gehen Sie vor ?
Ok Hab es... vielen Dank lassen Sie mich gehen Sie durch den rest der Frage 🙂
okies... gehen über die Frage,... lassen Sie mich wissen, wenn Sie irgendwelche Schwierigkeiten beim Verständnis der Frage.
InformationsquelleAutor Rachit | 2012-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Beispiel, wie die Arbeit mit 2D-array. Die Funktion wird brechen die
blending combination
und extrahieren Sie die Werte, die Sie wollen, so dass Sie diese zu nutzen.SNAPSHOT
Sobald Sie die Werte haben, die Sie verwenden können
.Find
für die Suche nachproduct index
im BereichR2
und verwenden Sie dann.Offset
zu geben Sie die Formel an.MyArr1
. Ist das, weil der Bereich R1 besteht aus 2 Spalten nur???? Und wenn das der Fall ist, wie kann ich speichern R2 ( 3 Spalten) inMyArr2
..Is that because the range R1 consists of 2 columns only??
Keine. Das ist nicht der Grund. Speichern von 3 Spalten, die Sie verwenden können, auf die gleiche Weise 🙂MyArr2 = R2
Aber ich sehe nicht die Notwendigkeit hier. Wie ich bereits erwähnt habe, können Sie direkt.Find
zu finden, dieproduct index
in diesem Bereich. Finden Sie unter diesem link auf wie zu verwenden.Find
siddharthrout.wordpress.com/2011/07/14/...dein blog hat mir sehr geholfen. Ich verwendet
.Find
zu finden, die Lage der Produkt-index in Tabelle2. Das problem ist, ich bin nicht in der Lage, ändern Sie die Werte der Spalte 3 in Tabelle 2 mit offset-Methode. Ist das, weil ich bin mit einer Funktion für die Aufgabe??Wenn das so ist, könnten Sie empfehlen mir einen besseren Weg zur Lösung??? Die syntax ist (in der Funktion)blendprodcell(j).Offset(0, 2).Value = F
wo blendprodcell(j) ist die Lage des jth "blending " Produkt" in Tabelle 2--Spalte 1 und F ist der Wert, der aktualisiert werden in Spalte 3 Zeile j .InformationsquelleAutor Siddharth Rout
Ich bin mir nicht sicher, ob ich Verstand die ganze Geschichte, aber das ist, was eine Funktion zurück
ein mehrdimensionales array würde so Aussehen:
Eine zweite option könnte sein, um die Funktion zu deklarieren, geben einen booleschen Wert zurück, und da die Argumente sind standard gesendet byRef; Sie können erklären, die Bereiche und arrays in der main-sub nur, und konvertieren Sie Sie beide zur gleichen Zeit in der Funktion. Ich würde nicht wählen Sie diese option, weil Sie nicht in der Lage sein zu re-verwenden Sie die Funktion danach zu konvertieren, andere Bereiche in arrays.
Ergänzende info:
Diese Technik funktioniert in beide Richtungen. Sie können anschließend einen Bereich definieren und zu tun:
Dieser unter der Bedingung, dass der Bereich hat die gleiche Größe wie das array.
Was ist die Fehlermeldung, die Sie erhalten? Getestet hab ich meinen eigenen code und es funktionierte...
Was ich nicht tun will, ist schreiben Sie Ihre benutzerdefinierten code für Sie, dass ich nicht, weil ich nicht vollständig verstehen, was Sie versuchen zu erreichen. Allerdings, wenn Sie bieten eine Reihe an die Funktion, die ich geschrieben habe für Sie, haben Sie ein mehrdimensionales array zurückgegeben, mit den Werten, die den Bereich zur Verfügung gestellt. Sie können dann mit diesem array zu manipulieren, Werte in irgendeiner Weise, die Sie möchten, und konvertieren Sie es wieder in einen Bereich, wenn dies der Zweck.
Es tut mir Leid, Es nicht wieder zurückzugeben Fehler. copy paste Fehler. Ich habe bearbeitet die Frage. Ich hoffe, es ist zu viel jetzt klar.
Dank Kim, der Würde dir Antworten, falls ich weitere Hilfe benötigen 😉
InformationsquelleAutor Trace
Sie sind gefragt, für source code. Ich kann nur Anregungen geben.
InformationsquelleAutor sreehari