sourcecode

테이블 Excel VBA에 새 열 삽입

codebag 2023. 10. 20. 13:38
반응형

테이블 Excel VBA에 새 열 삽입

제가 만들고 있는 워크시트에 몇 가지 문제가 있습니다.표의 특정 위치에 열을 삽입한 후 헤더를 설정하고자 합니다.

잠시 검색해보니 다음과 같은 코드가 있었습니다.

ActiveSheet.Columns(2).Insert

이것은 열을 삽입하는 데 효과가 있지만, 이 후에 표의 머리글을 어떻게 변경해야 할지 잘 모르겠습니다.

또한 저는 이전에 테이블 끝에 열을 추가하고 이름을 짓는 것에 대해 여기서 조언을 받았습니다.

코드는 다음과 같습니다.

Dim oSh As Worksheet
Set oSh = ActiveSheet
Dim oLc As ListColumn
Set oLc = oSh.ListObjects("PropTable").ListColumns.Add

oLc.Name = "XYZ"

이 두 가지 방법을 다양하게 조합해 보았지만 운이 따르지 않습니다.단순히 열을 추가하는 것이 아니라 특정 위치에 열을 삽입하도록 코드의 두 번째 블록을 수정하는 방법은 없습니까?

감사해요.

-션

특정 위치의 테이블에 열을 추가하고 동일한 코드 라인을 사용하여 이름을 지정할 수 있습니다.

Table.ListColumns.Add(2).Name = "New Header"

이렇게 하면 테이블의 두 번째 열의 왼쪽에 열이 추가되고 새 헤더로 이름이 붙여집니다.이름을 알고 있는 열의 왼쪽에 열을 추가하여 코드를 동적으로 만들 수 있습니다.이렇게 하면 새 열의 고정 위치 정수 값을 지정할 필요가 없습니다.

Dim newColNum as Integer
newColNum = Range("Table[Column Name]").Column
Table.ListColumns.Add(newColNum).Name = "New Header"

[Column Name]은 새 열을 삽입할 테이블의 열 이름입니다.테이블에서 임의의 위치를 가질 수 있으며, 해당 값을 정수로 Add에 전달할 수 있습니다.

  Dim Table As ListObject
  Set Table = Sheet1.ListObjects("Table1")
  Table.ListColumns.Add 2
  Table.HeaderRowRange(2) = "New header"

스레드가 오래된 것은 알지만, 여기서 가장 많은 지지를 받은 답변은 위험하고 심각한 문제에 빠질 수 있다는 점을 지적해야 합니다.엑셀 버전에 따라 다른지 모르겠네요 - 저는 엑셀'16을 사용합니다.

col A, col B 및 col C 열을 포함하는 표를 생각해 보겠습니다.

before macro

우리는 "The Dudes" 원-라이너 코드를 사용하며 새 칼럼의 이름을 "Col B"로 지으려고 합니다.이미 존재하지만 어떻게 되는지 확인합니다.

Sub theDude()

  Dim Table As ListObject
  Set Table = ActiveSheet.ListObjects(1)
  
  With Table
  
    ' adding column on the second place
    ' and trying to force its header to "Col B"
    .ListColumns.Add(2).Name = "Col B"
    
    'fill "Col B" with value
    .ListColumns("Col B").DataBodyRange = "test"
    
  End With
  
End Sub

우리가 얻은 것은?결과적으로 4개의 열이 있습니다.

  • 칼라
  • 새로 삽입된 열 1 또는 테이블 열의 다른 DEFAULT NAME (1)
  • Col B - "test" 문자열로 채워진 "이전" B 열
  • 콜씨

after macro

(1) 언어 버전에 따라 다릅니다. 저의 이름은 콜룸나1이고 엑셀에서 자동으로 제공합니다.

가장 나쁜 것은 매크로 실행 후 B 콜의 데이터가 손실된다는 것입니다.따라서 대신 한 줄기(방법 체인)에서 @stenci의 단계별 솔루션을 사용하거나 오류 처리를 추가하는 것이 더 좋습니다. 예:

Sub AddingColumn()

  Dim Table As ListObject
  ' ActiveSheet just for test
  Set Table = ActiveSheet.ListObjects(1)   
  
  Dim newColName As Variant     ' or string / long
      newColName = "Col B"
      
  If headerExists(newColName, Table) Then
 
    Dim tit As String:  tit = "Error"
    Dim txt As String
        txt = "Header " & newColName & " already exists. Macro will be interrupted"

        MsgBox txt, vbOKOnly, tit
        Exit Sub
    
  Else
    
    ' main code goes here *********************
    With Table
      ' adding column on the second place
      ' and trying to force its header to "Col B"
        .ListColumns.Add(2).Name = newColName
      'fill "Col B" with value
        .ListColumns("Col B").DataBodyRange = "test"
    End With
    
  End If
  
End Sub

Function headerExists(ByVal findHeader As String, ByVal tbl As ListObject) As Boolean
    
    Dim pos As Variant     ' position
        pos = Application.Match(findHeader, tbl.HeaderRowRange, 0)
        
        headerExists = Not IsError(pos)

End Function

언급URL : https://stackoverflow.com/questions/17549885/insert-new-column-in-table-excel-vba

반응형