문제

나는 방금 VBA에 뛰어 들기 시작했고 약간의 장애물을 쳤다.

50 개 이상의 열, 900 줄의 데이터가있는 시트가 있습니다. 나는 그 칼럼 중 약 10 개를 재구성하고 새 통합 문서에 붙여야합니다.

Book1 열에서 모든 비 냉각 셀을 프로그래밍 방식으로 선택하고 일부 기능을 통해 실행 한 다음 Book2에서 결과를 삭제합니까?

도움이 되었습니까?

해결책

다음 VBA 코드를 사용하면 시작해야합니다. 원래 통합 문서의 모든 데이터를 새 통합 문서에 복사하지만 각 값에 1이 추가되며 모든 빈 셀은 무시됩니다.

Option Explicit

Public Sub exportDataToNewBook()
    Dim rowIndex As Integer
    Dim colIndex As Integer
    Dim dataRange As Range
    Dim thisBook As Workbook
    Dim newBook As Workbook
    Dim newRow As Integer
    Dim temp

    '// set your data range here
    Set dataRange = Sheet1.Range("A1:B100")

    '// create a new workbook
    Set newBook = Excel.Workbooks.Add

    '// loop through the data in book1, one column at a time
    For colIndex = 1 To dataRange.Columns.Count
        newRow = 0
        For rowIndex = 1 To dataRange.Rows.Count
            With dataRange.Cells(rowIndex, colIndex)

            '// ignore empty cells
            If .value <> "" Then
                newRow = newRow + 1
                temp = doSomethingWith(.value)
                newBook.ActiveSheet.Cells(newRow, colIndex).value = temp
                End If

            End With
        Next rowIndex
    Next colIndex
End Sub


Private Function doSomethingWith(aValue)

    '// This is where you would compute a different value
    '// for use in the new workbook
    '// In this example, I simply add one to it.
    aValue = aValue + 1

    doSomethingWith = aValue
End Function

다른 팁

나는 이것에 매우 늦었다는 것을 알고 있지만 여기에 유용한 샘플이 있습니다.

'select the used cells in column 3 of worksheet wks
wks.columns(3).SpecialCells(xlCellTypeConstants).Select

또는

'change all formulas in col 3 to values
with sheet1.columns(3).SpecialCells(xlCellTypeFormulas)
    .value = .value
end with

열에서 마지막으로 사용 된 행을 찾으려면 최종 셀에 의존하지 마십시오. 신뢰할 수 없습니다 (데이터 삭제 후 재설정되지 않음). 대신, 나는 같은 것을 사용합니다

 lngLast = cells(rows.count,3).end(xlUp).row

열의 마지막 행을 찾고 있다면 사용하십시오.

Sub SelectFirstColumn()
   SelectEntireColumn (1)
End Sub

Sub SelectSecondColumn()
    SelectEntireColumn (2)
End Sub

Sub SelectEntireColumn(columnNumber)
    Dim LastRow
    Sheets("sheet1").Select
    LastRow = ActiveSheet.Columns(columnNumber).SpecialCells(xlLastCell).Row

    ActiveSheet.Range(Cells(1, columnNumber), Cells(LastRow, columnNumber)).Select
End Sub

익숙해 져야 할 다른 명령은 복사 및 붙여 넣기 명령입니다.

Sub CopyOneToTwo()
    SelectEntireColumn (1)
    Selection.Copy

    Sheets("sheet1").Select
    ActiveSheet.Range("B1").PasteSpecial Paste:=xlPasteValues
End Sub

마지막으로 다음 구문을 사용하여 다른 통합 문서에서 워크 시트를 참조 할 수 있습니다.

Dim book2
Set book2 = Workbooks.Open("C:\book2.xls")
book2.Worksheets("sheet1")

이것은 완전히 기본이 될 수 있지만 전체 열을 새 스프레드 시트에 복사 한 다음 열을 정렬 할 수 없습니까? 주문 무결성을 유지할 필요가 없다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top