问题描述
我的电子表格需要帮助
电子表格看起来像这样:
主机名 | 一个标题 | 另一个标题 |
---|---|---|
host1-dns | 文本 11 | 文本 12 |
host1-ftp | 文本 11 | 文本 12 |
host1-ntp | 文本 11 | 文本 12 |
host1-vip | 文本 11 | 文本 12 |
host2-dns | 文本 21 | 文本 22 |
host2-ftp | 文本 21 | 文本 22 |
host2-ntp | 文本 21 | 文本 22 |
host3-dns | 文本 31 | 文本 32 |
host3-ftp | 文本 31 | 文本 32 |
host4 | 文本 41 | 文本 42 |
host5-sans | 文本 51 | 文本 52 |
我需要创建一个表来消除重复的主机。在我的表中:
- host1-dns、host1-ftp、host1-ntp、host1-vip 只是一台主机,应该算一次
- 主机名(前缀)没有统一的字符数
- 后缀也没有统一的字符数
- 前缀和后缀用连字符分隔
最后,表格应该是这样的:
主机名 | 一个标题 | 另一个标题 |
---|---|---|
host1 | 文本 11 | 文本 12 |
host2 | 文本 21 | 文本 22 |
host3 | 文本 31 | 文本 32 |
host4 | 文本 41 | 文本 42 |
host5 | 文本 51 | 文本 52 |
我愿意接受任何实现、公式或宏。
提前致谢:-)
解决方法
使用公式添加辅助列:
=LEFT(A2,FIND("-",A2&"-")-1)
然后对最后三列使用 Remove duplicates
对话框:
统一表格
- 在此解决方案中,假设您的表格从单元格
A1
开始,具有标题和三列,并且您希望将其替换为结果。
代码
Option Explicit
Sub uniquifyTable()
With Range("A1").CurrentRegion
With .Columns(1).Resize(.Rows.Count - 1).Offset(1)
Dim Data As Variant: Data = .Value
Dim i As Long
For i = 1 To UBound(Data,1)
Data(i,1) = Left(Data(i,1),_
InStr(1,Data(i,1) & "-","-") - 1)
Next i
.Value = Data
End With
.RemoveDuplicates Columns:=Array(1,2,3),Header:=xlYes
End With
End Sub