Je suis un novice Excel et apprécierais l'aide avec une macro qui fait ce qui suit.
Il y a un total de 58 gènes (colonne A) avec 2 entrées pour chaque gène. L'image ne montre que 4 gènes.
Lors de l'exécution de la macro (via une touche de raccourci), l'utilisateur sera invité à entrer un numéro d'échantillon (Sample1 dans cet exemple), puis la ligne de chaque gène sera copiée-collée dans leurs feuilles respectives (déjà créées). Les gènes portent tous un nom unique. Dans chacune des feuilles de gènes, le numéro de l'échantillon doit être renseigné dans la colonne A.
Je ne peux pas poster plus de 2 captures d'écran. Les feuilles pour les autres gènes doivent contenir les 2 rangées de ce gène avec "Sample1" dans la colonne A.
Une fois que la macro a fini de copier les lignes dans les 58 feuilles (pour les 58 gènes), elle doit revenir à la feuille d’entrée et supprimer les données précédemment collées. L'utilisateur doit être autorisé à coller les données du prochain échantillon, exécuter la macro, entrer le numéro de l'échantillon à l'invite, et les données géniques de cet échantillon sont copiées dans les deux lignes suivantes de leurs feuilles de gènes respectives.
Il existe des données pour des milliers d’échantillons à archiver, et j’espère obtenir une macro capable de le faire.
Edit: Le code maintenant (merci à Mrig) est le suivant:
Sub Macro1()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim lastRow As Long, i As Long, currLastRow
Dim ws As Worksheet, currWS As Worksheet
Dim SampleID As String
SampleIDform.Show
Set ws = ThisWorkbook.Sheets("Input")
lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To ThisWorkbook.Worksheets.Count
Set currWS = ThisWorkbook.Sheets(i)
currLastRow = currWS.Cells(Rows.Count, "A").End(xlUp).Row + 1
With ws.Range("A1", "D" & lastRow)
.AutoFilter Field:=1, Criteria1:=currWS.Name
.Offset(1, 0).Copy currWS.Range("A" & currLastRow)
.AutoFilter
Range("A" & currLastRow).Value = SampleID
End With
Next i
ws.Range("A2", "D" & lastRow).ClearContents
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub
Private Sub OkButton_Click()
SampleID = txtSampleID.Value
Unload Me
End Sub
J'ai ajouté la ligne Range("A" & currLastRow).Value = SampleID
à la boucle with, mais je ne parviens pas à obtenir le SampleID inclus avec chaque feuille de la colonne A.
Qu'est-ce que je fais mal?
la source
Réponses:
Cela devrait faire pour vous:
Hypothèses:
1. La feuille de saisie est votre première feuille de calcul dans le classeur que vous travaillez
2. Toutes les feuilles ont un en-tête.
Gene | Allele | Reads | Sequence
Quelques changements ont été apportés à la réponse donnée par @ user2140261 dans le lien mentionné par @Sun dans les commentaires.
la source
Merci Mrig pour toute votre contribution. Je pense avoir résolu mes problèmes. Mon code est le suivant:
Je ne pouvais pas obtenir la contribution du formulaire utilisateur reconnue pour une raison quelconque et je me suis donc tourné vers la méthode InputBox pour obtenir la saisie de l'utilisateur. Les lignes
currWS.Range("A" & currLastRow).Value = SampleID
etcurrWS.Range("A" & currLastRow + 1).Value = SampleID
incluent le SampleID saisi dans la colonne A des 2 lignes copiées à partir de la feuille d’entrée, pour chaque feuille de gène. S'il y a un moyen plus efficace de le faire, s'il vous plaît faites le moi savoir.Il suffit à l’utilisateur de faire copier les données, d’ouvrir le fichier Excel, d’exécuter le raccourci clavier, puis de saisir le SampleID dans le InputBox.
Merci à tous, spécialement Mrig !!
la source