2017-02-06 12 views
0

名前付き範囲の隣の列の値に指定された名前付き範囲に列を追加するマクロを作成しようとしています。セル値に基づいて名前付き範囲に列を追加する

より具体的には、範囲B:Gは「家具」と名付けられている。この範囲(AまたはH)の次の列の最初の行の値に応じて、この名前付き範囲に列を追加する必要があります。したがって、セルH1が「家具」の場合、列Hが名前付き範囲「家具」に追加されます。

もちろん、この範囲の隣にある「家具」という名前のすべての列が追加されるように、普遍的な方法でなければなりません。

私はVBAの完全な初心者ですので、以下のコードを作成してください。しかし、それはうまくいかず、しかも一般的なコードではありません。

Range("H1").Select 
If cell.Value = "Furniture" Then 
With Range("Furniture") 
.Resize(.Columns.Count + 1).Name = "Furniture" 
End With 
End If 
+2

フィードバックを送信し、以前に投稿した投稿(新しい投稿を投稿する前に)に「回答者」としてマークする時間を見つけます。こちらをご覧ください:http://stackoverflow.com/questions/41998777/how-to-hide-unhide-columns-added-at-the-borders-of-the-range、ここでhttp://stackoverflow.com/questions/41981782/macro-to-hide-unhide-columns-in-excel –

答えて

1

あなたのシートの構造に関する詳細な情報を提供することができれば、それはあなたが列/行をループしたいか明確ではないので、私は、まともなループであなたを助けることができます。ターゲット範囲は常にすべての列の最初の行に見つかりますか?

今のところ、範囲に列を動的に追加するので、これはうまくいけば助かります。特定の範囲の名前は、選択したセルに由来します。

lastColumn = Range("A1").SpecialCells(xlCellTypeLastCell).Column 


For currentColumn = 1 To lastColumn 

    Cells(1, currentColumn).Activate 

    If Not IsEmpty(ActiveCell.Value) Then 

     targetRange = ActiveCell.Value 

     ActiveCell.EntireColumn.Select 

     On Error Resume Next 

     ActiveWorkbook.Names.Add Name:=targetRange, RefersTo:=Range(targetRange & "," & Selection.Address) 

     If Err <> 0 Then 

      Debug.Print "Identified range does not exists: " & targetRange 

     Else 

      Debug.Print "Identified range found, extended it with " & Selection.Address 

     End If 

    End If 

Next currentColumn 
+0

これは提案されたコードよりもさらに尋ねられたものです...あなたは新しい名前付き範囲を作成しています。 – R3uK

+0

最初の行の値が「家具」の場合は、単に名前付き範囲に列を追加する必要があります。これらの列の間にはギャップがありません。範囲B:Gは「家具」という名前で、H列はこの範囲に追加する必要があります(その後、I、J、Kなど) K、M、またはそのようなもの)。 – kicpereniek

+0

@ R3uKあなたはほぼ正しいです。私はそれも知らなかった:新しい範囲を作成する代わりに、Excelはエラーをスローする - 新しいリビジョンでそれを修正した。それでもなお1つの重大な欠点があります。スクリプトを何度か実行すると、何度も同じ列が追加されます。これには、「追加する列」と「既存の列」の追加のチェック/比較が必要です。 –

関連する問題