Excel公式或VBA代码,可以帮助我的任务

3lxsmp7m  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(91)
  • 我对VBA编程还是个新手。我尝试使用ChatGPT编写一个公式或VBA代码来执行以下操作。我使用的是Excel 2013

设置的简短说明。
1个工作簿,两张纸。
Sheet1 =“Seznam_izdelanih_baterij”
Sheet2 =“Tabela priklopov po mesecih”
表1:
包含在名为“Tabela 2”的表格中格式化的数据,在D列(“Tip baterije”)中写入了产品的特定名称。可以在整个列中重复指定。在S列(“Datum priklopa”)中写有产品插入网络的日期。日期也可以在整个列中重复,但它们是按顺序写入的。数据从第3行开始。
表2:
包含要在sheet 1中搜索的数据。数据从第3行开始。列B列出了存在于列“尖端电池”中的产品的名称。第3行,从C列开始,包含我感兴趣的月份和年份(例如:C3 = 2023年6月,D3 = 2023年7月,……)
我希望直观地表示B列中定义的特定产品是否在特定月份插入网络。表示应通过在对应于月份和年份以及产品的单元格中标记X来完成。示例:产品6PFP 130于2023年6月6日插入网络。6PFP 130列在单元格B19中。C3中的日期是2023年6月。该函数应该用X填充单元格C19。
任何对这个问题的帮助都将不胜感激。谢谢!
下面是ChatGPT中的VBA代码。它返回空单元格。

Sub AddButton()
    Dim btn As Button
    Dim rng As Range
    Dim macroName As String
    
    ' Define the range where you want to place the button
    Set rng = ThisWorkbook.Worksheets("Tabela priklopov po mesecih").Range("A1")
    
    ' Assign the macro name
    macroName = "MarkProductPlugs"
    
    ' Create the button
    Set btn = rng.Parent.Buttons.Add(rng.Left, rng.Top, rng.Width, rng.Height)
    
    With btn
        .OnAction = macroName ' Assign the macro to the button
        .Caption = "Run Macro" ' Set the button text
        .Name = "btnRunMacro" ' Set the button name (optional)
    End With
End Sub

Sub MarkProductPlugs()
    Dim wsData As Worksheet
    Dim wsSearch As Worksheet
    Dim searchValue2 As String
    Dim tbl As ListObject
    Dim tblData As Range
    Dim tblColumnS As Range
    Dim tblColumnD As Range
    Dim searchDateColumn As Range
    Dim i As Long
    
    On Error GoTo ErrorHandler
    
    Set wsData = ThisWorkbook.Worksheets("Seznam_izdelanih_baterij")
    Set wsSearch = ThisWorkbook.Worksheets("Tabela priklopov po mesecih")
    
    searchValue2 = wsSearch.Range("B3").Value
    
    Set tbl = wsData.ListObjects("Tabela2")
    Set tblData = tbl.DataBodyRange
    Set tblColumnS = tbl.ListColumns("Datum priklopa").DataBodyRange
    Set tblColumnD = tbl.ListColumns("Tip baterije").DataBodyRange
    
    If Not tblColumnS Is Nothing Then
        Set searchDateColumn = wsSearch.Range("C3").Resize(, wsSearch.Cells(3, wsSearch.Columns.Count).End(xlToLeft).Column - 2)
    Else
        ' Handle the case when tblColumnS is empty or not set
        MsgBox "Error: tblColumnS is empty or not set"
        Exit Sub
    End If
    
    For i = 1 To tblData.Rows.Count
        If tblColumnD.Cells(i).Value = searchValue2 Then
            If Not IsError(Application.Match(tblColumnS.Cells(i).Value, searchDateColumn, 0)) Then
                wsSearch.Cells(i + 2, searchDateColumn.Column).Value = "X"
            End If
        End If
    Next i
    
    MsgBox "Macro execution complete."
    
    Exit Sub

ErrorHandler:
    MsgBox "Error: " & Err.Description
End Sub

i7uq4tfw

i7uq4tfw1#

免责声明:我只在应用标签“excel公式”时回答这个问题。
把A1:B5放在Sheet1:
| 项目ID|日期|月|
| - -----|- -----|- -----|
| 一种|2019 - 06 - 13 00:00:00||
| 最佳|2023年4月14日||
| c型|2023年5月1日||
| d的|2023年3月24日||
在C2中,输入=MONTH(B2)并向下拖动。
(note:B列中的所有日期都是excel格式的日期,而不是文本。U应在C列中应用公式后填写数值)
然后,在第2页A1:E5中填写:
| 项目ID| 3| 4| 5个|六|
| - -----|- -----|- -----|- -----|- -----|
| 一种|||||
| 最佳|||||
| c型|||||
| d的|||||
在B2中,输入=IF(MATCH($A2,Sheet1!$A:$A,0)=MATCH(B$1,Sheet1!$C:$C,0),"X",""),然后拖动到E5。
(you将看到B2:C5将相应地填充。)
想法:
使用month()提取月份,如果存在,使用match()获取mathced线。如果不是,将插入“”(空白)。
请分享,如果它工作/不/可以理解。(:

相关问题