単一の単語のみを囲む引用符を削除し、二重の単語を囲む引用符を保持する必要があります。
それで...
「オレンジ」、「黄色いバナナ」、「赤いリンゴ」
オレンジ
、「黄色いバナナ」、「赤いリンゴ」
と
"Yellow Banana","Red Apple","Orange"
は次のようになります:
"Yellow Banana","Red Apple",Orange
単一の単語のみを囲む引用符を削除し、二重の単語を囲む引用符を保持する必要があります。
それで...
「オレンジ」、「黄色いバナナ」、「赤いリンゴ」
オレンジ
、「黄色いバナナ」、「赤いリンゴ」
と
"Yellow Banana","Red Apple","Orange"
は次のようになります:
"Yellow Banana","Red Apple",Orange
Sub DeQuoteSingleWords()
Dim c As Range, arr, x
For Each c In Selection.Cells
arr = Split(Trim(c.Value), ",")
For x = LBound(arr) To UBound(arr)
arr(x) = Trim(arr(x))
If InStr(arr(x), " ") = 0 Then
arr(x) = Replace(arr(x), """", "")
End If
Next x
c.Offset(0, 1).Value = Join(arr, ", ")
Next c
End Sub
簡単に説明しましたが、これは機能しますが、リストが適切にフォーマットされていない場合(スペースがない、または句読点が余分にある場合)は最適ではありません:)
テキストの場所やアクセス方法を指定しなかったので、何でもしました:)
Public Sub fixQuotes(ByVal Target As Range)
Dim Words() As String
Dim Word As String
Dim Index As Long
Dim Result As String
Words = Split(Target.Value, " ")
Result = ""
For Index = LBound(Words) To UBound(Words)
Word = Words(Index)
Word = Replace(Word, ",", "")
Word = Replace(Word, ".", "")
If Left(Word, 1) = Chr(34) And Right(Word, 1) = Chr(34) Then
Result = Result & Replace(Words(Index), Chr(34), "") & " "
Else
Result = Result & Words(Index) & " "
End If
Next Index
Target.Value = Result
End Sub
あなたの例を見た後、私は前のものがまったくうまくいかないことがわかります(それはリストアイテムの間にスペースが必要です)
だから私は新しいものを作りました:)
Public Function fixQuotes2(ByVal Text As String) As String
Dim Index As Integer
Dim Character As String
Dim Quote As Boolean
Dim A As Integer
Dim Result As String
Index = 1
Do
If Mid(Text, Index, 1) = Chr(34) And Index < Len(Text) Then
A = 1
Quote = False
Do
Character = Mid(Text, Index + A, 1)
If Character = " " Then
Quote = True
End If
If Character = Chr(34) Then
Exit Do
Else
If Index + 1 >= Len(Text) Then
Exit Do
Else
A = A + 1
End If
End If
Loop
If Quote = True Then
Result = Result & Mid(Text, Index, A + 1)
Else
Result = Result & Mid(Text, Index + 1, A - 1)
End If
Index = Index + A + 1
Else
If Index >= Len(Text) Then
Exit Do
Else
Result = Result & Mid(Text, Index, 1)
Index = Index + 1
End If
End If
Loop
fixQuotes2 = Result
End Function
これは、最初とは異なり、ワークシート関数として使用できます。
注:試してみる前に、自分のものを保存したことを確認してください。(作成時にいくつかの無限ループがありました:p)
Public Sub fixMacro()
ActiveCell.Value = fixQuotes2(CStr(ActiveCell.Value))
End Sub
これをfixQuotes2と一緒に追加すると、マクロリストに「fixMacro」が表示されます。マクロを実行すると、アクティブセルで関数が実行され、その値が固定バージョンに置き換えられます。