2014-07-02 3 views
0

В книге я отчет создан следующим образом:Excel VBA/формула для заполнения 3 конкретных клеток на основе значения 2 других клеток

   A    B   C   D   E 
1 Reporting Year  2012 
2 Reporting Quarter  Q3 
3         Jul-12  Aug-12  Sep-12 
4 
5 

Я пытаюсь автоматизировать популяцию клеток C3, D3 и E3, в зависимости от того, что выбрано в B1 и B2. Например, если B1 = 2012 и B2 = Q3, я бы хотел, чтобы ячейки C3, D3 и E3 заполняли месяцами за этот квартал в формате, показанном в таблице. например C3 = Jul-12, D3 = Aug-12 и E3 = Sep-12

Заранее спасибо! Я пытался что-то сделать с помощью названных диапазонов, но это становится очень громоздким, и я уверен, что есть более простой способ!

ответ

1

один (из многих!) Альтернативы:

=DATE($B1,SUBSTITUTE($B2,"Q",)*3+COLUMN()-5,1) 

в С3 и копируются на E3, отформатированные в соответствии с.

Могут быть упрощены были B2 отформатированы "Q"#.

+1

Спасибо, пешки. Это именно то, что мне нужно, и работает очень хорошо. Легко понять, как вы это сделали, и редактировать для разных ситуаций. Очень признателен. – MasterJedi

0

в модуле VBA листа добавьте следующее:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim IntersectRng As Range 
Dim Year As String, Quarter As String 
Dim monthStart As Integer 
Dim Months() As Variant 

Set IntersectRng = Application.Intersect(Target, Range("B1:B2")) 
Months = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") 

If (Not IntersectRng Is Nothing) Then 

    Year = Range("B1") 
    Quarter = Range("B2") 

    Select Case Quarter 

     Case "Q1" 
      monthStart = 0 
     Case "Q2" 
      monthStart = 3 
     Case "Q3" 
      monthStart = 6 
     Case "Q4" 
      monthStart = 9 
     Case Else 

    End Select 

    Range("C3").Value = Months(monthStart) & "-" & Year 
    Range("D3").Value = Months(monthStart + 1) & "-" & Year 
    Range("E3").Value = Months(monthStart + 2) & "-" & Year 

End If 
1

Это довольно легко сделать с помощью трех простых формул:

C3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 1, 1) 
D3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 2, 1) 
E3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 3, 1) 

Затем форматировать даты надлежащим образом или использовать функцию TEXT(C3, "MMM-YY").

Альтернатива:

C3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 2, 1) 
D3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 1, 1) 
E3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 0, 1) 
Смежные вопросы