[EXCEL]環境変数path一発整形、文字列結合関数を強化。

pythonの環境構築してて、環境変数のパスを作るのが地味にだるかった。

というわけで、EXCELで文字列結合して作ろうと思ったのだが、標準の関数がいまいち使いにくかったので作成。

基本的には、TEXTJOINと似た感じの作り。TEXTJOINは結合する要素を1個づつ選択しないといけないけど、TEXTJOIN2Dは範囲で指定できる。

また、行方向と列方向で区切り文字の種類を変えることができる。

そのため、下図のような感じで使うと、

C:\Anaconda3\envs\Anaonda_base;C:\Anaconda3\envs\Anaonda_base\Scripts;C:\Anaconda3\envs\Anaonda_base\Library\bin

という感じで、環境変数に設定する文字列を1発で返してくれる。

'指定した区切り文字(strSep)で区切った文字列を返す。
'strSepH: 列方向区切り文字
'strSepV: 行方向区切り文字
'F_IgVoid: TRUEで空のセルを無視
'DirectionV: trueにすると、要素の結合順序方向を垂直方向に行う。
'https://memo-nikki.info/?p=2976
Function TEXTJOIN2D(strSepH As String, strSepV As String, F_IgVoid As Boolean, rng As Range, Optional DirectionV As Boolean = False)
    Dim n As Long, n_row As Long, n_col As Long
    n = rng.Count
    n_row = rng.Rows.Count
    n_col = rng.Columns.Count
    
    Dim sep As String
    Dim i As Long, j As Long, k As Long
    i = 1
    j = 1
    sep = ""
    TEXTJOIN2D = ""
    For k = 1 To n
        If Not (F_IgVoid And "" = rng.Item(i, j)) Then
            If "" = TEXTJOIN2D Then
                sep = ""
            End If
            TEXTJOIN2D = TEXTJOIN2D & sep & rng.Item(i, j)
        End If
        If DirectionV Then
            i = i + 1
            sep = strSepV
            If i > n_row Then
                i = 1
                j = j + 1
                sep = strSepH
            End If
        Else
            j = j + 1
            sep = strSepH
            If j > n_col Then
                j = 1
                i = i + 1
                sep = strSepV
            End If
        End If
    Next
End Function

使い方

この辺を参照

Excel でカスタム関数を作成する

 

感想

取り合えず、この関数一つで、CONCATCONCATENATEも包含できるので、結構良い感じ。

コメントを残す

メールアドレスが公開されることはありません。