excel cria uma função vba personalizada?

1

Alguém pode me ajudar a criar uma função vba para executar o seguinte?

Em Folha1 , tenho 3 colunas A(product) e B(price) , que são preenchidas com 3000 itens e a terceira coluna C(quantity) , que não é preenchida agora.

Eu quero adicionar quantidades a certos produtos que serão feitos encontrando o produto e inserindo a quantidade na célula correspondente C.

Em seguida, em Folha2 ou até mesmo em uma pasta de trabalho diferente para adicionar apenas todos os produtos e preços e quantidade que foram introduzidos.

Por exemplo, eu tenho Sheet1 :

Euqueroqueaplanilha2ouumaplanilha/pastadetrabalhoespecificadasejapreenchidaautomaticamentecomosprodutoseseuspreçosequantidadescorrespondentesquetenhamquantidadesassim:

Euconseguicriarumafunçãoexcel,masalistadeprodutosestámudandosemanalmenteetodavezqueeutenhoquecopiar/colarafórmulaeadaptaroarquivodeorigemeéumaborrecimentocompleto.

Afórmulaquefizestáaqui:

=IFERROR(INDEX('Products'!$A$5:$C$2655,SMALL(IF((0<'Products'!$C$5:$C$2655),MATCH(ROW('Products'!$B$5:$B$2655),ROW('Products'!$B$5:$B$2655))),ROW(A11)),COLUMN(A11))," ")
    
por dan 05.06.2016 / 23:50

1 resposta

1

Este código VBA funcionará:

Public Sub quantityProducts()
    '**********************
    ' variables
    sourceSheet = "Sheet1" 'name of the source sheet
    destSheet = "Sheet2" 'name of the destination sheet
    titleRow = 1 ' Number of Title Row
    firstRowSource = 2 ' First row of source data
    firstRowDest = 2 'First row of data in destination sheet
    copyTitleRow = True 'Should be title row be copied? True / False
    columnToCheck = 3 'Column that defines if the row must be copied
    '**********************
    Dim wkb As Workbook
    Dim wks, wks1 As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Worksheets(sourceSheet)
    Set wks1 = wkb.Worksheets(destSheet)
    wks1.Rows.Clear ' Clear the contents of destination sheet
    If copyTitleRow = True Then 'If title row must be copied
        wks.Rows(titleRow).Copy Destination:=wks1.Rows(titleRow)
    End If
    totalrows = wks.Cells(Rows.Count, 1).End(xlUp).Row ' total rows in source
    destRow = firstRowDest
    For i = firstRowSource To totalrows ' iterate through rows
        If wks.Cells(i, columnToCheck) <> "" Then ' If cell in column to check isn't empty
            wks.Rows(i).Copy Destination:=wks1.Rows(destRow) ' Copy from source to destination
            destRow = destRow + 1 ' Increase value of destination row
        End If
    Next i
    a = MsgBox("Finished. Copied " & destRow - firstRowDest & " rows", vbOKOnly)
End Sub

Abra VBA / Macros com ALT + F11 , em ThisWorkbook insira um novo módulo e cole o código no lado direito.

Verifique se os valores atribuídos às variáveis correspondem às suas planilhas e execute-as clicando no triângulo verde.

Eu coloco comentários no código para que você entenda como funciona.

Você pode executá-lo também passo a passo, clicando na primeira linha e, em seguida, percorrer cada passo pressionando F8 .

    
por 06.06.2016 / 11:15