我目前正在处理一个很大的(超过100MB)工作表,其格式如下:
a;b;c;d;
1;2;3;4;
5;6;7;8;
9;;10;11;
;;12;;
即这是一个二维列,列的长度不均匀。
我正尝试将这种怪异形式重写为以下格式,以将每个值与其各自的第一行值进行协调:
1;a
5;a
9;a
2;b
6;b
3;c
7;c
10;c
12;c ...
到目前为止,我的主要对手是必须识别每个单个值的坐标的挑战。由于我发现的任何查找解决方案始终都需要知道行或列,因此我假设只有脚本才能解决此问题。但是,当我处理脚本时,可能有比依赖过多搜索的表更简单的解决方案来重写此表。
可能使用VBA解决此问题的最佳方法是什么?感谢您的帮助!
答案 0 :(得分:2)
即使您没有发布任何代码,我也可以帮助您,因为我曾经遇到过完全相同的问题。
下一个代码将在第E
和F
列上写入您要求的矩阵:
Sub StackOverflow()
Dim counter As Long: counter = 1
Dim x As Long: Dim y As Integer
With ThisWorkbook.Sheets("Stack")
For y = 1 To 4
For x = 1 To .Columns(y).Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
If .Cells(x, y).Value <> "" Then
.Cells(counter, 5).FormulaR1C1 = .Cells(x, y).Value
.Cells(counter, 6).FormulaR1C1 = ColumnAddress(y)
counter = counter + 1
End If
Next x
Next y
End With
End Sub
Function ColumnAddress(y As Integer) As String
Select Case y
Case 1: ColumnAddress = "a"
Case 2: ColumnAddress = "b"
Case 3: ColumnAddress = "c"
Case 4: ColumnAddress = "d"
End Select
End Function
可以根据您的情况随意调整代码地址(即工作表名称,宏名称和单元格地址)。