/ / Inserindo texto na linha em branco usando macro vba no excel - excel, vba, excel-vba

Inserindo texto na linha em branco usando macro vba no excel - excel, vba, excel-vba

Eu tenho um dado de dizer mais de 5000 linhas e 10 colunas. Gostaria de adicionar um texto às linhas com base nas condições das colunas.

    A              B               C            D
fname          lname         state        clustername
1.  ram           giri            NCE         ...
2. philips        sohia           MAD         ...
3. harish        Gabari           NCE         ....

Com base no estado da coluna, para NCE, o nome do cluster "nce.net" deve ser atribuído à coluna D (clustername) e também a MAD é "muc.net" a ser atribuído à linha 2.

você poderia por favor me ajudar.

Aqui está o meu código:

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

Você poderia por favor me ajudar.

Respostas:

1 para resposta № 1

Por que não uma fórmula simples?

Dentro D1 e copie

=IF(C1="NCE","nce.net",IF(C1="MAD","muc.net","No match"))

Fazendo o mesmo isso com código

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 para resposta № 2

Você pode criar uma tabela de referência que consiste em um único estado e clustername em uma planilha separada e, em seguida, puxar o clustername para sua planilha original usando um =VLOOKUP() função ... desde que exista uma relação 1: 1 entre estado e cluster ... até 1 cluster para múltiplos estados funcionaria. Dessa forma, você evita a codificação e pode reagir rapidamente se os nomes dos clusters mudarem.

Exemplo:

na Planilha2 lista todos os países e seus nomes de clones associados na Folha1 digite = VLOOKUP (...) na primeira linha da coluna clustername conforme a figura abaixo e copie para todas as linhas

insira a descrição da imagem aqui

Claro que você pode querer ter apenas valores, nãofórmulas em sua coluna de cluster; em seguida, você pode converter fórmulas em valores copiando e colando como valores a coluna do cluster depois de ter digitado =VLOOKUP(...) Fórmula.

Alternativamente, se, e. você tem um monte de clusternames já definidos e só quer trabalhar em linhas onde o clustername está em branco, você pode

  1. filtrar por clusternames em branco e inserir o =VLOOKUP(...) Só lá
  2. use um pequeno pedaço de código

    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
    

Pessoalmente eu não gosto desse tipo de codificaçãoDe forma alguma, eu prefiro pegar os clusternames de uma tabela ... então, para mim, não seria necessário escrever código, a menos que toda a tarefa seja muito mais complexa do que a descrita.