/ Vloženie textu do prázdneho riadka pomocou makra vba v excel - excel, vba, excel - vba

Vloženie textu do prázdneho riadku pomocou makra vba v excel - excel, vba, excel - vba

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ď č. 1

Preč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

tu zadajte popis obrázku

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

  1. filter pre prázdne clusternames a vložte =VLOOKUP(...) len tam
  2. 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é.