我一直在寻找这个答案。如果我更了解 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 分钟!
以下应该是一个很好的模板供您扩展:
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