„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Google Sheets: SUMIFS für Dauern (Stunden), Teil 2

Google Sheets: SUMIFS für Dauern (Stunden), Teil 2

Veröffentlicht am 08.11.2024
Durchsuche:736

Google Sheets: SUMIFS para durações (horas), parte 2

Neulich habe ich einen Beitrag verfasst, der zeigt, wie man zwei benutzerdefinierte Formeln für Google-Tabellen erstellt, um Stunden basierend auf Kriterien hinzuzufügen (hier). Ihr Problem ist meiner Meinung nach, dass sie nicht flexibel waren. Was ist, wenn ich N-Kriterien möchte? Nun, jetzt können Sie es!

Jetzt benötigt die Formel drei Datensätze: die Dauer, die Kriterien und die Filteranweisungen. Kehren wir zur Testtabelle zurück:

Titel Dauer Kategorie Status Wie
Der Marsianer 01:00:00 Film Ich habe es bereits gesehen Ja
Interstellar 02:49:00 Film Ich habe es bereits gesehen NEIN
John Wick 01:30:00 Film Ich habe es bereits gesehen NEIN
Avengers: Endgame 03:00:00 Film Ich möchte zuschauen
Fremde Dinge 00:45:00 Serie Teilnahme
Der Hexer 01:00:01 Serie Teilnahme
Der Mandalorianer 00:40:00 Serie Teilnahme
Wandlung zum Bösen 00:50:00 Serie Ich habe es bereits gesehen Ja
Das Papierhaus 00:55:00 Serie Ich möchte zuschauen
Game of Thrones 01:10:00 Serie Ich möchte zuschauen

Aktualisieren wir unser App-Skript. Ich schlage vor, eine weitere Testtabelle zu erstellen und eine neue zu erstellen. Beachten Sie dabei, dass die Stunden im „Klartext“ angegeben werden müssen. Der Code ist hier:

/**
 * Converte uma string no formato HH:MM:SS para o total em segundos.
 *
 * @param {string} hms - A string no formato HH:MM:SS.
 * @returns {number} O total em segundos.
 */
function converterHMSParaSegundos(hms) {
  const partes = String(hms).split(":");
  const [horas, minutos, segundos] = partes;
  return Number(horas) * 3600   Number(minutos) * 60   Number(segundos);
}

/**
 * Converte um número de segundos para o formato HH:MM:SS.
 *
 * @param {number} segundos - O total de segundos.
 * @returns {string} O tempo no formato HH:MM:SS.
 */
function converterSegundosParaHMS(segundos) {
  const horas = Math.floor(segundos / 3600);
  const minutos = Math.floor((segundos % 3600) / 60);
  const segundosRestantes = segundos % 60;
  return `${String(horas).padStart(2, "0")}:${String(minutos).padStart(
    2,
    "0"
  )}:${String(segundosRestantes).padStart(2, "0")}`;
}

/**
 * Filtra as linhas da matriz de dados com base nos critérios fornecidos e retorna as durações correspondentes.
 *
 * @param {Array} duracoes - Array de durações em formato de texto.
 * @param {Array>} dados - Matriz de dados onde cada linha corresponde a um conjunto de valores.
 * @param {Array} criterios - Array de critérios para filtrar as linhas da matriz de dados.
 * @returns {Array} Retorna as durações que correspondem aos critérios.
 */
function filtroDeLinhas(duracoes, dados, criterios) {
  const linhas_na_matriz = duracoes.length;
  const matriz_de_criterios_concatenada = [];

  for (let linha = 0; linha } duracoes - Array de durações em formato de texto.
 * @param {Array>} intervalo_de_criterios - Matriz de dados onde cada linha corresponde a um conjunto de valores.
 * @param {...string} criterios - Um ou mais critérios para filtrar as linhas da matriz de dados.
 * @returns {string} A soma das durações no formato HH:MM:SS.
 */
function somarHorasComCriterios(
  duracoes,
  intervalo_de_criterios,
  ...criterios
) {
  // Verifica se todos os argumentos são arrays
  if (
    !Array.isArray(duracoes) ||
    !Array.isArray(intervalo_de_criterios) ||
    !Array.isArray(criterios)
  ) {
    return "Passe os intervalos para o cálculo!";
  }

  const horasParaSomar = filtroDeLinhas(
    duracoes,
    intervalo_de_criterios,
    criterios.flat(Infinity)
  );
  const horasEmSegundos = horasParaSomar.map((n) =>
    converterHMSParaSegundos(n)
  );
  const somaDosSegundos = horasEmSegundos.reduce(
    (acumulador, valorAtual) => acumulador   valorAtual,
    0
  );

  return converterSegundosParaHMS(somaDosSegundos);
}

Sagen wir, ich bestehe:

Film | Ich habe es bereits gesehen | NEIN

Meine Summe wäre: 04:19:00

Und denken Sie daran, dass ich dies mit der nativen Funktion =VALUE umschließen und als „Dauer“ formatieren kann und die Blätter zu Arbeitssummen zurückkehren, als ob sie eine native Formel verwenden würden!

Wie ich im letzten Beitrag gesagt habe, hinterlassen Sie Ihre Kommentare mit Vorschlägen oder Fragen. Umarmungen.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/casewinter/google-sheets-sumifs-para-duracoes-horas-parte-2-3bf0?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3