it-swarm-ko.tech

Excel VBA 또는 VSTO 2005의 모든 셀을 반복

Excel 스프레드 시트의 모든 셀을 간단히 살펴보고 셀의 값을 확인해야합니다. 셀은 텍스트, 숫자를 포함하거나 비워 둘 수 있습니다. 나는 'Range'의 개념에 익숙하지 않고 편안하지 않습니다. 따라서 모든 샘플 코드를 높이 평가할 것입니다. (나는 그것을 구글하려고했지만, 내가 찾은 코드 스 니펫은 내가 필요한 것을하지 않았다)

감사합니다.

23
Ryan Liang
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 배열의 배열이라고 상상하고 동일한 논리를 적용하여 셀을 반복하십시오.

7
betelgeuce

사용중인 셀만 보려는 경우 다음을 사용할 수 있습니다.

sub IterateCells()

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

End Sub

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

56
cori

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

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

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

5
Jon Fournier

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
3
theo

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 참조 를 시도하십시오.

2
Cory Engebretson

기본적으로 범위를 반복 할 수 있습니다

시트 받기

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

관심있는 범위를 얻으십시오 모든 셀을 정말로 확인하려면 Excel의 한계를 사용하십시오

Excel 2007 "큰 격자"는 워크 시트 당 최대 행 수를 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();
        }
1
w4ik

이를 달성하기위한 몇 가지 방법이 있으며, 각 방법마다 장단점이 있습니다. 가장 먼저, 워크 시트 개체의 인스턴스가 필요합니다. Application.ActiveSheet는 사용자가보고있는 것을 원한다면 작동합니다.

워크 시트 개체에는 셀 데이터 (셀, 행, 열)에 액세스하는 데 사용할 수있는 세 가지 속성과 셀 데이터 블록 (get_Range)을 얻는 데 사용할 수있는 방법이 있습니다.

범위의 크기를 조정할 수는 있지만 위에서 언급 한 속성을 사용하여 데이터의 경계가 어디에 있는지 확인해야 할 수도 있습니다. VSTO 추가 기능은 Excel 응용 프로그램 자체의 경계 외부에서 호스팅되므로 Excel에 대한 모든 호출은 오버 헤드가있는 계층을 통과해야하므로 대량의 데이터를 처리 할 때 범위의 이점이 분명해집니다. 범위를 확보하면 한 번의 호출로 원하는 모든 데이터를 가져 오거나 설정할 수있어 성능상의 이점이 크지 만 각 항목을 반복하는 대신 명시적인 세부 정보를 사용해야합니다.

이 MSDN 포럼 게시물 VB.Net 개발자가 Range의 결과를 배열로 얻는 방법에 대해 질문합니다.

1
TheXenocide

내 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를 좋아하지 않는 것처럼 보이지만 희망적으로 이것은 다소 도움이 될 것입니다 (적어도 작업을 시작할 수있는 출발점을 제공합니다).

  • 브리 스킷 티어
0
Brisketeer

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) 등이됩니다.

0
Martin08