CEMEH  ответ на Вопрос 2) каждый раз по нажатию кнопки определяйте последнюю ячейку в столбце и заполняйте от неё  
Цитата: Private Sub CommandButton2_Click() 
    Ваш код вернёт объект типа Range (грубо говоря ссылку на ячейку), причём это не  
      последняя использованная, а первая после пустой - если в столбце A есть пустоты -     будут проблемы ;-)) 
   Мне больше нравится такой вариант определения последней занятой строки 
   ' Определить число используемых рядов:  
   nr = ActiveSheet.UsedRange.Rows.Count  
   ' Прыгаем вверх до последней заполненной ячейки:  
    lastrow = Cells(nr,col).End(xlUp).Row  
     ' где col - номер нужного столбца    
 т.о. можно использовать код 
   Private Sub CommandButton2_Click() 
   Dim Lastrow as Long 
   lastrow = Cells(ActiveSheet.UsedRange.Rows.Count,1).End(xlUp).Row  
 дальше уже совсем просто: 
   Cells(LastRow + 1, "A").Value = UserForm1.TextBox1.Text  
   Cells(LastRow + 1, "C").Value = UserForm1.Calendar1  
   .... 
 Правда, Вас подстерегает одна засада! Вы определяете последний занятый ряд в столбце A - а пишете в столбцы C, D, E, F, G ... а там может быть больше строчек занято, чем в столбце A 
 впрочем, это Ваше дело...     
 полуответ на Вопрос 3)  
   никогда не работал с элементами управления... сорри... %-(( но кое-что скажу, куда копать - а дальше Вы уж сами! 
   если у Вас пять столбцов, то как Вы хотите их вставить в ОДНУ бедную ячейку G2 ?! 
   всё значения через запятую?! 
 ну, можете использовать такой код 
   Dim AllListBox As String 
   Dim i as Integer 
   AllListBox = "" 
   For i = 0 To ListBox1.ColumnCount - 1 
    AllListBox = AllListBox & "," & ListBox1.Column(i) 
   Next i 
   Cells(2, "G").Value = AllListBox