# Gestão de inventário no Google Sheets

> Como gerir o inventário no Google Sheets com um registo de movimentos, fórmulas que funcionam, alertas de stock baixo, proteção e histórico, e os limites a prever.

Source: https://www.lightinventory.com/pt/guias/gestao-de-inventario-google-sheets · Last updated: 2026-10-28

Pode gerir um inventário fiável no Google Sheets se nunca escrever por cima de uma quantidade de stock. Registe cada entrada, saída, ajuste e transferência como uma nova linha num registo de movimentos, e deixe que as fórmulas calculem o que está disponível. Essa única decisão de conceção dá-lhe stock por localização, alertas de stock baixo e um histórico que consegue ler, tudo com funções incorporadas.

Este guia percorre a estrutura da folha, as fórmulas, a validação de dados, a proteção, o histórico e os limites do Google Sheets que importam. Termina com uma análise honesta de quando o Google Sheets, por si só, deixa de ser suficiente.

## Estruturar a folha de cálculo

Utilize uma folha de cálculo com três separadores. Cada separador tem uma função.

| Separador | Cada linha é | Edita-o quando |
|---|---|---|
| `Items` | Um produto ou uma peça | Adiciona um artigo ou altera os respetivos detalhes |
| `Locations` | Um armazém, uma sala, uma prateleira ou uma carrinha | Adiciona ou muda o nome de um local |
| `Movements` | Uma alteração de stock | Algo entra, sai ou muda de sítio |

Os nomes dos separadores e os valores em formato de código mantêm-se em inglês, porque as fórmulas deste guia fazem referência a eles.

### Items

| Coluna | Cabeçalho | Exemplo | Notas |
|---|---|---|---|
| A | SKU | `BOLT-M8-40` | Único, nunca reutilizado. Formate a coluna como texto simples |
| B | Nome | Parafuso sextavado M8 × 40 mm | |
| C | Unidade | caixa | A unidade que todos os movimentos utilizam |
| D | Ponto de encomenda | 20 | Quando o stock disponível chega a este valor, encomende |
| E | Disponível | *(fórmula)* | Nunca é escrito à mão |
| F | Estado | *(fórmula)* | `Reorder` ou `OK` |

### Locations

| Coluna | Cabeçalho | Exemplo |
|---|---|---|
| A | Localização | `WH1` |
| B | Nome | Armazém principal |

### Movements: o registo de movimentos

| Coluna | Cabeçalho | Exemplo | Notas |
|---|---|---|---|
| A | Data | 2026-10-28 | Um valor de data real, não texto |
| B | SKU | `BOLT-M8-40` | Menu pendente a partir de `Items` |
| C | Localização | `WH1` | Menu pendente a partir de `Locations` |
| D | Quantidade | `-5` | Um valor positivo acrescenta stock e um negativo retira-o |
| E | Tipo | `Issue` | `Receive` (entrada), `Issue` (saída), `Adjust` (ajuste) ou `Transfer` (transferência) |
| F | Referência | PO-1042 | Nota de encomenda, trabalho ou folha de contagem |
| G | Registado por | Sam | Quem o registou |
| H | Nota | Danificado no transporte | Porquê, quando não for óbvio |

Uma transferência são duas linhas: `-5` na localização de origem e `+5` na de destino, ambas com o tipo `Transfer` e a mesma referência. Uma contagem de stock que encontra menos 3 unidades do que o esperado é uma linha `Adjust` com `-3`.

### Porque é que um registo só de acrescento é melhor do que uma coluna de quantidade

A folha de inventário mais comum tem uma única coluna «Quantidade» que as pessoas vão substituindo. Funciona até algo correr mal e, nessa altura, não consegue dizer o que aconteceu.

- **Um número substituído não tem história.** Se 40 passa a 25, a folha não diz se 15 foram vendidos, perdidos ou mal contados. Uma linha do registo diz `-15`, `Issue`, `JOB-311`, com uma data e um nome.
- **Duas pessoas não podem editar o mesmo número em segurança.** Se duas pessoas retirarem 5 caixas cada uma e ambas escreverem 35 por cima de 40, perde-se um movimento. Duas linhas acrescentadas de `-5` somam corretamente.
- **Os erros corrigem-se acrescentando, não apagando.** Uma linha errada é corrigida com uma linha oposta, por isso o erro e a correção ficam ambos visíveis.
- **O stock em qualquer data está à distância de uma fórmula.** Some os movimentos até essa data.
- **O stock por localização vem incluído.** As mesmas linhas dão totais por artigo, por localização ou por ambos.

