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

EXCEL/VBA

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も包含できるので、結構良い感じ。

コメント

PAGE TOP
Ads Block Detector Powered by codehelppro.com
Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました