문제

Excel 스프레드시트의 모든 셀을 살펴보고 셀의 값을 확인하면 됩니다.셀에는 텍스트, 숫자가 포함되거나 비어 있을 수 있습니다.저는 'Range'라는 개념을 작업하는 것이 그다지 익숙하지 않습니다/편하지 않습니다.따라서 모든 샘플 코드를 높이 평가하겠습니다.(Google에서 검색해 보았지만 찾은 코드 조각은 내가 필요한 기능을 제대로 수행하지 못했습니다.)

감사합니다.

도움이 되었습니까?

해결책

Sub CheckValues1()
    Dim rwIndex As Integer
    Dim colIndex As Integer
    For rwIndex = 1 To 10
            For colIndex = 1 To 5
                If Cells(rwIndex, colIndex).Value <> 0 Then _
                    Cells(rwIndex, colIndex).Value = 0
            Next colIndex
    Next rwIndex
End Sub

이 스니펫을 찾았습니다. http://www.java2s.com/Code/VBA-Excel-Access-Word/Excel/Checksvaluesinarange10rowsby5columns.htm 셀의 값을 순서대로 확인하는 방법을 설명하는 함수로 꽤 유용할 것 같습니다.

일종의 2D 배열이라고 상상하고 동일한 논리를 적용하여 셀을 반복하십시오.

다른 팁

사용 중인 셀만 확인해야 하는 경우 다음을 사용할 수 있습니다.

sub IterateCells()

   For Each Cell in ActiveSheet.UsedRange.Cells
      'do some stuff
   Next

End Sub

A1부터 데이터가 있는 마지막 셀(가장 오른쪽 아래 셀)까지 범위의 모든 항목에 도달합니다.

셀 값만 보는 경우 변형 유형의 배열에 값을 저장할 수 있습니다.배열의 요소 값을 가져오는 것이 Excel과 상호 작용하는 것보다 훨씬 빠를 수 있으므로 단일 셀을 반복적으로 가져오는 것과 비교하여 모든 셀 값의 배열을 사용하는 경우 성능에 약간의 차이가 있음을 확인할 수 있습니다.

Dim ValArray as Variant
ValArray = Range("A1:IV" & Rows.Count).Value

그런 다음 ValArray(row,column)를 확인하여 셀 값을 얻을 수 있습니다.

For Each를 사용하여 정의된 범위의 모든 셀을 반복할 수 있습니다.

Public Sub IterateThroughRange()

Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range

Set wb = Application.Workbooks(1)
Set ws = wb.Sheets(1)
Set rng = ws.Range("A1", "C3")

For Each cell In rng.Cells
    cell.Value = cell.Address
Next cell

End Sub

VB 또는 C# 앱의 경우 이를 수행하는 한 가지 방법은 Office Interop을 사용하는 것입니다.이는 작업 중인 Excel 버전에 따라 다릅니다.

Excel 2003의 경우 이 MSDN 문서를 참조하는 것이 좋습니다.Visual Studio 2005 개발자의 관점에서 Excel 개체 모델 이해

기본적으로 다음을 수행해야 합니다.

  • Excel 응용 프로그램을 시작합니다.
  • Excel 통합 문서를 엽니다.
  • 이름이나 색인으로 통합 문서에서 워크시트를 검색합니다.
  • 범위로 검색된 워크시트의 모든 셀을 반복합니다.
  • 마지막 단계에 대해 아래에서 발췌한 샘플(테스트되지 않은) 코드입니다.

    Excel.Range allCellsRng;
    string lowerRightCell = "IV65536";
    allCellsRng = ws.get_Range("A1", lowerRightCell).Cells;
    foreach (Range cell in allCellsRng)
    {
        if (null == cell.Value2 || isBlank(cell.Value2))
        {
          // Do something.
        }
        else if (isText(cell.Value2))
        {
          // Do something.
        }
        else if (isNumeric(cell.Value2))
        {
          // Do something.
        }
    }

