2017-11-10 19 views
0

PNEZD(point、northing、easting、elevation、description)を持つポイントのリストは、各ポイントごとにいくつかの属性があります。これらの追加の属性列をスペースで区切られたD列に結合するにはどうすればよいですか?そして、私はボタンを押すことでそれを行うことができますか?VBAを使用してExcelでPNEZD文字列をフォーマットする

10,1000,5000,50,tree birch 12IN 

11,1100,5500,55,tree spruce 10IN 

12,1130,5560,54,powerpole tele wood 12IN guyed 

助けてください:いくつかのポイントの

の例では、私はそれが読まれますので、最後の数を組み合わせたい

10,1000,5000,50,tree,birch,12IN 

11,1100,5500,55,tree,spruce,10IN 

12,1130,5560,54,powerpole,tele,wood,12IN,guyed 

だろう!

答えて

0

VBAでユーザー定義関数を作成し、通常の数式としてワークシートで使用できます。

Excelでは、Alt + F11キーを押してVBAエディタを表示します。そこにCtrl + Rキーを押してプロジェクトエクスプローラを表示または有効にします。 [モジュール]ノードを右クリックし、[挿入] - > [モジュール]を選択します。以下のコードをモジュールに入れます:

Option Explicit 

Public Function GetPnezdLabel(pnezd As Variant) As Variant 
    On Error GoTo errHandler 

    Dim result As Variant 
    Dim parts As Variant 
    Dim lastPartIndex As Long 
    Dim intermediatePartIndex As Long 
    Dim index As Long 

    result = "" 

    parts = Split(CStr(pnezd), ",", Compare:=VbCompareMethod.vbBinaryCompare) 
    lastPartIndex = UBound(parts) 
    intermediatePartIndex = Application.WorksheetFunction.Min(3, lastPartIndex) 

    For index = 0 To intermediatePartIndex 
     result = result & parts(index) & IIf(index < lastPartIndex, ",", "") 
    Next 

    For index = 4 To lastPartIndex 
     result = result & parts(index) & IIf(index < lastPartIndex, " ", "") 
    Next 

Done: 
    GetPnezdLabel = result 
    Exit Function 

errHandler: 
    result = XlCVError.xlErrValue 
    Resume Done 
End Function 

Excelに戻るには、Alt + F11を押します。今度は、A1セルにPNEZD値があると仮定すると、たとえば次のような式を作成できます。 B1は次のようになります。

=GetPnezdLabel(A1) 

と表示されます。

GetPnezdLabel関数の背後にある原則は、パラメータの値をコンマで区切り、その結果をビルドすることです。

0

については、次の式で同じ結果が得られます。

は、あなたのデータを仮定すると、セルD2挿入、次の式で、下にコピーセルA2 です。

=TRIM(LEFT(SUBSTITUTE(A2,",",REPT(" ",199),4),199)) &","& SUBSTITUTE(TRIM(RIGHT(SUBSTITUTE(A2,",",REPT(" ",199),4),199)),","," ")

あなたが式のソリューションを望んでいないことがあり、特にVBAを示してきたように。

関連する問題