2009-03-24 2 views
5

Из сценария VBS я должен работать с книгой Excel в формате:Как найти начальную и конечную строки объединенных ячеек в Excel с помощью 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 | 
----|-----------|-----------|-----------| 
.. | ... | ... | ... | 

Итак: Колонка A имеет 1-го уровня и категории 2-го уровня (папки/пункты), а столбцы B и C содержат данные для предметов. Проблема состоит в том, что один элемент может охватывать несколько строк, как показано; Item1 - объединенная ячейка из строк с 3 по 11).

Мне нужно создать файл CSV из этих данных, который выглядит следующим образом:

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

Данные в колонке C может быть отброшен.

В принципе, мне нужно знать, как определить, объединена ли ячейка (то есть более чем одна строка информации на элемент) и сколько строк объединено. Есть идеи?

ответ

10

Вы можете использовать:

if (Cell.MergeCells) Then ... 

, чтобы определить, если ячейка является частью объединенного диапазона, и

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

для доступа к значению, содержащейся в этом объединенном диапазоне.

Вот несколько примеров кода, чтобы вы начали. Я опустил детали на самом деле записи файла 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

Чтобы проверить, если слившиеся клетки покрывают более одной Роу:

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

Спасибо за ваши ответы. eJames Я думаю, что вы ответили на все, что я хотел знать, как обнаружить объединенные ячейки, а также назначение FolderName/ItemName. Еще раз спасибо.

я могу написать CSV без проблем, при ближайшем рассмотрении я заметил, что также FOLDERn клетки сливаются столбцы (AC), поэтому, возможно, я могу также проверить с Mister Лаки код:

mergedColumns = cellRange.MergeArea.Columns.Count 

И если mergedColumns> 1, то это имя папки.