这些是我表的列
**Type** **long_name**
route unamed road
locality yorkshire
sub-locality printon
admin_area_level1 phase-II
PostalCode 490029
street_number 18
route JC park
neighborhood behind A- Cabin
Sub-locality leston k
Sub-locality1 park A
Sub-locality2 St Ben
locality Breach Candy
admin_area_level_2 Dun Street
admin_area_level_1 Parkton
country USSR
postal_code 587644
我想使用HLOOKUP或任何其他查找方法水平查找列,以便我的输出变为
#Street_number #route #intersection #country #admin_area_level_1
NA unamed road NA NA phase-II
18 JC Park NA USSR Parkton
#admin_area_level_2 #admin_area_level_3 #locality #ward #sub-locality
NA NA yorkshire NA NA
Dun Street NA Breach Candy NA leston k
#premises #PostalCode
NA 490029
NA 587644
为此,我尝试使用HLOOKUP,但似乎没有工作,它将所有值赋予 #NA
=HLOOKUP(Sheet1!J1,'sheet2'!I:J,2,FALSE)
关于如何做到这一点的任何建议。非常感谢任何帮助。
由于
答案 0 :(得分:0)
在此回答中,针对输入数据遵循的规则提出了一些问题。这些观点可能会在评论中提出,但会严重影响500个字符的限制。
下图显示了输入数据和输出中所需的列列表。
在此图片中暂时忽略列E
和列G:H
- 我稍后会再回来。
输入表的列D
中的值(标记为Rec.No
)表示将插入Long_name
值的输出表的记录号。我已手动将值插入此列。我稍后将返回自动计算这些值。
给定Rec.No
值可以计算输出表,如下所示。
在两张图片中,蓝色显示的单元格为公式。
毫无疑问,这种输出计算有不同的方法,我使用了以下方法。
Rec. No.
列中的记录编号(标记为J
)。 K
和L
是几个辅助列。列K
(标记为Starts
)标识输入数据中的哪一行数据(请参见第一张图片)提供当前输出记录的初始行。列L
(标记为Num.Rows
)表示输入表的行数对当前输出记录的贡献。单元格K4
中的公式为=MATCH(J4,D$4:D$19,0)
,而L4
中的公式为=COUNTIF(D$4:D$19,J4)
。OFFSET()
函数中用于定义列B
(标记为Type
)和C
(标记为Long_name
)的范围每个输出记录对应的输入数据。对于第一个输出记录,这些范围分别为OFFSET($B$3,$K4,0,$L4,1)
和OFFSET($C$3,$K4,0,$L4,1)
,它们分别对应$B$4:$B$8
和$C$4:$C$8
- 即列B
和{{{{}}}的部分1}}表示C
列中Rec.No
为1的行。D
中,M4
函数用于标识单元格MATCH()
中的标题出现在第一个{{1}定义的M3
值范围内的位置(范围Type
)。结果在OFFSET()
函数中使用,涉及第二个$B$4:$B$8
范围(INDEX()
),以标识与标题匹配的OFFSET()
值。单元格$C$4:$C$8
中的公式为
Long_name
如果M4
中的标题不匹配,公式将返回=INDEX(OFFSET($C$3,$K4,0,$L4,1),MATCH(M$3,OFFSET($B$3,$K4,0,$L4,1),0))
。 #N/A
中的公式可以复制到M3
,K4
到K5
以及L4
到L5
。 / LI>
醇>
需要注意几个数据问题:
M4
已更正为M4:X5
(从D7
)和单元格admin_area_level_1
到admin_area_level1
(来自D8
)确保输入数据与输出中使用的标题之间的一致性。postal_code
中的结果已计算为PostalCode
(请参阅单元格sub-locality
),而不是OP中指定的printon
。计算结果似乎与输入数据更好地对齐。到目前为止一切顺利,但上面的所有内容都依赖于输入数据的V4
列中手动插入的值。如果要将方法扩展到更大的输入数据集 - 太大而无法考虑手动分配该列 - 那么就有一些问题需要处理。
首先,对于每个输出记录,输入数据的行数明显不同,因此基于简单计数的方法不能用于分配NA
列。
其次,返回第一张图片,标有Rec.No
的列Rec.No
会显示输出的哪一列与E
值匹配。列表Col.No
中的表格中列出了输出列,单元格Type
中的公式为G:H
。此E4
列显示输入数据中=MATCH(B4,$H$4:$H$15,0)
值的排序与输出中这些值的排序不同。例如,在输出列中Col.No
出现在列Type
之后(右侧)的几列,而输入数据locality
值admin_area_level_1
出现之前值Type
。这意味着无法使用基于假设输入数据中locality
值的顺序遵循输出列标题的顺序的方法。
实际上,如果没有OP中指定的输出的好处,就无法确定输入数据的第6行(admin_area_level_1
值Type
)是否实际属于第一个或第二个输出记录。
OP中缺少的是有关Type
值排序的输入数据中遵循的规则的信息
以及强制/可选类型的任何规则。在更明确地规定这些规则之前,在一般情况下,不可能自动实施解决方案。