0

ワークシートに、他のタブ (月ごとに 1 つ) からの要約データを保持する一連の名前付き範囲があります。範囲には名前が付けられJAN / FEB / MARています。私のファイルには、ある月を別の月と比較するさまざまなレポートが含まれており、これを動的にするには、ユーザーが任意の 2 か月を比較できるようにする必要があります。

レポートは、必要な月の要約データの貼り付けられた(値)バージョンを含む別のシートから実行されるため、基本的に、ユーザーが月を選択できるようにするユーザーフォームを備えたマクロが必要であり、その範囲を見つけてコピーしますレポートを作成するシートに貼り付けます。シート名に基づいて同様のことを行うことができましたが(以下のコードを参照)、名前付き範囲に対して何も機能しません。

喜んで助けていただければ幸いです。私はこれについて独学のアマチュアです。

Private Sub CommandButton1_Click()
    Dim i As Integer, sht As String
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) = True Then
            sht = ListBox1.List(i)
        End If
    Next i
    Sheets(sht).Range("A4:C15").Copy
    Sheets("Sheet1").Select.Range("N1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    End
End Sub

Private Sub CommandButton2_Click()
    Unload UserForm2
End Sub

Private Sub ListBox1_Click()

End Sub

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ListBox1.AddItem (ws.Name)
    Next ws
End Sub
4

3 に答える 3

0

コンボボックスにすべての月名をロードできます:

Private Sub Userform_Initialize()
 combobox1.List = Application.GetCustomListContents(4)
end sub

選択した月の範囲をコピーできます:

Private Sub Combobox1_Change()
 With ThisWorkbook.Names(combobox1.value)
  sheets("sheet1").cells(1,14).Resize(.RefersToRange.Rows.Count, .RefersToRange.Columns.Count) = .RefersToRange.Value
 End With
End Sub
于 2015-02-02T12:42:52.950 に答える
0

まず、ユーザーが月を選択できるようにする UI コントロールが必要です。おそらく ComboBox です。次に、選択した値に基づいて、選択する名前付き範囲を選択できます。その範囲を選択し、単純な for-each サイクルで繰り返し処理します。

最終的には、次のようになります。

Sub Main(selectedMonth as Integer)
    Dim referenceName As String
    Dim monthRange As Range
    Dim cell As Range

    Select Case selectedMonth
        Case 1
            referenceName = "JanuaryRange"
        Case 2
            referenceName = "FebruaryRange"
        ' etc
    End Select

    If referenceName <> "" Then
        Set monthRange = Range(referenceName)

        For Each cell In monthRange
            ' Add cell.Value as item to your listbox
        Next cell
    End If
End sub

エラー処理を追加する必要があるかもしれません。

PS: オブジェクトにはわかりやすい名前を使用する必要があります。CommandButton2 が 2 つある場合は問題ないかもしれません。

于 2015-02-02T11:15:48.023 に答える