3

私が持っているのは、個別の列に分割したパーツの説明です。すべての列に見出しがありますが、すべての列にすべてのパーツの情報が含まれているわけではありません。たとえば、サイズ、材料、温度が記載されている列もあれば、サイズと温度のみが記載されている列もあります。空白を無視してそれらを連結する機能があります。連結する各セルの前に、列のヘッダーを参照したい。

望ましい結果:

B6に以下を入力する場合 =ConcatenateRangeValve(G6:J6,",")

これらの結果を見たい。[ITEM]バルブ、[TYPE]ゲート、[DIM]28IN

[ ] 内の項目は行 1:1 にあり、ヘッダーを取得するために使用しているのと同じ列でその行を関数が参照するのに問題があります。必要なのは、作業中のセルがスプレッドシート全体のどこにあるかを特定することだと思います。これを行うには、C を定義し、その値を範囲内の最初のセルの列番号として設定し、ループを通過するときに 1 ずつ増やします。私はそれを働かせることができません。他のすべての部分は問題ありません。下記参照:

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



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


    cellArray = cell_range.Value

    With Range("cell_range")
    C = .Column
    End With

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

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

    ConcatenateRangeValve = newString

    End Function

皆さんが提供できる助けを前もって感謝します。

4

3 に答える 3

6

さまざまな方法で実行できますが、シートと同じ方法で範囲内のセルを参照できます。名前付き範囲にヘッダーが含まれている場合:

Range("NamedRange").Cells(1,1)

名前付き範囲がヘッダーのすぐ下から始まる場合:

Range("NamedRange").Offset(-1,0)

他のすべての場合:

Range(Cells(1,Range("NamedRange").Column))

于 2014-11-07T13:35:34.973 に答える
2

これはOPの質問に100%関連しているわけではありませんが、タイトルと将来の読者に関する限り、これはうまくいきました。

Dim Rng As Range, FirstIteminRng As Range
Set Rng = Range("A1:B10")
Set FirstIteminRng = Cells(Rng.Row,Rng.Column)
FirstIteminRng.Select
于 2021-01-30T23:38:17.890 に答える