0

Excel で値のリストを区切り文字列に変換したいと考えています。非 VBA ソリューションを探していますが、VBA ソリューションがある場合は投稿してください。その方法を確認できます。

回したい

  • アフィリエイト
  • ハブ
  • DC
  • フランチャイズ
  • 本社

に: アフィリエイト > ハブ > DC > フランチャイズ > HQ

これが私の現在のコードです

このコードは機能しますが、洗練されておらず、より多くのリスト項目に展開するのが困難です

=CONCATENATE(U3, IF(W3="","",LuKeyPathDelimiter), W3, IF(Y3="","",LuKeyPathDelimiter), Y3, IF(AA3="","",LuKeyPathDelimiter), AA3, IF(AC3="","",LuKeyPathDelimiter), AC3)

ここにいくつかのスクリーンショットがあります

4

2 に答える 2

1

これが私のバージョンのVBAソリューションであり、高い評価を受けています。

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

Dim cell As range
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

他の回答と似ていますが、バリアントアレイの使用など、速度と効率にいくつかの基本的な違いがあります。

于 2013-01-30T06:56:34.900 に答える
1

ワークシート関数の代わりに次の VBA 関数を使用するのが好きです。指定した区切り文字を使用して、セルの範囲を連結できます。

  Function Concat(useThis As Range, Optional delim As String) As String
     ' this function will concatenate a range of cells and return the result as a single string
     ' useful when you have a large range of cells that you need to concatenate
     ' source: http://chandoo.org/wp/2008/05/28/how-to-add-a-range-of-cells-in-excel-concat/

     Dim retVal As String, dlm As String, cell As Range
     retVal = ""

     If delim = Null Then
        dlm = ""
     Else
        dlm = delim
     End If

     For Each cell In useThis
        If CStr(cell.Value) <> "" And CStr(cell.Value) <> " " Then
           retVal = retVal & CStr(cell.Value) & dlm
        End If
     Next

     If dlm <> "" Then
        retVal = Left(retVal, Len(retVal) - Len(dlm))
     End If

     Concat = retVal

  End Function
于 2013-01-29T23:15:43.320 に答える