我有一些Excel工作表填充了翻译键值对。它包含以下列:版本, langcode ,键和值,它们如下所示:
2.2 | en-GB | label_yes | Yes.
2.2 | de-DE | label_yes | Ja.
2.2 | de-DE | label_no | Nein.
并非所有标签都翻译为所有语言,并且某些翻译不止一次出现。要检查它,我需要一个2D数组,其中行是键,列是语言代码,值是值(所以有点像数据透视表,但是实际值而不是Sum / Count / Avg),如下所示:
| en-GB | de-DE
label_yes | Yes. | Ja.
label_no | | Nein.
语言和标签都没有预定义(每个文件有4700个键值对)所以我不能制作一张包含所有可能值和一些VLOOKUP / HLOOKUP / INDEX / etc魔法的工作表。相反,我可能需要一个处理原始(输入)工作表的VB宏,如下所示:
不幸的是,这超过了我几乎不存在的VBA技能。任何人都可以提供一些指示从哪里开始? "如何处理未知长度的列表"并且"检查该值是否已经在给定的行/列中#34;部分有点朦胧(我认为我可以复制一个单元格... VBA不是我的强项。:()。 谢谢你的帮助。
答案 0 :(得分:0)
你可以从类似的东西开始:
Dim Lan(1 To 5) As String
Dim Value(1 To 1000, 0 To 10) As String
Dim e As Integer
Dim Tmp, Tmp1 As String
Range("F1:M10").ClearContents
e = 1
For i = 2 To 9999
Tmp = Cells(i, 3).Value
If Tmp = "" Then Exit For
tr = False
For k = 1 To e
If Tmp = Value(k, 0) Then
tr = True
Exit For
End If
Next
tr1 = False
Tmp1 = Cells(i, 2).Value
For m = 1 To 5
If Tmp1 = Lan(m) Then
tr1 = True
Exit For
End If
If Lan(m) = "" Then Exit For
Next
If tr1 = False Then
Lan(m) = Tmp1
End If
If tr Then
Value(k, m) = Cells(i, 4)
Else
Value(e, m) = Cells(i, 4)
End If
If tr = False Then
Value(e, 0) = Tmp
e = e + 1
End If
Next
For k = 1 To 5
Cells(1, 6 + k).Value = Lan(k)
Next
For i = 1 To e
Cells(i + 1, 6).Value = Value(i, 0)
For k = 1 To 5
Cells(i + 1, 6 + k).Value = Value(i, k)
Next
Next
内置Matrix,并重新进行重建。