"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Google 스프레드시트: 기간(시간)에 대한 SUMIFS, 2부

Google 스프레드시트: 기간(시간)에 대한 SUMIFS, 2부

2024-11-08에 게시됨
검색:581

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

저번에 기준에 따라 시간을 추가하기 위해 Google 시트에 대한 두 개의 맞춤 수식을 만드는 방법을 보여주는 게시물을 만들었습니다(여기). 내 생각에 그들의 문제는 그들이 융통성이 없다는 것이다. N 기준을 원하면 어떻게 되나요? 이제 가능합니다!

이제 수식은 기간, 기준, 필터 지침 등 3가지 데이터 세트를 사용합니다. 테스트 스프레드시트로 돌아가 보겠습니다.

제목 지속 범주 상태 좋다
화성인 01:00:00 영화 이미 시청했습니다
인터스텔라 02:49:00 영화 이미 시청했습니다 아니요
존 윅 01:30:00 영화 이미 시청했습니다 아니요
어벤져스: 엔드게임 03:00:00 영화 보고 싶어요
기묘한 이야기 00:45:00 시리즈 참석 중
더 위쳐 01:00:01 시리즈 참석 중
만달로리안 00:40:00 시리즈 참석 중
브레이킹 배드 00:50:00 시리즈 이미 시청했습니다
페이퍼 하우스 00:55:00 시리즈 보고 싶어요
왕좌의 게임 01:10:00 시리즈 보고 싶어요

앱 스크립트를 업데이트하겠습니다. 다른 테스트 스프레드시트를 만들고 새 스프레드시트를 시작하는 것이 좋습니다. 시간은 '일반 텍스트'여야 한다는 점을 기억하세요. 코드는 여기에 있습니다:

/**
 * 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);
}

통과했다고 가정해 보겠습니다.

영화 | 나는 이미 그것을 보았다 | 아니요

내 합계는 다음과 같습니다: 04:19:00

그리고 이것을 기본 함수인 =VALUE로 래핑하고 "기간"으로 형식을 지정할 수 있으며 시트는 마치 기본 수식을 사용하는 것처럼 작업 합계로 돌아갑니다.

지난 게시물에서 말씀드린 것처럼 제안이나 질문이 있으면 댓글로 남겨주세요. 포옹.

릴리스 선언문 이 기사는 https://dev.to/casewinter/google-sheets-sumifs-para-duracoes-horas-parte-2-3bf0?1에 복제되어 있습니다. 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다. 그것
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3