如何将c#函数转换为excel

如何将c#函数转换为excel,excel,Excel,我不熟悉excel中的函数(我是c#开发人员)。 我的老板让我写一个函数,但我对excel(VBA?)一无所知 问题是: 1个xlsx文件,带有2个选项卡: 每个选项卡包含一个包含3列的表: 名称、id、yesOrNo(字符串) “a”选项卡中的yesOrNo(字符串)列为空(首先) 我需要用“b”选项卡中表格中的数据填充它 表“a”: 选项卡“b”: •每个表中可能有很多行 函数需要这样做(我将用c#编写一个伪代码): •a=选项卡a •b=选项卡b •a.name=选项卡“a”列“

我不熟悉excel中的函数(我是c#开发人员)。 我的老板让我写一个函数,但我对excel(VBA?)一无所知

问题是:

1个xlsx文件,带有2个选项卡:

每个选项卡包含一个包含3列的表: 名称、id、yesOrNo(字符串)

  • “a”选项卡中的yesOrNo(字符串)列为空(首先) 我需要用“b”选项卡中表格中的数据填充它
表“a”:

选项卡“b”:

•每个表中可能有很多行

函数需要这样做(我将用c#编写一个伪代码):

•a=选项卡a
•b=选项卡b
•a.name=选项卡“a”列“name”
函数ab(){
对于(i=2;i
最后,选项卡a中的表将如下所示:

有没有办法把c代码转换成vba?
我应该在哪里写代码呢?

我想这就是你想要的

Option Explicit

Sub Test()

    Dim lastrowA As Long
    Dim lastrowB As Long
    Dim rowA As Long
    Dim rowB As Long
    Dim nameA As String
    Dim nameB As String
    
    ' Get last row on sheet A
    lastrowA = Worksheets("A").Cells.Find("*", SearchOrder:=xlByRows, searchdirection:=xlPrevious).row
    
    ' Get last row on sheet B
    lastrowB = Worksheets("B").Cells.Find("*", SearchOrder:=xlByRows, searchdirection:=xlPrevious).row
    
    ' For each row on sheet A
    For rowA = 2 To lastrowA
        
        ' Get name (A)
        nameA = Worksheets("A").Cells(rowA, 1).Value
        
        ' For each row on sheet B
        For rowB = 2 To lastrowB
        
            ' get name (B) 
            nameB = Worksheets("B").Cells(rowB, 1).Value

            ' if name (B) starts with name (A)...
            If Mid(nameB, 1, Len(nameA)) = nameA Then
            
                ' Update yes or no
                Worksheets("A").Cells(rowA, 3).Value = Worksheets("B").Cells(rowB, 3).Value
                
                ' Exit inner for loop 
                Exit For
                
            End If
            
        Next rowB
        
    Next rowA
    
End Sub
你应该在哪里写代码?(1) Alt+F11打开VBA编辑器。(2) 在项目管理器中,右键单击“插入模块”。(3) 将代码粘贴到新模块中


您可以通过(1)选择开发人员选项卡,(2)单击宏按钮,(3)选择宏并单击运行来运行它。

这就是我最终解决此问题的方法:

  • 单击要显示结果的列
  • 写出这个公式
    =XLOOKUP(B1,'b'!b:b,'b'!C:C)
说明:

xlookup(您不想搜索的值、要搜索的位置、要显示的结果)

  • 答案基于我在问题正文中添加的图像

  • 请确保您已安装XLOOKUP,我根据以下视频下载了它:


**我不知道为什么它还没有安装,我使用的是office 2019。

所以选项卡A变成了选项卡B的副本?不。我需要复制
yesOrNo(string)
列,根据我用伪代码编写的条件,结果看起来像最后一张图片(例如)如果我没弄错的话,我是说结果只是制表同意。。有两个选项卡
a
b
我的意思是结果只是基于选项卡中的数据。我的老板对我说,这太复杂了,他认为如果我使用函数xlookup,我可能可以在一行代码中完成。。有什么办法吗?“用一行代码做”不是最初的问题,如果是的话,我就不会费心回答了。对不起,我不知道
xlookup
函数的存在,它在c#中不存在。。再次抱歉-如果可能的话,我将尝试使用
xlookup
找到方法。
Option Explicit

Sub Test()

    Dim lastrowA As Long
    Dim lastrowB As Long
    Dim rowA As Long
    Dim rowB As Long
    Dim nameA As String
    Dim nameB As String
    
    ' Get last row on sheet A
    lastrowA = Worksheets("A").Cells.Find("*", SearchOrder:=xlByRows, searchdirection:=xlPrevious).row
    
    ' Get last row on sheet B
    lastrowB = Worksheets("B").Cells.Find("*", SearchOrder:=xlByRows, searchdirection:=xlPrevious).row
    
    ' For each row on sheet A
    For rowA = 2 To lastrowA
        
        ' Get name (A)
        nameA = Worksheets("A").Cells(rowA, 1).Value
        
        ' For each row on sheet B
        For rowB = 2 To lastrowB
        
            ' get name (B) 
            nameB = Worksheets("B").Cells(rowB, 1).Value

            ' if name (B) starts with name (A)...
            If Mid(nameB, 1, Len(nameA)) = nameA Then
            
                ' Update yes or no
                Worksheets("A").Cells(rowA, 3).Value = Worksheets("B").Cells(rowB, 3).Value
                
                ' Exit inner for loop 
                Exit For
                
            End If
            
        Next rowB
        
    Next rowA
    
End Sub