2016-09-01 9 views
0

スプレッドシートに2つの異なる列を配置してマージし、2つ目の列を削除するにはどうすればよいですか?2列をマージするのに威力を発揮

最初のタイトルは常にPostnr、2番目のタイトルは常にPostortです。私はそれらの間に2つのスペースでこの列をマージしたい。

| Postnr | Postort | 
| 752 65 | Gothenburg | 

私は、コードの実行結果の後に:

Postaddress 
752 65 Gothenburg 

私のコード私はあなたが知らない理解Postnr

Dim rngPostnr As Range 
Set rngPostnr = Range("A1:Z1").Find("Postnr") 
Range(rngPostnr, rngPostnr.End(xlDown)).Select 

答えて

0

を見つけて選択することがどこ 列が配置されています(ただし、最初の行にあります)。

最初の行の最初の反復で列が検出され、見つかった列番号ごとに値が反復処理され、新しい文字列が作成され、列10(または他の列)に書き込まれます。あなたは

はここ

(... 1 lastRowはなど、他のよりも大きいとき)、このような反復処理を停止するとき、などのニーズごとにさらにロジックを追加することができますが、後で費やすことができ、基本的な作業コードです:

ここで
Sub findAndConcat() 

'last column with data 
lColumn = Cells(1, Columns.Count).End(xlToLeft).Column 

'find Postnr and Postort columns 
For i = 1 To lColumn 
    If Cells(1, i) = "Postnr" Then 
     PostnrColumn = i 
     'Convert from column number to column letter 
     PostnrColumnName = Split(Cells(, PostnrColumn).Address, "$")(1) 
    End If 
    If Cells(1, i) = "Postort" Then 
     PostortColumn = i 
     PostortColumnName = Split(Cells(, PostortColumn).Address, "$")(1) 
    End If 
Next i 

Dim PostnrValue As String 
Dim PostortValue As String 
Dim newString As String 

'last row with data per column 
PostnrLastRow = ActiveSheet.Cells(Rows.Count, PostnrColumnName).End(xlUp).Row 
PostortLastRow = ActiveSheet.Cells(Rows.Count, PostortColumnName).End(xlUp).Row 

'Iterating the columns rows and building the new concatinated string 
For i = 2 To PostnrLastRow 
    PostnrValue = Cells(i, PostnrColumn).Value 
    PostortValue = Cells(i, PostortColumn).Value 
    newString = PostnrValue & " " & PostortValue 
    ActiveSheet.Cells(i, 10).Value = newString 
Next i 

End Sub 

は結果である:

result

+0

は、答えを受け入れてください。あなたの質問を解決します(これと将来の回答についても)。 –

+0

は、私はこのエラーを取得1004: アプリケーション定義またはオブジェクト定義のエラー、ラインに関する PostnrLastRow = ActiveSheet.Cells(Rows.Count、PostnrColumnName)あなたはシートどこにする必要があり@Heresh .END(xlUp).Row – Heresh

+0

データは(「ActiveSheet」がコードで使用されている)、コードを実行します。どのシートからでも実行したい場合は、シートを定義して設定し、 'ActiveSheet'の代わりに使用してください。今のところ、_Postr_と_Postort_に関連する列を含むシートを選択し、コードを実行してください。 –

0

あなたはシートの内側に、そして式の納屋であなたは次のようにconcatanate使用することを行いたい場合は、次の=CONCATENATE(A2;" ";B2)

あなたはVBAであなたがのようなものを使用しなければならないことを実現したい場合は、以下:

のActiveCell(Postnrが)最初のセル、および次のセルをある
ActiveCell.Offset(0, 3).Value = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value 

(0,1オフセット| Postort)連結したい第2の部分であり、結果は新しい列にさらに挿入されます。

編集:あなたは、私は別の方法が追加されます十分に明確でない質問なのでenter image description here

編集2:ここでは与えられた例を理解するための結果です。おそらく、最初の列に2番目の列を追加する(列を1つにマージする)必要があります。 これはvbaのみを使用して行うことができます。あなたはそのような何かしなければならない

ActiveCell.Value = ActiveCell.Value & " " & ActiveCell.Offset(0, 1).Value 
0

私はシートでそれを行う方法を理解し、私は、私は、この多くの多くの回毎日を行うので、それをしないマクロを持っていると思います。

私もあなたのVBAを理解していますが、これを動作させるにはセルをマークする必要がありますか、それともpostnr列とpostadadress列を単独で探しますか?シートには多くの列があるため、時間がかかるので、これらの列を見つけてマークする必要はありません。私が何を意味するのか理解していますか?それならば、あなたは歓迎している@Heresh

私が好ましく、ヘッダーと、列を検索し、それらを連結し、それらを削除し、連結された値を持つ新しい列を作成するマクロのように必要

Postaddress

+0

私の答えを参照してください、それは何もマークする必要なしであなた自身の列を探します。また、投稿したテキストは、質問または質問自体にコメントとして追加する必要があります。回答ではなく、回答として投稿しないでください。 –

関連する問題