Je veux remplacer une virgule avec DOT et vice-versa
Public Sub VirgulaPunct()
Dim oRow As Range
Dim cell As Range
Dim i As Long, j As Long
Dim MyString As String
Dim aux As String
Application.ScreenUpdating = False
For i = Selection(Selection.Count).Row To Selection.Cells(1, 1).Row Step -1
For j = Selection(Selection.Count).Column To Selection.Cells(1, 1).Column Step -1
MyString = Cells(i, j).Value
For Counter = 1 To Len(MyString)
aux = Mid(MyString, Counter, 1)
If aux = "." Then
MyString = Replace(MyString, ".", ",", 1)
ElseIf aux = "," Then
MyString = Replace(MyString, ",", ".", 1)
End If
Next
Cells(i, j).Value = MyString
Next j
Next i
Application.ScreenUpdating = True
End Sub
7 Réponses :
En regardant vos boucles, vous ne semblez pas que vous visitez une cellule plus d'une fois. Une simple déclaration ne fonctionnerait pas ici?
if(Cells(i,j).Value = ',') Cells(i,j).Value = '.' Elsif(Cells(i,j).Value = '.') Cells(i,j).Value = ',') End
Ma cellule est une chaîne, et elle contient une virgule ou un point ou les deux.
Venir à l'intérieur d'une perspective VB plutôt que de VBA, je regarderais à l'aide de la fonction Code> Remplacer CODE> Fonctione plutôt que de boucler. P>
alors je remplacerais tout d'abord tout , code> avec ; code> (ou s'il peut y avoir ; code> dans le texte que j'utilise autre chose , éventuellement une combinaison de caractères, comme ; +; + code> ou similaire), remplacez tout . code> avec , code> et remplacez enfin tout . ; code> avec . code>.
Probablement pas très efficace, mais très facile. P>
Cela semble être une continuation à ma réponse à votre question précédente, mais si oui, je pense que vous avez mal compris ce que je voulais dire. J'ai pris votre code et je l'ai modifié avec ma suggestion, mais je ne l'ai pas testé: de sorte que j'ai dit dans ma réponse précédente, je fais 3 appels vers Pour une référence future, ce serait probablement mieux si vous avez mis à jour votre question initiale plutôt que de créer un nouveau Et puis vous pourriez laisser un commentaire pour moi sous ma réponse et j'avais vu que vous l'avez fait. p> p> remplacer code>, mais je les fais pour la chaîne entière plutôt que par caractère dans la chaîne. p>
J'ai vu votre 1ère réponse et j'ai essayé mais cela ne fonctionnait pas si bien. Maintenant, si j'essaie la même chose fonctionne. Drôle ... j'étais à la dépêche, alors désolé pour la double question.
Vous pouvez utiliser la méthode de remplacement de l'objet de la plage
Le problème de base est que si les colonnes sont définies comme générales au lieu de texte, même si nous avons changé le "", "pour". " Excell automatiquement cela le changera à nouveau pour un ",".
Pour éviter qu'il est nécessaire de définir une première colonne sous forme de format de texte, puis nous pouvons exécuter la fonction Remplacer: P>
Ceci fonctionne Pour moi: p>
Voici une fonction simple qui coupe votre chaîne à "," en 2 pièces, puis les colle avec un point à la place. Mais cela ne fonctionne que avec une virgule.
Public Function change_comma_to_dot(your_string As String) change_comma_to_dot = Left(your_string, InStr(your_string, ",") - 1) & "." & Mid(your_string, InStr(your_string, ",") + 1) End Function
J'ai essayé la même chose, mais j'ai des résultats inattendus. Je peux faire ce que je veux avec une méthode manuelle de recherche et remplacement. Mais lorsque j'essaie d'automatiser cela avec VBA, je reçois des problèmes de formatage étranges. J'ai essayé les solutions suggérées ici, mais les mêmes problèmes persistent.
Ma solution consiste à utiliser la fonction NumberValue intégrée. P>
Voici une solution qui change un point de passage. Il peut facilement être adapté pour travailler dans l'inverse. P>
Sub ChangeToComma()
Dim c As Range
Dim num As Double
For Each c In Selection
num = Application.WorksheetFunction.NumberValue(c.Value, ".", ",")
c.Value = num
Next
End Sub
En sachant que je ne réponds pas à votre Q, je vais commenter en indiquant que l'un des symboles probablement n'a pas besoin de remplacement et que vous pourriez faire avec la simple suppression de celui-ci. Si tel est le cas, sélectionnez TOUT (cellules.Sélectionnez) et utilisez la macro intégrée (SELECT.REPLACER) (E.G. "," pour "" et "". "Pour", "). Pas de cycles, c'est juste inefficace d'Excel.
duplicata de VBA: changer de point avec virgade et Comman avec DOT dans Excel?
Re-demander la même question n'est pas un comportement acceptable ici. Si vous souhaitez attirer l'attention sur votre question, vous serez autorisé à Placez une prime sur elle après deux jours. Vous pouvez aussi Modifier votre question pour ajouter des informations supplémentaires, ce qui peut rendre votre question plus facile à comprendre et à répondre. Oh, et une autre chose ... s'il vous plaît ne mettez pas des tags dans le titre de la question.