2016-07-26 3 views
0

Schnelle Frage. Ich versuche, ein Programm zu erstellen, das die erste Instanz des Werts findet, der größer als die maximale Lautstärke eines Tanks in I8 ist. Ich möchte die Volumina in der Spalte Vol in I13: I80 mit der maximalen Lautstärke in I8 vergleichen. Ich möchte dann Excel ausgeben, um den entsprechenden Strap in Spalte B13: B80 als Meldungsfeld auszugeben. In diesem Fall würde also ein Nachrichtenfeld mit der Meldung "Die Höhe der Wand ist 16 Zoll" ausgegeben werden. Als B20 ist der Wert des Bandes, der dem ersten Volumen entspricht, größer als das Maximum.Excel Erste Instanz des Werts größer als Referenz finden

Public Sub dimensionInput() 

Dim wallWidth As Double 'Get Wall Width Input 
wallWidth = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallWidth = False Then 
    Call zeroFill 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("D3").Value = wallWidth 
End If 

Dim wallLen As Variant 'Get Wall Length Input 
wallLen = Application.InputBox("Input Desired Secondary Containment Wall Width in Inches", "Wall Width", 1) 
If wallLen = False Then 
    Call zeroFill 
    Exit Sub 
Else 
Application.Worksheets("Sheet1").Range("E3").Value = wallLen 
End If 

Dim arrayDia() As String 
Dim diameter As Variant 'Get Diameter Input 
diameter = Application.InputBox("Input Tank(s) Diameter Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Diameter", 1) 
arrayDia() = Split(diameter, ",") 
For i = LBound(arrayDia) To UBound(arrayDia) 
    Cells(6, i + 3).Value = arrayDia(i) 
Next i 

Dim arrayLen() As String 
Dim length As Variant 'Get Lenth Input 
length = Application.InputBox("Input Desired Length Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Length", 1) 
arrayLen() = Split(length, ",") 
For i = LBound(arrayLen) To UBound(arrayLen) 
    Cells(7, i + 3).Value = arrayLen(i) 
Next i 

'Dim arrayOrient() As String 
'Dim orient As Variant 'Get Orient Input 
'orient = Application.InputBox("Input Desired Orient", "Orient", H) 
'arrayOrient() = Split(orient, ",") 
'For i = LBound(arrayOrient) To UBound(arrayOrient) 
' Cells(9, i + 3).Value = arrayOrient(i) 
'Next i 

Dim arrayOffset() As String 
Dim offset As Variant 'Get Offset Input 
offset = Application.InputBox("Input Desired Offset Seperated by a Comma and Space e.g. N1, N2, N3, ...", "Offset", 0) 
arrayOffset() = Split(offset, ",") 
For i = LBound(arrayOffset) To UBound(arrayOffset) 
    Cells(10, i + 3).Value = arrayOffset(i) 
Next i 

End Sub 

Public Sub zeroFill() 

Application.Worksheets("Sheet1").Range("C6:H7").Value = "0" 
'Application.Worksheets("Sheet1").Range("C9:H9").Value = "H" 
Application.Worksheets("Sheet1").Range("C10:H10").Value = "0" 

End Sub 

enter image description here

+5

Okay, mach das. –

+3

Ich denke was @Tom versucht zu sagen, was hast du bisher gemacht? Leute bei SO werden Ihnen helfen, Code zu reparieren, der nicht funktioniert, aber die meisten werden es nicht für Sie schreiben - zumindest nicht ohne einen unterschriebenen Vertrag. – FreeMan

+0

Ich habe den Code hinzugefügt, den ich für das Projekt verwendet habe. Ich wollte nicht, dass jemand auf die Idee kommt, dass ich es für mich machen möchte. Wenn überhaupt, würde ich gerne verstehen, wie es geht. Ich bin einfach kein großartiger Programmierer, entschuldige mich für die Missverständnisse. – JuliusDariusBelosarius

Antwort

1
(Diese Methode Matrixformeln vermeidet)

die Formel vorgeschlagen Nachdem:

="The height of the wall is"&INDEX(B13:B80,MATCH(I8,I13:I80,1)+1)&"""" 

OP angegeben eine Erklärung davon würde geschätzt werden.

MATCH

Sieht für den entsprechenden Wert (I8) im Bereich I13:I80. Da die Ergebnisse für eine einzelne Zelle benötigt werden (kein Ziehen der Formel), sind keine Anker ($ zum Reparieren von Referenzen) erforderlich.

Der dritte Parameter (hier 1) pro M $:

findet den größten Wert, der das Suchkriterium ist kleiner oder gleich ist.

So gegeben 872.9 (in I8) der 'angepaßte' Wert der 794.4 im Bereich der siebte Punkt ist (Zählung nach unten). Das ist nicht genug (wir suchen nach Erste Instanz des Wertes größer als Referenz), so dass wir eine Zeile heruntergehen (da die Daten aufsteigend sortiert werden) mit +1. Also haben wir jetzt den Index (8) der relevanten Zeile im Bereich. Dies wird angewendet:

INDEX (array Form)

, die einen Bereich (hier B13:B801) und Picks aus es den Wert des n ten Eintrag hält (row_number von der Spitze des Bereichs gezählt wird).Hier als n = 8 ist dies 16.

Für das Meldungsfeld ist ein wenig mehr als nur 16 erforderlich und der Erläuterungstext kann mit hinzugefügt werden.

OP fragte nach Inches anstatt " aber für eine Nachricht Feld " schien mir angemessen und die Großschreibung unangemessen sowieso.

1

Sagen wir Werte in Spalte I von I3 durch I19 haben. Setzen Sie den Referenzwert in die Zelle K3. In J3 eingeben:

=IF(I3>$K$3,I3,"") 

in J4 eingeben:

=IF(AND(I4>$K$3,COUNT($J$3:$J3)=0),I4,"") 

und abschreiben. Schließlich in L3 eingeben:

=MAX(J:J) 

enter image description here

Verwandte Themen