如何在Excel中使用VBSCript查找合并单元格的开始和结束行?

从VBS脚本中,我必须使用以下格式的Excel书籍:

| 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具有一级和二级类别(文件夹/项目),列B和C保存项目的数据。 这里的麻烦是一个项目可以跨越几行,如图所示; Item1是从第3行到第11行的合并单元格)。

我需要从这个数据创build一个.csv,如下所示:

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

列C中的数据可以被丢弃。

基本上,我需要知道的是如何检测一个单元格是否合并(即每行多于一行的信息) 以及多less行合并在一起。 任何想法?

您可以使用:

 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 

感谢您的回应。 eJames我认为你已经回答了我想知道的一切,如何检测合并的单元格以及FolderName / ItemName赋值。 再次感谢。

我可以写没有问题的CSV,经过仔细检查,我注意到也FOLDERn单元格合并列(AC),所以我也可以检查与先生幸运代码:

 mergedColumns = cellRange.MergeArea.Columns.Count 

如果mergedColumns> 1那么它是一个文件夹名称。

testing合并的单元格是否覆盖了多行:

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