6
votes

Remplacement des virgules avec des points dans le script Excel

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


3 commentaires

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.


7 Réponses :


0
votes

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


1 commentaires

Ma cellule est une chaîne, et elle contient une virgule ou un point ou les deux.



0
votes

Venir à l'intérieur d'une perspective VB plutôt que de VBA, je regarderais à l'aide de la fonction Remplacer Fonctione plutôt que de boucler.

alors je remplacerais tout d'abord tout , avec ; (ou s'il peut y avoir ; dans le texte que j'utilise autre chose , éventuellement une combinaison de caractères, comme ; +; + ou similaire), remplacez tout . avec , et remplacez enfin tout . ; avec . .
Probablement pas très efficace, mais très facile.


0 commentaires

0
votes

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é: xxx

de sorte que j'ai dit dans ma réponse précédente, je fais 3 appels vers remplacer , mais je les fais pour la chaîne entière plutôt que par caractère dans la chaîne.

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.


1 commentaires

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.



2
votes

Vous pouvez utiliser la méthode de remplacement de l'objet de la plage xxx


0 commentaires

6
votes

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:

Ceci fonctionne Pour moi: xxx


0 commentaires

0
votes

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


0 commentaires

0
votes

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


0 commentaires