对齐 excel 中的匹配单元格(vbs,宏)
Aligning Matching cells in excel (vbs, macro)
更新(新问题)
此代码会自动隔离那些没有匹配项的。但是,有什么办法可以隔离那些匹配的吗?
TL;DR 版本
所以,基本上,下面是用于匹配 excel 中的单元格的代码,但它不匹配
一切,即使其中一些确实匹配
这是发生的示例:
A B
....
2383 一時間
....
25498 一時間
什么时候应该是
A B
....
2383 一時間 一時間
详情:
http://www.mediafire.com/download/q7ym8qb41ywri0c/Soverflow.txt
附件是用于导入 excel.
的制表符分隔文本
所以,我一直在寻找一种解决方案,用于对齐列中的匹配单元格,但除此之外,它还应该将一行中的其他单元格与移动的内容对齐。我将使用 没有任何匹配项的单元格 用于我自己的目的
它适用于某些单元格,但它不适用于其他单元格,所以我认为代码一定有什么地方没有做。
例如,如果您 运行 代码,您会在单元格 B2383
处看到 一時間
,但如果您按 CTRL+F 进行其他匹配,您会发现它再次出现在 A25498
单元格中。他们应该像其他比赛一样对齐,但出于某种奇怪的原因,它没有。
我是不是用错了宏?我只是将代码复制粘贴到 Developer>Macros>Create>Alt+Q,然后我 运行 它。
Sub test()
Dim a, i As Long, ii As Long, w, x, n As Long
With Range("a3").CurrentRegion
a = .Value
.ClearContents
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(a, 1)
If a(i, 1) <> "" Then
If Not .exists(a(i, 1)) Then
Redim w(1 To UBound(a, 2))
w(1) = a(i, 1): .Item(a(i, 1)) = w
End If
End If
Next
For i = 1 To UBound(a, 1)
If a(i, 2) <> "" Then
If Not .exists(a(i, 2)) Then
Redim w(1 To UBound(a, 2))
Else
w = .Item(a(i, 2))
End If
For ii = 2 To UBound(a, 2)
w(ii) = a(i, ii)
Next
.Item(a(i, 2)) = w
End If
Next
x = Application.Transpose(Application.Transpose(.items))
n = .Count
End With
.Resize(n).Value = x
End With
End Sub
感谢编写代码的人。
您在代码开头的当前区域不准确。
删除空白行,看看情况如何变化。
更新(新问题) 此代码会自动隔离那些没有匹配项的。但是,有什么办法可以隔离那些匹配的吗?
TL;DR 版本 所以,基本上,下面是用于匹配 excel 中的单元格的代码,但它不匹配 一切,即使其中一些确实匹配 这是发生的示例:
A B
....
2383 一時間
....
25498 一時間
什么时候应该是
A B
....
2383 一時間 一時間
详情:
http://www.mediafire.com/download/q7ym8qb41ywri0c/Soverflow.txt 附件是用于导入 excel.
的制表符分隔文本所以,我一直在寻找一种解决方案,用于对齐列中的匹配单元格,但除此之外,它还应该将一行中的其他单元格与移动的内容对齐。我将使用 没有任何匹配项的单元格 用于我自己的目的
它适用于某些单元格,但它不适用于其他单元格,所以我认为代码一定有什么地方没有做。
例如,如果您 运行 代码,您会在单元格 B2383
处看到 一時間
,但如果您按 CTRL+F 进行其他匹配,您会发现它再次出现在 A25498
单元格中。他们应该像其他比赛一样对齐,但出于某种奇怪的原因,它没有。
我是不是用错了宏?我只是将代码复制粘贴到 Developer>Macros>Create>Alt+Q,然后我 运行 它。
Sub test()
Dim a, i As Long, ii As Long, w, x, n As Long
With Range("a3").CurrentRegion
a = .Value
.ClearContents
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(a, 1)
If a(i, 1) <> "" Then
If Not .exists(a(i, 1)) Then
Redim w(1 To UBound(a, 2))
w(1) = a(i, 1): .Item(a(i, 1)) = w
End If
End If
Next
For i = 1 To UBound(a, 1)
If a(i, 2) <> "" Then
If Not .exists(a(i, 2)) Then
Redim w(1 To UBound(a, 2))
Else
w = .Item(a(i, 2))
End If
For ii = 2 To UBound(a, 2)
w(ii) = a(i, ii)
Next
.Item(a(i, 2)) = w
End If
Next
x = Application.Transpose(Application.Transpose(.items))
n = .Count
End With
.Resize(n).Value = x
End With
End Sub
感谢编写代码的人。
您在代码开头的当前区域不准确。
删除空白行,看看情况如何变化。