具体的な質問にお答えします:Month(date)
は、日付引数の月に対応する整数を返す関数です。従ってMonth(Now)
は3を返します。
.Month
はのプロパティではありません。 Range
オブジェクトであるため、コードでエラーが発生します(「オブジェクトはこのプロパティまたはメソッドをサポートしていません」)。以下のコードは、あなたが望む方法でMonth()
関数を使用する方法を示しています。
しかし、あなたのコードはより広い質問を提起します。数式作成を自動化するためにVBAを使用していますか?あなたがいれば、すべての井戸と良い。しかし、実際には、VBAがより良いサービスを提供するときに、ワークシート関数を使用している可能性はありますか?たとえば、VBAを使用して目標月を特定し、その目標月をExcel式を使用してワークシートに書き込む理由はありますか?
VBAは想像以上に可能性があるのに対し、Excelの機能を自動化する方法(最近はマクロを記録した結果)の範囲が限られているため、
いずれにしても、同じタスクの2つの非常に似たバージョンがあります。最初は数式を書き込み、2番目は月を書き込みます。
Public Sub OutputGenerator()
Dim ws As Worksheet
Dim firstRow As Long
Dim lastRow As Long
Dim dates As Variant
Dim hitList As Collection
Dim refMonth As Integer
Dim thisMonth As Integer
Dim r As Long
Dim output() As Integer
Dim item As Variant
'Set these for your own task.
Set ws = ThisWorkbook.Worksheets("Sheet1")
firstRow = 3
lastRow = 23
'Read the dates into an array
dates = ws.Range(ws.Cells(firstRow, "A"), ws.Cells(lastRow, "A")).Value
'Loop through the array to acquire each new date
Set hitList = New Collection
For r = 1 To UBound(dates, 1)
thisMonth = Month(dates(r, 1))
If thisMonth <> refMonth Then
'It's a new date so populate the collection with the month integer
hitList.Add thisMonth
refMonth = thisMonth
End If
Next
'Populate the output array
ReDim output(1 To hitList.Count, 1 To 1)
r = 1
For Each item In hitList
output(r, 1) = item
r = r + 1
Next
'Write the output array starting at cell "F2"
ws.Cells(2, "F").Resize(UBound(output, 1)).Value = output
End Sub
:整数としてヶ月を書くこと
Public Sub FormulaGenerator()
Dim ws As Worksheet
Dim firstRow As Long
Dim lastRow As Long
Dim dateRange As Range
Dim cell As Range
Dim hitList As Collection
Dim refMonth As Integer
Dim thisMonth As Integer
Dim r As Long
Dim output() As Variant
Dim item As Variant
'Set these for your own task.
Set ws = ThisWorkbook.Worksheets("Sheet1")
firstRow = 3
lastRow = 20
'Read the values cell by cell
Set dateRange = ws.Range(ws.Cells(firstRow, "A"), ws.Cells(lastRow, "A"))
Set hitList = New Collection
For Each cell In dateRange.Cells
item = cell.Month
thisMonth = Month(cell.Value)
If thisMonth <> refMonth Then
'It's a new month so populate the collection with the cell address
hitList.Add cell.Address(False, False)
refMonth = thisMonth
End If
Next
'Populate the output array values
ReDim output(1 To hitList.Count, 1 To 1)
r = 1
For Each item In hitList
output(r, 1) = "=MONTH(" & item & ")"
r = r + 1
Next
'Write the output array starting at cell "F2"
ws.Cells(2, "F").Resize(UBound(output, 1)).Formula = output
End Sub
コード:数式を書くこと
コード:私はこれにオートメーションタイプがニーズに合ったとして、それはいくつかの考えを挑発いただければ幸いです
範囲( "D:G")のようなMonth(1)を持つ列をすべて非表示にする関数と組み合わせることはできますか? 列( "D:BC") .Select 列( "D:G")の場合。隠し= trueの場合、 Selection.EntireColumn.Hidden = Falseの エルス Selection.EntireColumn.Hidden = Trueの END IF – flowers1234