표 열의 모든 셀을 특정 값으로 설정
저는 현재 헤더가 있는 테이블 형식의 데이터 세트를 작업하고 있습니다.제가 해야 할 일은 특정 열의 모든 셀을 순환하고 내용을 변경하는 것입니다.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
내 ) 엑셀표 myTable
mySheet
합니다.
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)
합니다.col
i
.
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
'programing' 카테고리의 다른 글
MongoDB에 대한 쿼리에서 정규식 변수를 사용하려면 어떻게 해야 합니까? (0) | 2023.07.09 |
---|---|
추적 분기란 무엇입니까? (0) | 2023.07.09 |
CSS 불투명도는 텍스트가 아닌 배경색만 가능합니까? (0) | 2023.07.09 |
mongodb 점이 다각형에 있는지 확인합니다. (0) | 2023.07.09 |
관련 없는 구성 요소 간의 Vue 통신 (0) | 2023.07.09 |