Mám údaje viac ako 5000 riadkov a 10 stĺpcov. Rád by som do riadkov pridal text na základe podmienok stĺpcov.
A B C D
fname lname state clustername
1. ram giri NCE ...
2. philips sohia MAD ...
3. harish Gabari NCE ....
Na základe stĺpcového stavu je pre NCE názov klastra "nce.net" priradený do stĺpca D (clustername) a tiež pre MAD je "muc.net" priradený k riadku 2.
Mohli by ste mi prosím pomôcť.
Tu je môj kód:
dim emptyrow as string
row_number = 1
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
state = sheets("sheet1").rows("C" & row_number)
for each cell in selection
if instr(state, "NCE") = true then
Range(Cells(emptyrow, "D").Value = Array("nce.net")
end if
next emptyrow
Môžete mi prosím pomôcť.
odpovede:
1 pre odpoveď č. 1Prečo nie jednoduchý vzorec
v D1
a skopírujte
=IF(C1="NCE","nce.net",IF(C1="MAD","muc.net","No match"))
Robiť to isté s kódom
Sub Simple()
Dim rng1 As Range
Set rng1 = Range([c1], Cells(Rows.Count, "C").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IF(RC[-1]=""NCE"",""nce.net"",IF(RC[-1]=""MAD"",""muc.net"",""No match""))"
.Value = .Value
End With
End Sub
1 pre odpoveď č. 2
Môžete vytvoriť referenčnú tabuľku pozostávajúcu z jedinečného stavu a názvu clusteru v samostatnom pracovnom hárku a potom vytiahnuť clustername do pôvodného hárku pomocou =VLOOKUP()
funkcia ... za predpokladu, že existuje vzťah 1: 1 medzi stavom a klastrom ... dokonca aj 1 klastra pre viaceré štáty by fungovala. Týmto spôsobom sa vyhnite hardcode a môžete reagovať rýchlo, ak sa menia názvy klastrov.
Príklad:
v Tabuľke 2 uveďte zoznam všetkých krajín a súvisiacich názvov clusteru v Sheet1 enter = VLOOKUP (...) do prvého riadku stĺpca clustername ako na obrázku nižšie a kopírovať dole pre všetky riadky
Samozrejme možno budete chcieť mať iba hodnoty, nievzorce vo vašom stĺpci klastra; potom môžete previesť vzorce do hodnôt kopírovaním a potom vložením ako hodnoty, ktoré stĺpec clusteru po zadaní =VLOOKUP(...)
vzorec.
Alternatívne, ak napr. máte už definované veľa klastrových mien a chcete pracovať len na riadkoch, kde je názov clusu prázdny, môžete
- filter pre prázdne clusternames a vložte
=VLOOKUP(...)
len tam použite malý kúsok kódu
Sub DoCluster() Dim R As Range, S As Integer, C As Integer, Idx As Integer Set R = ActiveSheet.[A2] " top left cell of table S = 3 " column index of State column C = 4 " column index of Clustername column Idx = 1 " start at 1st row within range " run a loop across all rows, stop if 1st column gets blank Do While R(Idx, 1) <> "" " work only on rows wher cluster not yet set If R(Idx, C) = "" Then " now this isn"t really good ... try to avoid hardcoding BY ANY MEANS Select Case R(Idx, 3) Case "NCE" R(Idx, 4) = "nce.net" Case "MAD" R(Idx, 4) = "muc.net" " insert other cases here as per need " ... " trap undefined cases Case Else R(Idx, 4) = "undefined" End Select End If Idx = Idx + 1 Loop End Sub
Osobne sa mi nepáči takéto hardcodingvôbec by som radšej vzal clusternames z tabuľky ... takže pre mňa by nebolo potrebné písať kód, pokiaľ celá úloha nie je oveľa zložitejšia, ako bolo popísané.