2009-12-16 1 views
2

Bonjour à tous vous des gens incroyablesExcel: Rassembler deux formules complexes différentes (unique liste distincte et Split)

Je voulais faire deux choses

  • remplir une liste distincte unique à partir d'une longue liste de répétition valeurs de
  • composant d'extrait d'un texte délimité par un tiret

J'ai trouvé des solutions à chacun de ces problèmes à différents endroits.

liste distincte unique ici: http://www.get-digital-help.com/2009/03/30/how-to-extract-a-unique-list-and-the-duplicates-in-excel-from-one-column/

La formule est

`{=INDEX(A2:A65000,MATCH(0,COUNTIF($B$1:B1,A2:A65000),0))}` 

Où la colonne B est où la liste unique, obtient peuplée


Et extractibles (texte de fractionnement) d'ici: http://spreadsheetpage.com/index.php/tip/the_versatile_split_function/

Function ExtractElement(str, n, sepChar) 
' Returns the nth element from a string, 
' using a specified separator character 
    Dim x As Variant 
    x = Split(str, sepChar) 
    If n > 0 And n - 1 <= UBound(x) Then 
     ExtractElement = x(n - 1) 
    Else 
     ExtractElement = "" 
    End If 
End Function 

La formule ci-dessous montre comment la fonction ExtractElement peut être utilisée dans une formule.

=ExtractElement("546-339-909-944",3,"-") 

Cette formule renvoie 909, le troisième élément de la chaîne (qui utilise un "-" comme délimiteur).


Ce sont grands et résoudre beaucoup de ce que je suis en train de faire. Mais j'essaie aussi de faire ces deux fonctions ensemble dans une autre colonne.

J'ai une colonne avec des valeurs telles que:

Banana - Jaune - Fruit
Sun - Jaune - Star
Sang - Rouge - liquide
sortie - Rouge - Signalisation

J'essaie d'obtenir le résultat en tant que

Yellow
Red

je veux faire tout cela avec des formules et ne veulent pas utiliser des colonnes d'aide. Cela ne me dérange pas VBA (comme vous pouvez le voir, le deuxième lien ici est vba).

Toute aide est appréciée. Merci un million!

Sriram

+0

Est-ce vraiment une exigence de l'utilisateur de le faire sans colonne auxiliaire? Vous pouvez toujours cacher la colonne. Écrire un fichier UDF pour un problème aussi spécifique est assez simple ... mais est-ce vraiment utile d'abstraire un tel problème? –

+0

Certaines de ces réponses sont-elles utiles? – Andrew

+0

Hé les gars, désolé je n'ai pas eu à appliquer ces derniers. Il y a une courbe d'apprentissage que je dois parcourir pour arriver à vérifier cela. Ce sont quelques projets parallèles que je fais au travail. Par conséquent, le retard. J'apprécie vraiment votre aide.La raison pour laquelle j'essaye de faire tout cela sans colonnes auxiliaires est parce que cela va être un travail répétitif et je veux m'assurer qu'il y a aussi peu de travail manuel répétitif impliqué que possible. – Sriram

Répondre

0

Un exemple utilisant ADO.

Dim cn As Object 
Dim rs As Object 
Dim strFile As String 
Dim strCon As String 
Dim strSQL As String 
Dim i As Integer 

''http://support.microsoft.com/kb/246335 

strFile = ActiveWorkbook.FullName 
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ 
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 

Set cn = CreateObject("ADODB.Connection") 
Set rs = CreateObject("ADODB.Recordset") 

cn.Open strCon 

''The connection string is set up for 
''headers, so you can use column names 
''You can substitute a named range 
''for [Sheet8$] 
strSQL = "SELECT DISTINCT " _ 
& "Mid(ColName,Instr(ColName,""-"")+1," _ 
& "InStrRev(ColName,""-"")-Instr(ColName,""-"")-2) " _ 
& "FROM [Sheet8$]" 

rs.Open strSQL, cn, 3, 3 

''Copies the results to a worksheet 
Worksheets("Sheet7").Cells(2, 1).CopyFromRecordset rs 
0

Il y avait quelques liens utiles dans votre question - merci.

Je l'ai fait comme suit en utilisant vos données d'échantillons Banana - Jaune - Fruit Sun - Jaune - Star Sang - Rouge - liquide sortie - Rouge - Signalisation

étape 1 Copié dans le bloc-notes et l'a ouvert dans Excel et a couru à travers le magicien pour extraire les délimiteurs "" et "-". Cela a placé les données sous forme de texte dans 3 colonnes adjacentes que j'ai ensuite nommées list1, list2 et list3 dans les colonnes A, B et C (respectivement dans les plages A2: A5, B2: B5, C2: C5). Il serait préférable d'utiliser une feuille séparée dans le classeur pour le faire. J'ai gardé la première rangée claire.

étape 2 a fusionné les listes de step1 dans une colonne (dans mon cas maintenant la colonne D) à l'aide de la formule suivante à partir de la cellule D2:

{=IFERROR(INDEX(List1,ROWS($D$1:D1)),IFERROR(INDEX(List2,ROWS($D$1:D1)-ROWS(List1)),IFERROR(INDEX(List3,ROWS($D$1:D1)-ROWS(List1)-ROWS(List2)),"")))} 

qui est une formule de matrice qui doit être entré en utilisant CTRL + MAJ + ENTRÉE puis copié. Cette plage que j'ai appelée ListSource (d2: d13). Encore une fois, je n'utilise pas la première rangée.

étape 3 Pour extraire uniquement les doublons dans la colonne E à partir de la cellule E2 cette formule fait l'affaire

{=IFERROR(INDEX(ListSource,MATCH(0,COUNTIF($E$1:E1,ListSource)+IF(COUNTIF(ListSource,ListSource)>1,0,1),0)),"")} 

qui est encore une formule de tableau qui devrait être introduit en utilisant CTRL + SHIFT + ENTRER et copié dans les autres cellules de la colonne. Encore une fois il n'y a rien dans la rangée 1 même si vous pourriez ajouter quelques en-têtes.

Ce produit la sortie désirée jaune rouge

Vous pouvez décider que l'utilisation de l'assistant d'importation est à l'étape 1 ne sont pas strictement une solution de programmation de sorte qu'il peut être possible d'automatiser cette étape.

Espérons que cela aide.

0

Pour le cas spécifique que vous avez montré, j'ai modifié votre formule pour extraire des couleurs en utilisant des formules au lieu d'utiliser le code VBA.

=INDEX(RIGHT(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1),LEN(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))-FIND("-",LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))),MATCH(0,COUNTIF($B$1:B1,RIGHT(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1),LEN(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))-FIND("-",LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1)))),0)) 

Comme la vôtre, il s'agit d'une formule matricielle; alors appuyez sur Ctrl-Entrée.

Vous pouvez ensuite copier & coller cette formule de B2 vers le bas et lorsque vous obtenez #VALUES, il n'y a plus d'uniques. De même, si vous modifiez les valeurs dans la colonne A, vous devrez peut-être copier la formule dans plusieurs cellules si les valeurs uniques augmentent.

Questions connexes