2016-12-22 9 views
2

シート内の特定のセル内に選択値を表示する質問があります(今はJ1としましょう) したがって、ユーザーがドラッグして選択した場合(マウスで)A1,A2,A3,A4J1の値は"A1:A4"と表示され、その後いくつかのVBAコードIでこれらのセルを連結して ";"で区切られたセルの値を表示します。 問題は、ユーザーが(Ctrlキーを押しながら)順序になっていないセルを選択すると、A1,A5,A11のようになります。 J1の値は連結すると"A1,A5,A11"と表示され、 "#VALUE"エラーが発生します。EXCEL VBA |セルは選択と同じです

セルの値をすべてのセル参照に置き換えることはできますか? との間に「カンマ」を置きます。 それから後ですることができますSubtitute ";"私の質問は少し無知と思われる場合

は、恐れ入ります:)選択のための

私のコード:連結用

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim rng As Range 
Dim s As String 
Set rng = Application.Selection 
If rng.Count < 2 Then 
Range("H1").Value = Cells(Target.Row, Target.Column).Value 
Else 
Range("H1").Value = rng.Address 
End If  
End Sub 

コード:

Function ConcatenateRange(ByVal cell_range As Range, _ 
        Optional ByVal seperator As String) As String 

Dim cell As Range 
Dim lastrow 
Dim choice 
Dim lastrowmodified 
Dim rangy 

Dim newString As String 
Dim cellArray As Variant 
Dim i As Long, j As Long 

cellArray = cell_range.Value 

For i = 1 To UBound(cellArray, 1) 
    For j = 1 To UBound(cellArray, 2) 
     If Len(cellArray(i, j)) <> 0 Then 
      newString = newString & (seperator & cellArray(i, j)) & ";" 
     End If 
    Next 
Next 

If Len(newString) <> 0 Then 
    newString = Right$(newString, (Len(newString) - Len(seperator))) 
End If 

ConcatenateRange = newString 

End Function 

答えて

3

私が正しく理解していれば、あなたが希望を1つのセル、例えばJ1にはすべての値が含まれています。セレクトコロンで区切られた選択されたセルの?もしそうなら、あなたは自分の最初のsub

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Dim rng As Range 
    Set rng = Application.Selection 
    Dim vCell as Range 

    Range("J1").Value = "" 

    ' Cycle through cells in range 
    For each vCell in rng 

     ' Use if so that J1 doesn't start with a semi colon 
     If Range("J1").Value = "" Then 
      Range("J1").Value = vCell.Value 
     Else 
      Range("J1").Value = Range("J1").Value & ";" & vCell.Value 
     End If 


    Next vCell 

End Sub 
+0

はい!まさに、これは私が達成しようとしていたものです。魅力のように働く。あまりにも多くの仲間に感謝:) –

+0

@モハメドフーシャン問題はない、返信のための歓迎 – Wolfie

3

もう一つの方法は、JOIN機能と連動して、文字列の配列を使用することであろう変更することができます。これは不連続な選択のために働きます:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Dim c as Range, i as Integer 
Dim arr() As String 
ReDim arr(0 To Selection.Count - 1) As String 

If Selection.Count < 2 Then 
    Range("J1").Value = Selection.Value 
Else 
    For Each c In Selection.Cells 
     arr(i) = c.Value 
     i = i + 1 
    Next c 
    Range("J1").Value = Join(arr, ";") 
End if 

End Sub 
+1

それも私と一緒に働いた、それは思ったよりもずっと簡単だね。あなたの時間のおかげでおかげで:) –

関連する問題