2017-02-06 8 views
1

Xと、11より大きいテキスト長のセルをスキャンしたいと思っています。ユーザーに変更を求めるメッセージボックスが表示されます。ユーザーがOKボタンを押すと、X列の値をすべて置き換えます。これは構文ですが、各セルを反復しているわけではありません。新しい名前変更値を入力すると、マクロは依頼を続けますが、列Xの下でセルを反復処理しないように見えます。すべてのセルでテキストを変更する機能

私が望むようにこのマクロ機能を使用するには、何を変更する必要がありますか?

Function ShortenText() 
Dim c As Range 
Dim lRow As Long 
Dim NewValue As String 

    lRow = Cells(Rows.Count, 24).End(xlUp).Row 

    For Each c In Range("X1:X" & lRow) 
     Cells(c.Row, 2) = Len(c) 
     If Len(c) > 11 Then 
      NewValue = Trim(InputBox("What would you like to rename the value") 
      Selection.Replace What:=c.Value, Replacement:=NewValue, LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
     End If 
    Next c 

End Function 
+0

あなたは 'Selection'に対して' Replace'を実行していますが、あなたのコードは決して任意の範囲を 'Select'しません。おそらく 'Selection.Replace'を' Range( "X1:X"&lRow).Replace'に変更すると、現在処理中のセルと同じ値を持つX列のすべてを変更することができますユーザーによって指定された同じ新しい値。しかし、ユーザーが各セルを別の値に変更したい場合(例えば、 "longish string"から "x"への1回の出現と "longish string"から "y"への出現)、おそらく 'c。 Value = NewValue'を実行してください。 – YowE3K

答えて

0

私はあなたのコードを試しました。

Function ShortenText() 
Dim c As Range 
Dim lRow As Long 
Dim NewValue As String 

    lRow = Cells(Rows.Count, 24).End(xlUp).Row 

    For Each c In Range("X1:X" & lRow) 
     Cells(c.Row, 2) = Len(c) 
     If Len(c) > 11 Then 
      NewValue = Trim(InputBox("What would you like to rename the value")) 
      c.Select 
      Selection.Replace What:=c.Value, Replacement:=NewValue, LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False 
     End If 
    Next c 

End Function 

"c.Select"を追加して、トリム機能 ")"を追加します。

+2

単一のセルで 'Replace'だけを実行している場合、' c.Value = NewValue'と言うこともできます。次に、 'Select'や' Replace'は必要ありません。 – YowE3K

関連する問題