Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
Terror
HV veteran
liitunud: 08.11.2001
|
05.06.2019 14:49:12
Excelis 2 veeru mõõdude järgi 3'st veerust hinna leidmine |
|
|
On 3 veergu. Materjali laius, kõrgus ning hind. Oletame, et veergudes on vineeri tooriku mõõdud.
Ja on 2 sisendlahtrit kuhu kirjutad endale vajamineva mõõdu. Laiuse ja kõrguse.
Kolmas lahter hind - sinna peaks ta tabelist hindade alt otsima vastavalt mõõtudele õige hinna.
Kuidas see valem realiseerida, et ta tööle hakkaks?
St sisestades Laius 2100mm peab ta tabelist otsima = või vähima suurema väärtuse. Antud juhul on selleks 2200.
Sealt edasi peab ta arvesse võtma teise veeru kõrguse väärtust 2000mm ning leidma tabelist = või vähima suurema vaste. Kui leidub rida millel mõlemad laiuse ning kõrguse parameetrid kattuvad tagastatakse sama rea N veeru hind.
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
napoleon
Unknown virus
liitunud: 08.12.2008
|
05.06.2019 17:24:51
|
|
|
SQL-s ei taha teha? SQL-s oleks üks lihtne päring:
sql:
|
SELECT * FROM <tabel> WHERE laius>=vajalik_laius AND korgus>=vajalik_korgus ORDER BY hind ASC LIMIT 1
|
excelis mingid VLOOKUP jms. valemid on, aga pole nendega väga kodus kuna üldiselt ei viitsi eriti exceliga andmeid töödelda.
EDIT: SQL näide on MySQL/MariaDB syntax. Muus osas on see igas SQL mootoris sama, ainult see limit 1 on iga mootori puhul erinev, et kuidas saada üks rida ainult.
|
|
Kommentaarid: 76 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
59 |
|
tagasi üles |
|
|
joulukas
Kreisi kasutaja
liitunud: 02.12.2001
|
05.06.2019 19:27:54
|
|
|
napoleon kirjutas: |
SQL-s ei taha teha? SQL-s oleks üks lihtne päring:
sql:
|
SELECT * FROM <tabel> WHERE laius>=vajalik_laius AND korgus>=vajalik_korgus ORDER BY hind ASC LIMIT 1
|
excelis mingid VLOOKUP jms. valemid on, aga pole nendega väga kodus kuna üldiselt ei viitsi eriti exceliga andmeid töödelda.
EDIT: SQL näide on MySQL/MariaDB syntax. Muus osas on see igas SQL mootoris sama, ainult see limit 1 on iga mootori puhul erinev, et kuidas saada üks rida ainult. |
INDEX on vähe mõistlikum, oluliselt paindlikum kui lookup. Hiljuti üks kolleeg tutvustas ja koos saime kenasti kahe parameetri indekseerimisega soovitud lõpptulemuse. Ise ma veel katsetan, seega valmis valemit ei oska anda.
_________________ HinnaVaatlus liituja nr. 285 |
|
Kommentaarid: 16 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
14 |
|
tagasi üles |
|
|
sanz671
HV vaatleja
liitunud: 04.11.2007
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
Terror
HV veteran
liitunud: 08.11.2001
|
06.06.2019 15:52:26
|
|
|
INDEX+MATCH komboga ei suutnud ise välja mõelda lahendust.
sanz671 see lahendus annab vale tulemuse, kuna ta võtdleb veerge eraldi.
Kõigepealt oleks vaja tuvastada millised laiuse veerud vastavad laiuse parameetritele ning kõrguse võrdluses tohiks kasutada ainult neid mis olid eelnevalt laiusel TRUE.
Üritasin vahepeal VBA'ga midagi pusida ning iseenesest loogika töötab, kuid kimbutab "Out of stack" error(Run time error '28') error ning asi satub nagu lõputusse loopi.
Private Sub Worksheet_Change(ByVal Target As Range)
Button1_Click 'käivitab worksheet väljade muutuse peale makro mis uuendab hinna lahtri. Kas siit võib kuidagi loopi sattuda?
End Sub
|
Sub Button1_Click()
'Declarations
Dim RES200 As Worksheet
Dim Pealeht As Worksheet
Dim lastRow As Long
Dim row_number As Long
Dim currRow As Long
Dim col1 As Integer 'The 2 column numbers where the criteria are
Dim col2 As Integer
Dim val1 As Integer 'the criteria to match (Change to double, int or long, if these are all numeric values)
Dim val2 As Integer
Set RES200 = ActiveWorkbook.Worksheets("RES200")
Set Pealeht = ActiveWorkbook.Worksheets("Sheet1")
currRow = 6
lastRow = 250 'RES200.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
col1 = 6
col2 = 7
val1 = Pealeht.Range("J17").Value 'Change to values to match
val2 = Pealeht.Range("J18").Value
For currRow = 6 To 250 'lastRow
If RES200.Cells(currRow, col1).Value >= val1 Then
If RES200.Cells(currRow, col2).Value >= val2 Then
Pealeht.Range("J19").Value = RES200.Range("H" & currRow).Value
Exit For 'This ensures that only the first matching row will be assigned to row_number
End If
End If
Next
End Sub
|
Hakkab kellelegi ehk näpukas silma?
Pealehel (Sheet1) on muidu laiuse ning kõrguse input ja hinna "output" lahter ning RES200 lehel on andmed.
Netist leitud sarnase koodi pealt tehtud, VBA'st ma mõistagi suurt ise ei jaga.
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
sanz671
HV vaatleja
liitunud: 04.11.2007
|
06.06.2019 16:02:07
|
|
|
M tulbas olev true / false määratakse kahe suuruse peale kokku. Kirjutasin K-M pikemalt lahti, et ei peaks nestitud valemeid hakkama lahkama. Õige toimimise eeldus on see, et laiused on kasvavas järjestuses koos laiuste juurde kuuluvate kõrgustega.
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
Terror
HV veteran
liitunud: 08.11.2001
|
06.06.2019 20:42:35
|
|
|
sanz671 kirjutas: |
M tulbas olev true / false määratakse kahe suuruse peale kokku. Kirjutasin K-M pikemalt lahti, et ei peaks nestitud valemeid hakkama lahkama. Õige toimimise eeldus on see, et laiused on kasvavas järjestuses koos laiuste juurde kuuluvate kõrgustega. |
Saades su lahendusest inspiratsiooni suutsin ehitada ühe valemiga lahenduse mis võtab kohe õige lõpphinna =INDEX(H6:H52;MATCH(1;IF(M14<=F6:F52;IF(M15<=G6:G52;1));0)) vajab sisestamiseks ctrl+shift+enter .
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
sanz671
HV vaatleja
liitunud: 04.11.2007
|
06.06.2019 23:40:00
|
|
|
Terror kirjutas: |
sanz671 kirjutas: |
M tulbas olev true / false määratakse kahe suuruse peale kokku. Kirjutasin K-M pikemalt lahti, et ei peaks nestitud valemeid hakkama lahkama. Õige toimimise eeldus on see, et laiused on kasvavas järjestuses koos laiuste juurde kuuluvate kõrgustega. |
Saades su lahendusest inspiratsiooni suutsin ehitada ühe valemiga lahenduse mis võtab kohe õige lõpphinna =INDEX(H6:H52;MATCH(1;IF(M14<=F6:F52;IF(M15<=G6:G52;1));0)) vajab sisestamiseks ctrl+shift+enter . |
Väga hea
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|