1
votes

Comment combiner l'expérience de deux cellules en une seule

Nous avons recueilli des données auprès des participants pour l'emploi. Nous avons maintenant des données sous la forme ci-dessous.

Expérience-1 (Cell1) (5 ans 4 mois) Expérience-2 (Cellule2) (4 ans 9 mois)

Je veux maintenant combiner l'expérience des deux cellules et je veux calculer l'expérience totale comme 10 ans 1 mois


5 commentaires

Cher, L'expérience est toujours x année et y mois.


y aura-t-il des variations telles que x années y mois vs x année y mois ou elles seront toujours x années y mois ou x année y mois d'une manière ou d'une autre? C'est pourquoi j'aimerais que vous modifiiez votre message pour partager plus d'exemples de données. Voulez-vous également juste une somme à la fin des cellules ou avez-vous besoin de additionner l'expérience par d'autres critères tels que l'ID de candidat par exemple?


non, nous voulons juste résumer l'expérience du candidat.


toute aide s'il vous plaît,


Je pense qu'une UDF (fonction définie par l'utilisateur qui est dans vba ) peut être le moyen le plus efficace de résoudre votre cas. Je n'ai pas testé l'UDF fourni par user3819867 mais si vous êtes ouvert à vba , vous voudrez peut-être essayer. Si j'ai le temps, je partagerai ma solution en utilisant des formules Excel qui nécessitent quelques cellules / colonnes d'aide.


3 Réponses :


0
votes

Pour les formules Excel vanille, c'est un peu cependant. En supposant que votre chaîne se trouve dans la cellule A2 , vos valeurs peuvent être calculées en utilisant la logique suivante:
Vous pouvez rechercher le premier nombre avec la formule suivante:

=INT(X1)&" Years " & ROUND((X1-INT(X1))*12;0) & " Months"

et vous pouvez rechercher la dernière chaîne avec la formule suivante:

=TRIM(MID($A2;MIN(SEARCH({0;1;2;3;4;5;6;7;8;9};$A2&"0123456789"));2))*1+TRIM(MID($A2;MAX(ISNUMBER(VALUE(MID($A2;{1;2;3;4;5;6;7;8;9};1)))*{1;2;3;4;5;6;7;8;9})-1;2))/12

En supposant qu'aucun de vos candidats n'a travaillé plus de 99 ans, un TRIM est suffisant:

=TRIM(MID($A2;MAX(ISNUMBER(VALUE(MID($A2;{1;2;3;4;5;6;7;8;9};1)))*{1;2;3;4;5;6;7;8;9})-1;2))

ans et

