programing

표 열의 모든 셀을 특정 값으로 설정

newsource 2023. 7. 9. 11:13

표 열의 모든 셀을 특정 값으로 설정

저는 현재 헤더가 있는 테이블 형식의 데이터 세트를 작업하고 있습니다.제가 해야 할 일은 특정 열의 모든 셀을 순환하고 내용을 변경하는 것입니다.MSDN에 대한 연구를 통해 나는 루프에 대해 다음과 같은 것을 생각해냈습니다.

for i = 1 to NumRows
    Cells(i,23).Value = "PHEV"
next i

그래서 이것은 23열의 모든 세포를 "PHEV"로 바꿀 것입니다.하지만 저는 제가 직접 작업하는 테이블을 만들지 않기 때문에 제가 관심 있는 컬럼이 23열이 될 것이라고 장담할 수 없습니다.

다음과 유사한 것을 구현하고 싶습니다.

for i = 1 to NumRows
    Cells(i,[@[columnHeader]]).Value = "PHEV"
next i

물론, 저는 그 구문이 부정확하다는 것을 알지만, 그것이 제 목표를 충분히 설명하기를 바랍니다.

만약 이것이 사실이라면.ListObject표(리본에서 표 삽입)를 사용할 수 있습니다..DataBodyRange행 및 열 수를 가져오는 개체입니다.이렇게 하면 머리글 행이 무시됩니다.

Sub TableTest()

Dim tbl As ListObject
Dim tRows As Long
Dim tCols As Long

Set tbl = ActiveSheet.ListObjects("Table1")  '## modify to your table name.

With tbl.DataBodyRange
    tRows = .Rows.Count
    tCols = .Columns.Count
End With

MsgBox tbl.Name & " contains " & tRows & " rows and " & tCols & " columns.", vbInformation

End Sub

머리글 행을 사용해야 하는 경우 대신tbl.DataBodyRange그냥 쓰기tbl.Range.

테이블 이름이 '표 1'이고 필요한 열이 '열'이라고 가정하면 다음을 시도할 수 있습니다.

for i = 1 to Range("Table1").Rows.Count
   Range("Table1[Column]")(i)="PHEV"
next i

표 이름이 "표 1"이고 열 이름이 "열 1"이라고 가정하면 다음과 같습니다.

For i = 1 To ListObjects("Table1").ListRows.Count
    ListObjects("Table1").ListColumns("Column1").DataBodyRange(i) = "PHEV"
Next i

할당하기 전에 열을 검색할 수 있습니다.

Dim col_n as long
for i = 1 to NumCols
    if Cells(1, i).Value = "column header you are looking for" Then col_n = i
next

for i = 1 to NumRows
    Cells(i, col_n).Value = "PHEV"
next i

헤더 이름을 알고 있는 경우 다음을 기준으로 열을 찾을 수 있습니다.

Option Explicit

Public Sub changeData()
    Application.ScreenUpdating = False ' faster for modifying values on sheet

    Dim header As String
    Dim numRows As Long
    Dim col As Long
    Dim c As Excel.Range

    header = "this one" ' header name to find

    Set c = ActiveSheet.Range("1:1").Find(header, LookIn:=xlValues)
    If Not c Is Nothing Then
        col = c.Column
    Else
        ' can't work with it
        Exit Sub
    End If

    numRows = 50 ' (whatever this is in your code)

    With ActiveSheet
        .Range(.Cells(2, col), .Cells(numRows, col)).Value = "PHEV"
    End With

    Application.ScreenUpdating = True ' reset
End Sub

테이블의 위치가 아닌 이름만 알고 테이블의 모든 열의 셀을 반복 표시할 수 있습니다.표가 워크북의 시트 1에 있는 경우:

Dim rngCol as Range
Dim cl as Range
Set rngCol = Sheet1.Range("TableName[ColumnName]")
For Each cl in rngCol
    cl.Value = "PHEV"
Next cl

위의 코드는 헤더 행과 총 행을 제외하고 데이터 값만 순환합니다.테이블의 행 수를 지정할 필요는 없습니다.

이를 통해 열 이름을 사용하여 테이블에서 열 위치를 찾습니다.

Dim colNum as Long
colNum = Range("TableName[Column name to search for]").Column

테이블에서 열의 숫자 위치를 반환합니다.

저는 같은 문제에 부딪혔지만 어떤 포럼도 저를 도울 수 없었습니다. 몇 분 후에 저는 아이디어를 생각해 냈습니다.

match(ColumnHeader,Table1[#Headers],0)

그러면 번호가 반환됩니다.

표의 마지막 열을 찾은 다음 셀을 반복하여 채울 수 있습니다.

Sub test()
    Dim lastCol As Long, i As Integer
    lastCol = Range("AZ1").End(xlToLeft).Column
        For i = 1 To lastCol
            Cells(1, i).Value = "PHEV"
        Next
End Sub

위의 답변 중 어떤 것도 문제를 해결하는 데 도움이 되지 않았기 때문에 각 행에서 특정 (이름이 지정된) 열을 추출할 수 있는 솔루션이 여기에 있습니다.

일부 명명된 열의 값을 사용하여 표를 텍스트로 변환합니다(Yes,No,Maybe 내 ) 엑셀표 myTablemySheet합니다.

Function Table2text()
    Dim NumRows, i As Integer
    Dim rngTab As Range
    Set rngTab = ThisWorkbook.Worksheets("mySheet").Range("myTable")
    ' For each row, convert the named columns into an enumeration
    For i = 1 To rngTab.Rows.Count
        Table2text= Table2text & "- Yes:"   & Range("myTable[Yes]")(i).Value & Chr(10)
        Table2text= Table2text & "- No: "   & Range("myTable[No]")(i).Value & Chr(10)
        Table2text= Table2text & "- Maybe: "& Range("myTable[Maybe]")(i).Value & Chr(10) & Chr(10)
    Next i
  ' Finalize return value 
  Table2text = Table2text & Chr(10)  
End Function

를 위를정의니다합범▁a다로 정의합니다.rngTab우리가 루프하는 것.요령은 사용하는 것입니다.Range("myTable[col]")(i)합니다.coli.

Snitka Sirk의 답변을 조금 수정했습니다.목록 개체 셀을 순환하는 간단한 방법입니다. 예를 들어 열:

Dim cell As Range
For Each cell In ListObjects("NameOfTable").ListColumns("HeaderNameOfColumn").DataBodyRange
    Debug.Print x
Next

언급URL : https://stackoverflow.com/questions/17574969/set-all-cells-in-a-table-column-to-a-specific-value