Excel 2007의 경우 다음을 시도해 보세요. 이 MSDN 참조.

이를 수행하는 방법에는 여러 가지가 있으며 각 방법에는 장점과 단점이 있습니다.무엇보다도 Worksheet 개체의 인스턴스가 있어야 하며, 사용자가 보고 있는 개체만 원하는 경우 Application.ActiveSheet가 작동합니다.

Worksheet 개체에는 셀 데이터에 액세스하는 데 사용할 수 있는 세 가지 속성(Cells, Rows, Columns)과 셀 데이터 블록을 얻는 데 사용할 수 있는 메서드(get_Range)가 있습니다.

범위 크기 등을 조정할 수 있지만 위에서 언급한 속성을 사용하여 데이터 경계가 어디에 있는지 알아내야 할 수도 있습니다.VSTO 추가 기능은 Excel 애플리케이션 자체의 경계 외부에서 호스팅되므로 Excel에 대한 모든 호출은 오버헤드가 있는 레이어를 통해 전달되어야 하기 때문에 대량의 데이터로 작업할 때 범위의 이점이 분명해집니다.Range를 얻으면 한 번의 호출로 원하는 모든 데이터를 얻거나 설정할 수 있어 성능이 크게 향상될 수 있지만 각 항목을 반복하는 대신 명시적인 세부 정보를 사용해야 합니다.

이 MSDN 포럼 게시물 Range 결과를 배열로 가져오는 방법에 대해 질문하는 VB.Net 개발자를 보여줍니다.

기본적으로 Range를 반복할 수 있습니다.

시트 받기

myWs = (Worksheet)MyWb.Worksheets[1];

관심 있는 범위를 얻으세요. 정말로 모든 셀을 확인하고 싶다면 Excel의 제한을 사용하세요.

Excel 2007 "Big Grid"는 워크 시트 당 최대 행 수를 65,536에서 1 백만 이상으로, 256 (iv)에서 16,384 (XFD)로 열 수를 증가시킵니다.여기에서 http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_BigGridIncreasedLimitsExcel

그런 다음 범위를 반복합니다.

        Range myBigRange = myWs.get_Range("A1", "A256");

        string myValue;

        foreach(Range myCell in myBigRange )
        {
            myValue = myCell.Value2.ToString();
        }

Excel VBA에서 이 함수는 모든 워크시트의 모든 셀 내용을 제공합니다.

Function getCellContent(Byref ws As Worksheet, ByVal rowindex As Integer, ByVal colindex As Integer) as String
    getCellContent = CStr(ws.Cells(rowindex, colindex))
End Function

따라서 셀의 값을 확인하려면 함수를 루프에 넣고 원하는 워크시트에 대한 참조와 셀의 행 인덱스 및 열 인덱스를 제공하면 됩니다.행 인덱스와 열 인덱스는 모두 1부터 시작합니다. 즉, 셀 A1은 ws.Cells(1,1) 등이 됩니다.

내 VBA 기술은 약간 녹슬었지만 이것이 내가 할 일에 대한 일반적인 아이디어입니다.
이를 수행하는 가장 쉬운 방법은 모든 열에 대해 루프를 반복하는 것입니다.

public sub CellProcessing()
on error goto errHandler

    dim MAX_ROW as Integer   'how many rows in the spreadsheet
    dim i as Integer
    dim cols as String

    for i = 1 to MAX_ROW
        'perform checks on the cell here
        'access the cell with Range("A" & i) to get cell A1 where i = 1
    next i

exitHandler:
    exit sub
errHandler:
    msgbox "Error " & err.Number & ": " & err.Description
    resume exitHandler
end sub

색상 구문 강조는 vba를 좋아하지 않는 것 같지만 이것이 어느 정도 도움이 되기를 바랍니다(적어도 작업을 위한 시작점을 제공합니다).

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