=TRIM(MID($A2;MIN(SEARCH({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"));2))*1

mois. Pour obtenir un seul nombre pouvant être additionné, vous stockez les années sous forme d'entiers et ajoutez les mois divisés par 12 en tant que partie non entière

=MAX(ISNUMBER(VALUE(MID(A2;{1;2;3;4;5;6;7;8;9};1)))*{1;2;3;4;5;6;7;8;9})

Ces nombres peuvent être additionnés et en résulteront dans 10.83333 . Afin d'obtenir votre chaîne à la fin, vous devrez utiliser une formule sur la somme (dans mon exemple de cellule X1 ), par exemple

=MIN(SEARCH({0;1;2;3;4;5;6;7;8;9};A2&"0123456789"))

Veuillez noter que vous devrez probablement formuler quelque chose d'encore plus complexe à moins que vos utilisateurs ne conservent des données comme 0 ans 6 mois pour des périodes inférieures à 1 an.


0 commentaires

0
votes

Avec une fonction définie par l'utilisateur, il est plus facile d'esquiver les inconvénients majeurs des longues formules vanille:

Function sumyearmonth(rng As Range) As String
Dim rng2 As Range, strArr() As String, runtotal As Double, outYear As Long, outMonth As Long

For Each rng2 In rng ' for each of the cells
    strArr = Split(rng2.Value2, " ") 'splits any sort of string by spaces
    For i = LBound(strArr) To UBound(strArr) ' for each element of the array
        Select Case True
            Case strArr(i) Like "*year*" Or strArr(i) Like "*Year*" 'if it says something like "year", "Year" or "Years"
                runtotal = runtotal + Val(strArr(i - 1)) 'then the running total gets incremented by the preceding item of the array, e.g. 12 (years)
            Case strArr(i) Like "*month*" Or strArr(i) Like "*Month*"  'if it says something like "month", "Month" or "Months"
                runtotal = runtotal + Val(strArr(i - 1)) / 12 'then the running total gets incremented by the preceding item of the array, e.g. 9 (months) /12
        End Select
    Next i
Next rng2
'now we just need to interpret the running total
outYear = Int(runtotal) 'years is the integer part of the running total
outMonth = Round((runtotal - outYear) * 12, 0) 'months is the noninteger part of the running total multiplied by 12 and rounded to the next integer
sumyearmonth = outYear & " Year" & IIf(outYear > 1, "s", "") 'if it's more than 1 year, then years
sumyearmonth = sumyearmonth & " " & outMonth & " Month" & IIf(outMonth > 1, "s", "") 'if it's more than 1 month, then months
End Function

Cette solution ne suppose pas que l'entrée se présente comme Année ET Mois, elle a un bon format de sortie [Année (s)] et vous n'avez pas besoin d'afficher un total cumulé à côté.


0 commentaires

0
votes

Supposons que le libellé des expériences soit toujours sous la forme x année (s) y mois , et que toutes les expériences soient répertoriées dans une colonne comme ci-dessous:

 Exemple

Supposons que vous ayez donné un nom à la liste ci-dessus en tant que List_Exp , vous pouvez utiliser le tableau suivant formule , qui doit être confirmée en appuyant sur Ctrl + Maj + Entrée dans la barre de formule, pour trouver le mois au total en premier:

=INT(Ttl_Mth/12)&" "&"Year"&IF(INT(Ttl_Mth/12)>1,"s","")&" "&MOD(Ttl_Mth,12)&" "&"Month"&IF(MOD(Ttl_Mth,12)>1,"s","")

Ici, j'ai utilisé les fonctions TRIM + MID + SUBSTITUTE + REPT pour extraire le chiffre de l'année et du mois de la chaîne d'origine, qui est {5,4; 4,9; 1,2 ; 1,1; 10,9} à partir de l'exemple ci-dessus, puis utilisez SUMPRODUCT pour calculer le nombre total de mois en recherchant les multiplicateurs correspondants {12,1; 12,1; 12,1; 12,1; 12,1} en utilisant les fonctions IF + ROW + INDEX .

Ensuite, vous pouvez convertir le Total des mois en Années et Mois comme indiqué ci-dessous:

Solution

Si vous ne souhaitez pas utiliser de cellules d'assistance (Cell D3: D6 ) dans l'exemple ci-dessus, vous pouvez donner un nom au Le nombre total de mois correspond à Ttl_Mth et combine les formules suivantes en une seule:

Chiffre pour les années: = INT (Ttl_Mth / 12)

Mot pour les années: ="Year"&IF(INT(Ttl_Mth/12)>1,"s","")

Chiffre pour les mois: =MOD(Ttl_Mth,12)

Mot pour les mois: = "Month" & IF (MOD (Ttl_Mth, 12)> 1, "s" , "")

Combiné:

=SUMPRODUCT(--TRIM(MID(SUBSTITUTE(List_Exp," ",REPT(" ",100)),{1,200},100)),IF(ROW($A$1:INDEX($A:$A,ROWS(List_Exp)))>0,{12,1}))

Veuillez voir ci-dessous un résultat de test pour une nouvelle liste de expériences:

 Résultat du test

[Hint] Je recommande de convertir la liste des expériences en tableau avant de donner un nom à la liste. L'avantage est que chaque fois que vous ajoutez ou remplacez des valeurs dans la liste (qui est en fait un tableau à une colonne), la plage nommée sera automatiquement mise à jour afin que les calculs soient également mis à jour automatiquement.


0 commentaires