我正在尝试创建excel VBA子例程或函数,以根据情况返回多个行/列中的值。
例如= DaysOfWeek()
如果在单元格A1中输入此公式,则结果应为 A1-周日 A2-星期一 A3-星期二
以此类推.....
在此问题上的任何链接或任何方向将受到高度赞赏。
我不知道它是否可行,但是我肯定已经看到了返回多行/多列数据的第三方公式。
我真的希望有人可以提供一些有用的指示。
非常感谢。
编辑:我不是要对该函数进行7次调用来获取一周的7天。在A1中,我要输入UDF,并且应该填充A1至A7。
Edit2(21 / Aug / 2019)::我对此进行了进一步的阅读,并意识到UDF将值放置在需要知道哪个工作表和哪个单元格的地方。如果我们使用Application.Caller,这将起作用,它应该告诉UDF必须将结果值放在哪里(即,哪个工作表和哪个单元格)。但是Application.Caller导致
“错误2023”。
进一步阅读后,我意识到可以通过按钮,宏或Auto_Open等调用Application.caller,因此也尝试使用此代码:
Select Case TypeName(Application.Caller)
Case "Range"
Debug.Print Application.Caller.Parent.Name
Case "String"
Debug.Print Application.Caller
Case "Error"
Debug.Print "Error"
Case Else
Debug.Print "unknown"
End Select
调试窗口显示
错误。
我希望有人可以提供帮助。预先感谢。
答案 0 :(得分:0)
尝试此UDF
Option Explicit
Function My_day(n As Byte)
If n > 7 Then n = n Mod 7
My_day = WeekdayName(n)
End Function
在任何单元格中尝试以下公式:
= My_day(COLUMNS($ A $ 1:A1))水平
或
= My_day(Rows($ A $ 1:A1))垂直
答案 1 :(得分:0)
据我所知,不可能使用UDF。我试图使其工作,但似乎Microsoft已将工作表上的更改限制在了以下范围内。
此子项将循环显示您输入的范围,并在输入的范围内循环显示工作日。
Sub Day_Fill()
Dim rng As Range
Dim DayNum As Integer
Set rng = Range(InputBox("Input range")) ' Example A1:A10
DayNum = InputBox("Startday, 1 = Sunday") ' 1-7
For Each c In rng
c.Value = WeekdayName(DayNum, False, vbSunday)
If DayNum = 7 Then DayNum = 0
DayNum = DayNum + 1
Next c
End Sub
最新更新。
这与选择有效。
您在第一个单元格中输入要从哪一天开始,然后选择其余的时间。
然后运行子程序,它将显示以下内容:
Sub Day_Fill()
Dim rng As Range
Dim DayNum As Integer
Set rng = Selection
DayNum = Range(Split(rng.Address, ":")(0)).Value
For Each c In rng
c.Value = WeekdayName(DayNum, False, vbSunday)
If DayNum = 7 Then DayNum = 0
DayNum = DayNum + 1
Next c
End Sub
答案 2 :(得分:0)
免责声明:Excel有时可能会崩溃
Option Explicit
Public Function DaysOfWeek(Destination As Range)
' Destination is the first cell of a desired range to be populated
ActiveSheet.Evaluate "0+GetWeekDays(" & Destination.Address(False, False) & ")"
End Function
Public Sub GetWeekDays(Destination As Range)
Destination.Cells(1).Resize(7, 1).Value = Application.Transpose(Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
End Sub
答案 3 :(得分:0)
您可以尝试以下操作:
将以下公式放在单元格A1
中,然后向下拖动。
=TEXT(TODAY()+ROW()-1,"dddd")
用您的日期更改TODAY()
,例如“ 19.08.2019”(用于本地格式设置日期)
=TEXT("19.08.2019"+ROW()-1,"dddd")
使用此子项:
点击范围,例如A1
,然后运行子波纹管。
Sub DaysOfWeek()
Range(Selection.Address).Offset(0, 0).Resize(7, 1).Value =
Application.Transpose(Array("Sunday", _
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
End Sub
编辑1:
Sub DaysOfWeek()
If Selection.Worksheet.Name = "Sheet1" Then
Range(Selection.Address).Offset(0, 0).Resize(7, 1).Value =
Application.Transpose(Array("Sunday", _
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))
End If
End Sub