yk156511 发表于 2023-12-14 14:13

EXCEL宏

Function FindColumnByKeyword(keyword As String) As Integer
    Dim cell As Range
    Dim columnNumber As Integer
    columnNumber = 1
   
    For Each cell In Range("A:Z")
      If cell.Value Like "*" & keyword & "*" Then
            FindColumnByKeyword = columnNumber
            Exit Function
      End If
      columnNumber = columnNumber + 1
    Next cell
   
    FindColumnByKeyword = 0' 返回0表示未找到
End Function


任意一个单元格,不知道他的列号,只知道单元格里面的内容,除了宏,有函数能实现吗。

小白白兔 发表于 2023-12-14 14:38

我没太理解你的意思,随便写了点,你自己看看对不对吧!
def search(data, target):
    """
    在表格中查找指定的内容,并返回该单元格的行数列数
    """
    for i, row in enumerate(data):
      for j, value in enumerate(row):
            if value == target:
                return (i+1, j+1)
    return None

wapjsx 发表于 2023-12-14 14:39

所能想到的就是用python的 xlwings 或 openpyxl 或 pandas 或xlutils等库来实现。

dtsuifeng 发表于 2023-12-14 14:46

match函数 满足要求不?

kurama1982 发表于 2023-12-14 14:48

在Excel中,没有内置的函数可以直接根据单元格内容查找列号。但是,您可以使用一些内置函数的组合来实现此功能。

下面是一个使用公式的示例,可以根据单元格内容查找列号:

=MIN(IF(A:Z=A1,COLUMN(A:Z),9999))

请注意,这是一个数组公式,需要使用Ctrl+Shift+Enter键盘组合来输入和计算。

这个公式将在A到Z列中查找与A1单元格内容相匹配的值,并返回第一个匹配单元格所在的列号。如果没有找到匹配项,它将返回9999或任何您认为合适的值。

请将A:Z替换为您实际的数据范围,并将A1替换为您要查找的单元格。

注意:此方法仅适用于小范围的数据,因为它需要遍历整个数据范围。如果您的数据范围很大,这种方法可能会导致性能问题。

如果您需要更高效的解决方案,可能需要编写自定义宏或使用其他编程语言(如VBA、Python等)来处理此任务。

wkdxz 发表于 2023-12-14 14:50

Vba 有个 Find函数,效率比遍历单元格更高

jyjjf 发表于 2023-12-14 14:59

你这个是模糊匹配,不好弄

DominickFu 发表于 2023-12-14 15:22

excel
都有宏了:rggrg

文西思密达 发表于 2023-12-14 15:32

match 和 find 组合用就可以

LemonMs 发表于 2023-12-14 16:22

虽然不会弄,但是提供个思路:把整个表读到数组里,查找匹配的内容,然后根据数组的上标、下标确定单元格的行列号,即位置
页: [1] 2
查看完整版本: EXCEL宏