我对VBA编程非常陌生,我整个下午都在谷歌上搜索如何做到这一点并且没有成功。
我有一个电子表格,其中包含1月至12月的列数。我要做的是让用户输入一些值并指定一个月应该粘贴该值。例如:1,2,3,4和10月。我希望10月份的专栏有1,2,3,4。
我的新手想法是输入一个带有值的两个字段,一个要求输入月份名称的字段。然后记录一个宏,复制月份的输入,使用查找功能查找与输入匹配的列,然后在下面的一行然后粘贴值。但是,由于单元格不是动态的,因此不会将其粘贴到正确的单元格中。
这是我一直在使用的代码部分以及问题出现的地方。但是我不认为这是最有效的。
ActiveWindow.ScrollRow = 1
Range("F2:G2").Select
Application.CutCopyMode = False
Range("F2:G2").Select
Selection.Copy
Sheets("2017 Agency Attendence").Select
Cells.Find(What:="november", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Range(N2).Select
答案 0 :(得分:0)
这可能适用于您正在做的事情。我试图评论该程序正在做什么来帮助您了解它是如何工作的。
- 大多数人可以相当快地将一个月转换成一个数字,所以我只是让用户输入一个数字,而不是写一个强烈的代码来查找它。
- 然后用户将输入一个由逗号分隔(分隔)的数字字符串。 VBA内置了一个函数 - [Split Function](https://msdn.microsoft.com/en-us/library/6x627e5f(v=vs.90).aspx) - 它将分隔的字符串转换为数组。
- 授予用户可能想要多次添加数据的权限,我们需要查找任何现有数据的底部,然后粘贴您的数据数组。
Sub FindMonth()
'Initialize Variables
Dim sht As Worksheet
Dim monthNumber As Integer
Dim monthNumberVar As Variant
Dim inputString As String
Dim inputArray As Variant
Dim rowNumber As Long
Dim i As Long
Dim j As Long
Set sht = ThisWorkbook.Sheets(1)
monthNumber = 0
'Prompt for month number
Do
monthNumberVar = InputBox("Please enter number of month", "Month")
'Make sure the input is a number
If IsNumeric(monthNumberVar) Then
monthNumber = Val(monthNumberVar)
Else
MsgBox "Please enter a NUMBER"
End If
If monthNumber < 1 Or monthNumber > 12 Then MsgBox "Please choose a number between 1 -12"
Loop While monthNumber < 1 Or monthNumber > 12
'Prompt for a list of the data//Turn that data into an array
inputString = InputBox("Please enter data seperated by commas", "Input")
inputArray = Split(inputString, ",")
'Find the first empty row in the column
i = 1
Do
rowNumber = i
i = i + 1
Loop Until sht.Cells(i, monthNumber).Value = ""
'Loop through the array and print out starting at row
For j = 0 To UBound(inputArray, 1)
sht.Cells(i, monthNumber) = inputArray(j)
i = i + 1
Next j
'Success Message
MsgBox "Data successfully placed"
End Sub