A regra para todos os que usam a folha é simples: acrescentar linhas a `Movements` e nunca editar nem eliminar as antigas.

## Fórmulas para o stock disponível

Todas as fórmulas abaixo pressupõem a estrutura de separadores e colunas acima, com os cabeçalhos na linha 1.

> **Note:** As fórmulas separam os argumentos com vírgulas. Se a sua folha usar definições regionais com vírgula decimal, como Portugal, o Google Sheets espera ponto e vírgula: substitua as vírgulas entre argumentos (não as do texto entre aspas) por `;`.

### Stock disponível por artigo

Em `Items!E2` e, depois, preencha para baixo:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2)
```

[SUMIFS](https://support.google.com/docs/answer/3238496?hl=pt) soma todas as quantidades (coluna D) do registo cujo SKU corresponde ao artigo dessa linha.

Para preencher a coluna inteira com uma única fórmula, coloque isto em `Items!E2` e deixe vazias as células abaixo:

```
=ARRAYFORMULA(IF(A2:A="", "", SUMIF(Movements!B:B, A2:A, Movements!D:D)))
```

### Stock disponível por artigo e localização

Para um artigo numa localização, por exemplo a localização escrita na célula `H1` de `Items`:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$C:$C, $H$1)
```

Para uma tabela de stock completa num separador próprio, utilize [QUERY](https://support.google.com/docs/answer/3093343?hl=pt). Esta fórmula lista todos os pares de artigo e localização que têm movimentos:

```
=QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C label sum(D) 'On hand'", 1)
```

Esta transforma as localizações em colunas, com uma linha por artigo:

```
=QUERY(Movements!A1:H, "select B, sum(D) where B is not null group by B pivot C", 1)
```

> **Note:** O QUERY espera um único tipo de dados por coluna. A documentação do Google indica que, com tipos misturados numa coluna, o tipo de dados maioritário determina o tipo de dados da coluna e os restantes valores são tratados como vazios. Mantenha os SKU como texto simples e as datas como datas reais.

### Stock numa data passada

Para ver o que estava disponível no fim de um determinado dia, por exemplo a data em `Items!H2`:

```
=SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$A:$A, "<="&$H$2)
```

### Detetar stock negativo

Uma localização não pode ter menos de zero. Esta fórmula lista todos os pares de artigo e localização abaixo de zero, o que normalmente significa uma entrada em falta ou um erro de digitação:

```
=QUERY(QUERY(Movements!A1:H, "select B, C, sum(D) where B is not null group by B, C", 1), "select * where Col3 < 0", 1)
```

O QUERY interior calcula os totais por localização; o exterior mantém apenas as linhas negativas. Um resultado vazio significa que nenhuma localização está abaixo de zero.

## Alertas de stock baixo e pontos de encomenda

### Uma coluna de estado

Em `Items!F2` e, depois, preencha para baixo:

```
=IF(D2="", "", IF(E2<=D2, "Reorder", "OK"))
```

O estado fica vazio quando não há ponto de encomenda definido, para que os artigos novos não mostrem um falso alarme.

### Realçar as linhas que precisam de nova encomenda

1. Selecione `A2:F` no separador `Items`.
2. Clique em **Formatar → Formatação condicional**.
3. Em **Formatar células se**, escolha **A fórmula personalizada é**.
4. Introduza `=AND($D2<>"", $E2<=$D2)`.
5. Escolha uma cor de preenchimento e clique em **Concluído**.

Os cifrões mantêm as colunas fixas enquanto a linha muda, por isso a linha inteira muda de cor. O Google indica que as fórmulas de formatação condicional [só podem fazer referência à mesma página](https://support.google.com/docs/answer/78413?hl=pt), a menos que use `INDIRECT`. É por isso que o stock disponível e o ponto de encomenda ficam lado a lado no separador `Items`.

Pode usar a mesma funcionalidade para assinalar as linhas do registo cujo sinal não corresponde ao tipo. Selecione `A2:H` em `Movements` e utilize:

```
=OR(AND($E2="Receive", $D2<0), AND($E2="Issue", $D2>0))
```

### Noções básicas do ponto de encomenda

Um ponto de encomenda responde a uma pergunta: até onde pode o stock descer antes de ter de encomendar, para que a nova entrega chegue antes de o stock esgotar? A fórmula básica é:

**Ponto de encomenda = consumo diário médio × prazo de entrega em dias + stock de segurança**

- **O consumo diário médio** vem do seu registo de movimentos.
- **O prazo de entrega** é o número de dias entre a encomenda e ter o stock na prateleira.
- **O stock de segurança** é a margem para entregas lentas ou semanas de muito movimento.

Acrescente três colunas auxiliares a `Items`: G «Consumo diário médio (30 dias)», H «Prazo de entrega (dias)» e I «Stock de segurança». Em `G2`:

```
=-SUMIFS(Movements!$D:$D, Movements!$B:$B, $A2, Movements!$E:$E, "Issue", Movements!$A:$A, ">="&(TODAY()-30))/30
```

O sinal de menos transforma as quantidades negativas de `Issue` num ritmo de consumo positivo. Depois, defina o ponto de encomenda em `D2`:

```
=ROUNDUP(G2*H2 + I2, 0)
```

Por exemplo, um artigo consumido a 4 caixas por dia, com um prazo de entrega de 5 dias e 10 caixas de stock de segurança, tem um ponto de encomenda de 4 × 5 + 10 = 30. Reveja os prazos de entrega e o stock de segurança quando os fornecedores ou as épocas mudarem; a fórmula só é tão boa quanto esses dois dados.

## Validação de dados e menus pendentes

Os menus pendentes evitam os erros de digitação que estragam o SUMIFS e o QUERY: um SKU com um espaço no fim ou uma localização escrita de duas formas nunca corresponde.

### Adicionar um menu pendente a partir de um intervalo

1. Em `Movements`, selecione `B2:B`.
2. Clique em **Dados → Validação de dados → Adicionar regra**.
3. Em **Critérios**, escolha **Menu pendente (de um intervalo)** e introduza `Items!A2:A`.
4. Clique em **Concluído**.

Repita para `C2:C` com `Locations!A2:A`. Para `E2:E`, escolha **Menu pendente** e adicione os itens `Receive`, `Issue`, `Adjust` e `Transfer`. O Google também disponibiliza **Inserir → Menu pendente** e a opção **Pendente** no menu do botão direito; todas abrem o mesmo [painel de regras de validação de dados](https://support.google.com/docs/answer/186103?hl=pt).

### Rejeitar ou avisar

Por predefinição, o Google Sheets rejeita uma entrada que não corresponde à lista. Se preferir permiti-la com um aviso, abra **Opções avançadas** e, em **Se os dados forem inválidos:**, selecione **Mostrar um aviso**. Num registo de movimentos de inventário, mantenha a rejeição ativa: um movimento com um SKU desconhecido é quase sempre um erro.

Acrescente também uma regra de validação em `D2:D` que só aceite números, e em `A2:A` que só aceite datas. Uma quantidade escrita como texto é ignorada pelo SUMIFS, por isso o stock fica errado sem que ninguém dê por isso.

## Proteger intervalos e partilhar com cuidado

As permissões do Google Sheets têm dois níveis, e ambos importam.

1. **A partilha** decide quem pode abrir o ficheiro e se é Leitor, Comentador ou Editor. É definida com **Partilhar** e aplica-se ao ficheiro inteiro.
2. **As páginas e os intervalos protegidos** restringem o que os editores podem alterar dentro do ficheiro.

### Proteger o que ninguém deve escrever

1. Clique em **Dados → Proteger páginas e intervalos**.
2. Clique em **Adicionar uma página ou um intervalo**.
3. Escolha **Intervalo** e selecione `Items!E2:F` (as colunas de fórmulas).
4. Clique em **Definir autorizações**.
5. Selecione **Restringir quem pode editar este intervalo**, escolha **Apenas o utilizador** e clique em **Concluído**.

Proteja da mesma forma o separador `Locations` inteiro, se a lista mudar raramente. Em `Movements`, as pessoas têm de conseguir acrescentar linhas, por isso uma proteção estrita não serve. Utilize antes **Mostrar um aviso ao editar este intervalo** nas linhas existentes; pede às pessoas que confirmem antes de alterarem o histórico.

Saiba o que a proteção não faz. O Google afirma que a proteção [não deve ser usada como medida de segurança](https://support.google.com/docs/answer/1218656?hl=pt) e que «as pessoas podem imprimir, copiar, colar, importar e exportar cópias de uma folha de cálculo protegida». O proprietário pode sempre editar um intervalo protegido, e não é possível proteger dados com uma palavra-passe. Os passos detalhados estão em [Proteger uma página ou um intervalo](/pt/ajuda/google-sheets/proteger-intervalos).

### Partilhar com a função mais restrita

- Atribua **Leitor** a quem só precisa de consultar o stock.
- Atribua **Editor** apenas a quem regista movimentos.
- As definições de partilha do Google permitem impedir que os editores partilhem o ficheiro, conforme descrito em [Partilhar ficheiros do Google Drive](https://support.google.com/drive/answer/2494822?hl=pt).

## Histórico de versões e histórico de edições das células

O Google Sheets guarda dois tipos de histórico: as versões do ficheiro inteiro e o histórico de edições de cada célula. [Não pode ver o histórico de versões](https://support.google.com/docs/answer/190843?hl=pt) sem autorização para editar o ficheiro.

### Histórico de versões

Para ver versões anteriores, clique em **Última edição**, no canto superior direito da folha de cálculo. Escolha uma versão no painel do lado direito para ver quem alterou o quê. Por predefinição, o Google Sheets oculta as linhas não modificadas; clique em **Mostrar linhas não modificadas** para ver tudo.

Pode restaurar uma versão ou fazer uma cópia dela. Restaurar uma versão de uma folha de cálculo limpa o histórico de edições célula a célula das alterações feitas antes do restauro, por isso, num ficheiro de inventário com muito movimento, fazer uma cópia é normalmente a opção mais segura. Consulte [Restaurar uma versão anterior](/pt/ajuda/google-sheets/restaurar-versao).

Pode atribuir um nome a até 15 versões por folha de cálculo, e as versões com nome não são unidas. Atribua um nome a uma versão depois de cada contagem de stock, por exemplo «Contagem 2026-10-31», para poder sempre regressar a ela.

### Histórico de edições das células

Clique com o botão direito do rato numa célula e escolha **Mostrar histórico de edições** para ver quem alterou essa célula. O Google indica alterações que podem não aparecer aí:

- linhas e colunas adicionadas ou eliminadas;
- alterações ao formato da célula;
- alterações feitas antes de uma versão anterior ter sido restaurada;
- alterações feitas por fórmulas.

Este último ponto é importante numa folha baseada em fórmulas: as células `Disponível` mudam através de fórmulas, por isso o respetivo histórico de edições não explica um novo número. As linhas do registo de movimentos explicam. Há mais detalhes em [Saber quem alterou uma célula](/pt/ajuda/google-sheets/quem-alterou-uma-celula).

### Notificações de edição

Clique em **Ferramentas → Definições de notificação → Editar notificações** para receber um e-mail quando outras pessoas alterarem a folha de cálculo, de imediato ou num resumo diário. O Google indica que [só pode configurar notificações para si](https://support.google.com/docs/answer/91588?hl=pt).

## Limites do Google Sheets a prever

Estes são os limites que o Google documenta, consultados a 28 de outubro de 2026. A lista completa, com o que fazer perto de cada um, está em [Limites do Google Sheets para inventário](/pt/ajuda/google-sheets/limites).

| Limite | O que o Google documenta |
|---|---|
| Células por folha de cálculo | Até 20 milhões de células ou 100 MB para folhas de cálculo criadas no Google Sheets ou convertidas para este formato ([limites de ficheiros do Drive](https://support.google.com/drive/answer/37603?hl=pt)). O Google aumentou-o de 10 milhões em setembro de 2026 ([Workspace Updates](https://workspaceupdates.googleblog.com/2026/09/doubled-cell-limits-in-google-sheets-now-generally-available.html)) |
| Pessoas a editar ao mesmo tempo | Só é possível editar ativamente um ficheiro Google num máximo de 100 separadores ou dispositivos abertos em simultâneo ([limites de partilha](https://support.google.com/drive/answer/2494822?hl=pt)) |
| Partilha | Até 600 endereços de e-mail individuais por ficheiro ([limites de partilha](https://support.google.com/drive/answer/2494822?hl=pt)) |
| Versões com nome | Até 15 por folha de cálculo ([histórico de versões](https://support.google.com/docs/answer/190843?hl=pt)) |
| IMPORTRANGE | Limitado a 10 MB de dados recebidos por pedido; verifica se há atualizações a cada hora enquanto o documento está aberto ([IMPORTRANGE](https://support.google.com/docs/answer/3093340?hl=pt)) |

Um registo de movimentos cresce uma linha por movimento. Com 8 colunas, 1000 movimentos por mês acrescentam 8000 células por mês, cerca de 96 000 por ano. A maioria das equipas pequenas nunca atinge o limite de células, mas os ficheiros grandes ficam lentos muito antes disso. Arquive os anos fechados num ficheiro separado e transporte o saldo final como uma linha `Adjust` por artigo e localização.

## Quando o Google Sheets, por si só, deixa de ser suficiente

A estrutura acima funciona bem para algumas pessoas cuidadosas. À medida que a equipa cresce, estas lacunas começam a custar tempo ou dinheiro.

- **Edições simultâneas.** O Google Sheets mostra as edições em tempo real, mas nada impede duas pessoas de alterarem a mesma linha, ou alguém de ordenar o registo enquanto outra pessoa escreve. Nada verifica uma alteração antes de ela ser aplicada.
- **Sem aprovações.** Qualquer editor pode registar um ajuste de 500 unidades ou alterar um ponto de encomenda. Não existe nenhum passo em que uma segunda pessoa o reveja primeiro.
- **Um histórico difícil de auditar.** O histórico de versões é agrupado e [as revisões podem ser unidas ocasionalmente](https://support.google.com/docs/answer/190843?hl=pt). O histórico de edições das células ignora resultados de fórmulas, linhas inseridas e eliminadas e alterações de formato, e um restauro limpa-o. O proprietário de um ficheiro numa Conta Google pessoal pode eliminar permanentemente as versões sem nome. Nada prova que o histórico que vê está completo.
- **Substituições acidentais.** Uma colagem no intervalo errado ou um «preencher para baixo» longe demais altera centenas de linhas do registo de uma só vez. O histórico de versões pode recuperá-las, se alguém der por isso.
- **As permissões são ao nível do ficheiro.** Um editor pode editar todos os separadores e todas as localizações, a menos que crie proteções à mão, e a proteção não é uma medida de segurança, segundo a descrição do próprio Google. Não é possível dizer «esta pessoa só regista movimentos do armazém norte».
- **As regras estão na cabeça das pessoas.** «Nunca editar linhas antigas» e «acrescentar sempre uma referência» são convenções. A folha não as impõe.

Se isto lhe parece familiar, tem três opções: aceitar o risco, mudar para um sistema de inventário separado ou manter a folha e acrescentar-lhe controlo.

## Como o LightInventory acrescenta controlo à mesma folha

O LightInventory é uma aplicação de inventário construída sobre uma folha do Google Sheets que lhe pertence. Está em desenvolvimento e ainda não está disponível ao público em geral. Usa a mesma estrutura de registo de movimentos deste guia, e a aplicação impõe as regras acima em vez de as deixar entregues às convenções.

- **Os seus dados ficam na sua folha.** Artigos, localizações, movimentos e o registo de alterações são separadores da sua própria folha de cálculo. Se deixar de utilizar o LightInventory, fica com o ficheiro.
- **Todas as alterações são registadas.** Cada alteração é escrita num separador `Log` com quem a fez, quando, o valor antes e o valor depois. Os erros são corrigidos com uma entrada compensatória, nunca apagando o histórico.
- **Histórico à prova de adulteração.** Uma cadeia de hashes com chave do registo, sem os seus valores, é guardada fora do seu ficheiro e ancorada externamente, por isso uma linha do registo editada ou eliminada às escondidas falha a verificação. Consulte o [registo de auditoria](/pt/funcionalidades/registo-de-auditoria).
- **Aprovações.** Escolhe que alterações precisam de aprovação, por exemplo alterações de preço. O revisor não pode ser a pessoa que pediu a alteração.
- **Funções.** Proprietário, Administrador, Aprovador, Editor e Leitor, com a opção de limitar Editores e Leitores a determinadas localizações. Os membros da equipa trabalham na aplicação e não são adicionados ao ficheiro, a menos que o proprietário lhes conceda edição direta.
- **Deteção de edições diretas.** Se alguém editar a folha diretamente, o LightInventory deteta a alteração e trata-a de acordo com a sua política: bloqueá-la até um proprietário a adotar ou restaurar, registá-la automaticamente ou enviá-la para aprovação.

Há um plano Free para 1 utilizador e 1 folha de cálculo. O plano Team custa 2,99 € por utilizador por mês com faturação mensal, ou 2,49 € com faturação anual, impostos não incluídos. Os detalhes estão em [preços](/pt/precos), e a forma como os seus dados e o acesso são tratados está em [segurança](/pt/seguranca).
