29598


やりたいことの詳細は下記の通りです

①セルAをアクティブにして、文字列を入力する  
②セルAのすぐ下のセルを選択すると同時に、セルA内の、入力した文字列のうち、  
一個だけ入力した特定の文字列をReplace関数で２個にする  
※下記のコードでは、自動で２個にしたい文字列を「正」に設定しました。

しかし下記のコードだと、何も反応しません。  
kazのカウントはうまくいっていましたが、置き換えのところが駄目でした。

どなたかアドバイスを頂けないでしょうか。  
よろしくお願いいたします。

[code]

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Dim PrCell As String, i As Long, kaz As Long
    
      '以下では、アクティブになる一つ前(一つ上)のセル内の内容を操作する。
      PrCell = ActiveCell.Offset(-1, 0)       
    
      For i = 1 To Len(PrCell)
    
        'PrCell内の、２個にしたい文字をカウントする
        If Mid(PrCell, i, 1) = "正" Then kaz = kaz + 1     
    
      Next i
    
    　　'文字のカウントの結果が１個だけでありかつ
        If kaz = 1 Then
    
       　　 'PrCellがアクティブでなくなったら
            If PrCell <> ActiveCell.Address Then       
    
               'PrCell内の１個の文字を２個に置き換える
                PrCell = Replace(PrCell, "正", "正正")      
    
            End If
    
        End If
    
    PrCell = ActiveCell.Address
    
    End Sub
    
[/code]


CC BY-SA 3.0
2016-10-16T01:10:42.650
29597
2016-10-16T01:38:45.777
2016-10-16T01:28:13.397
7470
7470
question
excel vba
すぐ上のセル内を操作し、特定の文字列の数を増やしたい


上記のコードでは`PrCell`を`String`型で宣言しているため、`ActiveCell.Offset(-1,
0)`を代入する時点で`String`への変換が発生します。ですので`PrCell`に値を代入しても`ActiveCell.Offset(-1,
0)`の値は変化しません。

ですので変数の型を`Range`に変更してください。この場合代入に`Set`ステートメントを使用するかどうかで挙動が変わりますので、以下のようになります。

[code]

    Dim PrCell As Range, i As Long, kaz As Long
    Set PrCell = ActiveCell.Offset(-1, 0)
    
[/code]

なお最後の`PrCell = ActiveCell.Address`は不要だと思われます。


CC BY-SA 3.0
2016-10-16T01:38:45.777
29598
2016-10-16T01:38:45.777
5750
29597
answer