如何提示每列创建一个工作表(VBA 或其他方式)

问题描述 投票:0回答:1

我一直在寻找这个答案。如果我更了解 VBA,我现在可能已经弄清楚了。当我搜索标题时,我发现的所有内容都是按 ROW 而不是按列创建创建,或者执行列,但基于列中的标准而不是整个范围(或者主要回答我的问题,但我不知道)如何使其适应我的需要)。

我有一个包含 19 万个客户 ID 的客户列表。我将它们分成 191 列,共 999 列(通过索引公式),每列都有相同的数据标题 (customer_id),加上我希望标记新工作表的唯一标题(这样我就可以将它们另存为自己的工作簿,我已经有可用的 VBA 代码)。

Tldr,我需要将下面的每一列(在一张纸上)制作在自己的工作表中,包括标题,并在工作表上标记为“A 列”(或 B、C 等)。

这是我在一张纸上的一个非常基本的视觉示例(如果格式正确):

| Column A    | Column B    |
| customer_id | customer_id |
| Cell 1      | Cell 3      |
| Cell 2      | Cell 4      |

我对 VBA 足够了解,可以确定有一种方法可以做到这一点(客观上非常简单),但我对 VBA 的了解还不足以实际写出来,或者真正理解其他人问题的结果以及如何根据我的需要修改它。我越四处寻找,就越感到困惑。非常感谢任何帮助,我知道有 VBA 专家,这需要 5 分钟!

excel vba worksheet table-splitting
1个回答
0
投票

以下应该是一个很好的模板供您扩展:

    Sub SplitColumnsToSheets()
        Dim ws As Worksheet
        Dim newWs As Worksheet
        Dim lastCol As Long
        Dim lastRow As Long
        Dim col As Long
        Dim colHeader As String
        Dim colRange As Range
        
        ' Set the worksheet where your columns are
        Set ws = ThisWorkbook.Sheets("Sheet1") ' Change Sheet1 to your sheet's name
        
        ' Find the last column in the sheet
        lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
        
        ' Loop through each column
        For col = 1 To lastCol
            ' Get the column header
            colHeader = ws.Cells(1, col).Value
            
            ' Create a new sheet and name it based on the column header
            Set newWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            newWs.Name = colHeader
    
            
            ' Find the last row in this column
            lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
            
            ' Copy the column with the header to the new sheet
            Set colRange = ws.Range(ws.Cells(1, col), ws.Cells(lastRow, col))
            colRange.Copy newWs.Range("A1")
        Next col
    End Sub

© www.soinside.com 2019 - 2024. All rights reserved.