Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将每行的填充列值提取到Excel中的另一个工作表中_Excel_Vba - Fatal编程技术网

如何将每行的填充列值提取到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

我有一个Excel文件,有数百列和数百行。对于每一行,只有大约五到六列是适用的,并用一些值填充。我想将每行的填充列(包括标题)复制到新工作表中,并删除空列,例如:

原件:

水果种类 绿色 黄的 红色 棕色的 苹果 有时 对 梨 对 香蕉 对
这应该可以做到。如果需要,您可以更改配置部分中的值以进行一些调整

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