- 我对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
1条答案
按热度按时间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线。如果不是,将插入“”(空白)。
请分享,如果它工作/不/可以理解。(: