2009-03-24 15 views
5

ze skryptu VBS muszę pracować z książki Excel w formacie:Jak znaleźć wiersz początkowy i końcowy scalonych komórek w programie Excel za pomocą programu VBSCript?

|  A  |  B  |  C  | 
----|-----------|-----------|-----------| 
    1 | Header1 | Header2 | Header3 | 
----|-----------|-----------|-----------| 
    2 | FOLDER1 |   |   | 
----|-----------|-----------|-----------| 
    3 | Item1 | 111 | 222 | 
----|   |-----------|-----------| 
    4 |   | Item1Info | Item1Data | 
----|   |-----------|-----------| 
.. |   | ... | ... | 
----|   |-----------|-----------| 
11 |   | 333 | 444 | 
----|-----------|-----------|-----------| 
12 | Item2 | 555 | 666 | 
----|-----------|-----------|-----------| 
13 | FOLDER2 |   |   | 
----|-----------|-----------|-----------| 
14 | Item1 | 777 | 888 | 
----|-----------|-----------|-----------| 
.. | ... | ... | ... | 

Więc: Kolumna A ma 1st poziomu i kategorii 2 poziomie (foldery/pozycji), a kolumny B i C przechowywania danych dla przedmiotów. Problem polega na tym, że jeden element może obejmować kilka rzędów, jak pokazano; Element 1 to scalona komórka z wierszy od 3 do 11).

muszę utworzyć .csv z tych danych, które wygląda następująco:

Header1,Header2,Header3 
111,Item1,FOLDER1 
Item1Info,Item1,FOLDER1 
... 
555,Item2,FOLDER1 
777,Item1,FOLDER2 
... 

Dane w kolumnie C może być odrzucone.

Zasadniczo muszę wiedzieć, jak wykryć, czy komórka jest scalona (to znaczy, więcej niż jeden wiersz informacji na element) i Ile wierszy jest połączonych razem. Dowolny pomysł?

Odpowiedz

10

Można użyć:

if (Cell.MergeCells) Then ... 

celu ustalenia, czy komórka jest częścią połączonego zakresu i

Cell.MergeArea.Cells(1,1).value 

aby uzyskać dostęp do wartości zawartych w tym połączonego zakresu.

Oto przykładowy kod, aby rozpocząć. I pominięto szczegóły faktycznie zapisu pliku CSV:

Public Sub MakeCSV() 
    Dim rowIndex As Integer 
    Dim itemColumn As Range 
    Dim dataColumn As Range 
    Dim itemCell As Range 
    Dim FolderName As String 
    Dim ItemName As String 
    Dim CSVLine As String 

    Set itemColumn = Range("A2:A100") 
    Set dataColumn = Range("B2:B100") 

    For rowIndex = 1 To dataColumn.Rows.Count 
     If dataColumn.Cells(rowIndex, 1).value = "" Then 
      Rem // determine the current folder name 
      FolderName = itemColumn.Cells(rowIndex, 1).value 
     Else 
      Rem // determine the item name (accounting for merged cells) 
      Set itemCell = itemColumn.Cells(rowIndex, 1) 
      If itemCell.MergeCells Then 
       ItemName = itemCell.MergeArea.Cells(1, 1).value 
      Else 
       ItemName = itemCell.value 
      End If 

      Rem // write a line to the CSV file 
      CSVLine = dataColumn.Cells(rowIndex, 1).value 
      CSVLine = CSVLine & "," & ItemName 
      CSVLine = CSVLine & "," & FolderName 
     End If 
    Next rowIndex 
End Sub 
0

Aby sprawdzić, czy scalone komórki obejmują więcej niż jeden rząd:

cellRange = ExcelApplication.Cells(rowIndex, columnIndex)  
mergedColumns = cellRange.MergeArea.Rows.Count 
if mergedColumns > 1 then ' merged 
2

Dzięki za odpowiedzi. eJames Myślę, że odpowiedziałeś na wszystko, co chciałem wiedzieć, jak wykryć scalone komórki, a także przypisanie FolderName/ItemName. Jeszcze raz dziękuję.

mogę napisać CSV bez problemu, po bliższym przyjrzeniu się zauważyłem, że również FOLDERn komórki scalić kolumn (AC), więc prawdopodobnie można również sprawdzić z kodem Mister szczęście:

mergedColumns = cellRange.MergeArea.Columns.Count 

A jeśli mergedColumns> 1 to jest nazwa folderu.

Powiązane problemy