如何将每行的填充列值提取到Excel中的另一个工作表中
我有一个Excel文件,有数百列和数百行。对于每一行,只有大约五到六列是适用的,并用一些值填充。我想将每行的填充列(包括标题)复制到新工作表中,并删除空列,例如: 原件: 水果种类 绿色 黄的 红色 棕色的 苹果 有时 对 梨 对 香蕉 对如何将每行的填充列值提取到Excel中的另一个工作表中,excel,vba,Excel,Vba,我有一个Excel文件,有数百列和数百行。对于每一行,只有大约五到六列是适用的,并用一些值填充。我想将每行的填充列(包括标题)复制到新工作表中,并删除空列,例如: 原件: 水果种类 绿色 黄的 红色 棕色的 苹果 有时 对 梨 对 香蕉 对 这应该可以做到。如果需要,您可以更改配置部分中的值以进行一些调整 Sub organize() Dim row_header As Integer, total_cols As Long, col_n As Long Dim target_next_row
这应该可以做到。如果需要,您可以更改配置部分中的值以进行一些调整
Sub organize()
Dim row_header As Integer, total_cols As Long, col_n As Long
Dim target_next_row As Long, target_next_col As Long
Dim row_n As Long, new_sheet As String, main As String
Dim counter As Long, db_col_start As Integer, last_row As Long
'CONFIG
'---------------------------
row_header = 1 'in what row is the header?
db_col_start = 1 'in what col number does the data start?
main = "Sheet1" 'sheet name with the data set
new_sheet = "New Sheet" 'name of the sheet to create
'---------------------------
target_next_row = 3
'create new sheet
Sheets.Add.Name = new_sheet
'tranfer "Type of Fruit" title to new sheet
Sheets(new_sheet).Cells(1, 1) = Sheets(main).Cells(row_header, db_col_start)
Sheets(new_sheet).Cells(1, 1).Font.Bold = True
'get the total number of columns & rows
total_cols = _
Sheets(main).Cells(row_header, Columns.count).End(xlToLeft).Column
last_row = _
Sheets(main).Cells(Rows.count, db_col_start).End(xlUp).Row
For counter = 1 To last_row - row_header
Sheets(new_sheet).Cells(counter * 3, 1) = _
Sheets(main).Cells(row_header + counter, db_col_start)
Next counter
For row_n = row_header + 1 To last_row
target_next_col = 2
For col_n = db_col_start + 1 To total_cols
If IsEmpty(Sheets(main).Cells(row_n, col_n)) = False Then
Sheets(new_sheet).Cells(target_next_row, target_next_col) = _
Sheets(main).Cells(row_header, col_n)
Sheets(new_sheet).Cells(target_next_row, target_next_col).Font.Bold = True
Sheets(new_sheet).Cells(target_next_row + 1, target_next_col) = _
Sheets(main).Cells(row_n, col_n)
target_next_col = target_next_col + 1
End If
Next col_n
target_next_row = target_next_row + 3
Next row_n
End Sub
有关如何提出好问题的指导,请参阅和。请包含一个。请包含代码和/或您迄今为止尝试过的公式,并说明它们的错误,您将很快得到答案。你可以随时发布你的帖子。。这个网站是为了帮助人们自己编写代码,而不是为他们做所有的工作。但是我心情很好。。因此,我想我会尽力帮助你。或者尝试一下数据透视表是否符合你的需要(这是最简单的方法,对此进行一些研究),或者你需要编写一个VBA代码,将其转换为所需的布局(需要大量的工作和VBA技能)。•请注意,这不是代码编写服务,所以您必须自己完成。但是,如果您编写了一些代码,遇到了卡滞或错误,并且对代码有疑问,您仍然可以在这里提问。看,非常感谢你!这很好用!不客气;)行计数变量的类型必须为
Long
。Excel的行数超过了Integer
所能处理的行数。实际上,在VBA中使用Integer
没有任何好处,你可以(除非你需要访问一些旧的API)。我通常使用Integer来表示我知道不会超过30000的数字,主要是为了减少内存使用量。@Gassz根据我给出的链接,看起来这也适用于类型Byte
。