Копирование несвязанных диапазонов и их вставка в таком же виде

Автор Anton Stasenko, 23.01.2012, 17:09

« назад - далее »

Anton Stasenko

Уважаемые спецы экселя, столкнулся со следующей проблемой - надо скопировать из одно столбца в соседний разрозненые диапазоны - не могу понять, как сократить макрос - а в таком виде как у меня - естественно ничего не работает.
Пример  ниже
Sub Percetage_Filling()
Worksheets("Konsol 2011").Select
Range("W9").Select
   ActiveCell.FormulaR1C1 = _
       "=RC[-5]*R6C24"
   Selection.Copy
   Union(Range("W9:W14,W16:W23,W27:W28,W30:W31,W33:W36,W39:W40,W44:W50,W52:W54,W56,W58:W60") _
   , Range("W63:W64,W67:W68,W71:W75,W79:W82,W84:W85,W87:W89,W92:W93,W95:W101,W103:W109,W112:W114") _
   , Range("W116:W122,W124,W126:W127,W129:W131,W133:W135,W137:W146,W154:W155,W158:W159") _
   , Range("W162:W163,W165:W167,W169:W170,W172,W174")).Select
   Range("W9").Activate
   ActiveSheet.Paste
   Selection.Copy
   Union(Range("R9:R14,R16:R23,R27:R28,R30:R31,R33:R36,R39:R40,R44:R50,R52:R54,R56,R58:R60") _
   , Range("R63:R64,R67:R68,R71:R75,R79:R82,R84:R85,R87:R89,R92:R93,R95:R101,R103:R109,R112:R114") _
   , Range("R116:R122,R124,R126:R127,R129:R131,R133:R135,R137:R146,R154:R155,R158:R159") _
   , Range("R162:R163,R165:R167,R169:R170,R172,R174")).Select
   Range("R9").Activate
   Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
       SkipBlanks:=False, Transpose:=False
       'Copy and paste as Text
   Dim rCell As Range
   For Each rCell In Selection
   rCell.Value = rCell.Text
   Next rCell
   'Text to Number
   On Error Resume Next
   Application.ScreenUpdating = False
   Dim Cell As Range
   Selection.NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)"
   For Each Cell In Selection
   Cell.Value = Cell.Value * 1
   Next Cell
   Application.ScreenUpdating = True
   For Each Cell In Selection
       Cell.Value = Replace(Cell.Value, "                                     -   ", "", 1, 1, vbTextCompare)
       Next Cell
   
End Sub

Wasilic

Цитироватьнадо скопировать из одно столбца в соседний разрозненые диапазоны
Выложите лист экселя со столбцами как есть и как надо.
А разбирать Ваш код без примера, вряд ли кто будет.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Prist

Я предложил бы Вам:
1. Оформлять коды тегами Code
2. Объявлять переменные в теле кода один раз(Dim rCell As Range). Если объявить два раза одну переменную - код выполняться не будет. Но сразу укажет Вам на дубль.
3. Выкладывать пример данных в файле, т.к. без примера часто не совсем понятно что именно у Вас не работает и почему. А все экстрасенсы форума ушли в реалити-шоу на телеканал в ТНТ.
4. Попробовать приведенный ниже код:
Sub Percetage_Filling()
    Dim rRng As Range, rArea As Range
    Application.ScreenUpdating = False
    Worksheets("Konsol 2011").Select
    Union(Range("W9:W14,W16:W23,W27:W28,W30:W31,W33:W36,W39:W40,W44:W50,W52:W54,W56,W58:W60") _
  , Range("W63:W64,W67:W68,W71:W75,W79:W82,W84:W85,W87:W89,W92:W93,W95:W101,W103:W109,W112:W114") _
, Range("W116:W122,W124,W126:W127,W129:W131,W133:W135,W137:W146,W154:W155,W158:W159") _
, Range("W162:W163,W165:W167,W169:W170,W172,W174")).FormulaR1C1 = "=RC[-5]*R6C24"
   
    Set rRng = Union(Range("R9:R14,R16:R23,R27:R28,R30:R31,R33:R36,R39:R40,R44:R50,R52:R54,R56,R58:R60") _
             , Range("R63:R64,R67:R68,R71:R75,R79:R82,R84:R85,R87:R89,R92:R93,R95:R101,R103:R109,R112:R114") _
             , Range("R116:R122,R124,R126:R127,R129:R131,R133:R135,R137:R146,R154:R155,R158:R159") _
             , Range("R162:R163,R165:R167,R169:R170,R172,R174"))
    rRng.FormulaR1C1 = "=RC[-5]*R6C24"
    For Each rArea In rRng.Areas
        rArea.Value = rArea.Value
        rArea.NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)"
    Next rCell
    rRng.Replace "                                     -   ", "", xlPart
    Application.ScreenUpdating = True
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

Anton Stasenko

Спасибо за ответ и сорри за то, что не прикрепил файл - слишком много там надо было "чистить". Предложенный макрос не прошел Debug - может быть я не добавил какую-то информацию?
Изначально моя задача была провести расчет в спомогательном столбце (умножить на одну ячейку) все данные из начального столбца и потом туда же (где располагались первичные данные) вставить полученный результат умножения. Проблема была в том, что при копировании не связанных выделенных диапазонов, эксель отказывался их вставлять.
Сейчас я прикрепил файл со своим "старым" макросом и с предложенным выше (который у меня не выполняется).
Если подскажите как решить проблему - буду очень благодарен.

_Boroda_

Заполните в Вашем файле пару строк так, как они в реальном файле. Интересует, прежде всего, как данные в ячейке V9 (мы ведь там хотим изменить - я правильно понял?) оказываются - там формула или просто число?
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Prist

Итак. Один косяк мой - один Ваш. В Вашем файле вместо Range почему-то Vange какой-то фигурировал. Откройте файл и посмотрите. Мой косяк: забыл заменить в Next rCell на Rarea. Макрос ниже запускается и работает. Вопрос в том, тот ли результат он дает.

Sub Filling_Percentage_Recommended()
Dim rRng As Range, rArea As Range
    Application.ScreenUpdating = False
    Worksheets("Konsol 2011").Select
    Union(Range("AA9:AA14,AA16:AA23,AA27:AA28,AA30:AA31,AA33:AA36,AA39:AA40,AA44:AA50,AA52:AA54,AA56,AA58:AA60") _
  , Range("AA63:AA64,AA67:AA68,AA71:AA75,AA79:AA82,AA84:AA85,AA87:AA89,AA92:AA93,AA95:AA101,AA103:AA109,AA112:AA114") _
, Range("AA116:AA122,AA124,AA126:AA127,AA129:AA131,AA133:AA135,AA137:AA146,AA154:AA155,AA158:AA159") _
, Range("AA162:AA163,AA165:AA167,AA169:AA170,AA172,AA174")).FormulaR1C1 = "=RC[-5]*R6C24"
   
    Set rRng = Union(Range("V9:V14,V16:V23,V27:V28,V30:V31,V33:V36,V39:V40,V44:V50,V52:V54,V56,V58:V60") _
             , Range("V63:V64,V67:V68,V71:V75,V79:V82,V84:V85,V87:V89,V92:V93,V95:V101,V103:V109,V112:V114") _
             , Range("V116:V122,V124,V126:V127,V129:V131,V133:V135,V137:V146,V154:V155,V158:V159") _
             , Range("V162:V163,V165:V167,V169:V170,V172,V174"))
    rRng.FormulaR1C1 = "=RC[-5]*R6C24"
    For Each rArea In rRng.Areas
        rArea.Value = rArea.Value
        rArea.NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)"
    Next rArea
    rRng.Replace "                                     -   ", "", xlPart
    Application.ScreenUpdating = True

End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
www.excel-vba.ru
Просто СПАСИБО [+оказать+]
Считаешь СПАСИБО мало? Яндекс.Деньги: 41001332272872; WM: R298726502453

Anton Stasenko

Да, макрос работает - только не вставляются данные из столбца АА в столбец V. После выполнения команды For Each rArea In rRng.Areas - в столбце V появляются ноли (ну и соответственно появляются ноли в столбце АА,т.к. там остается формула - не пойму - как можно в Столбец V вставить только значения, которые получились в столбце АА. Оставлять информацию в столбце АА не обязательно.

_Boroda_

Вы не ответили на мой вопрос
Цитата: _Boroda_ от 25.01.2012, 14:43
Заполните в Вашем файле пару строк так, как они в реальном файле. Интересует, прежде всего, как данные в ячейке V9 (мы ведь там хотим изменить - я правильно понял?) оказываются - там формула или просто число?

Проверяйте, так нужно?
Sub Percetage_Filling()
Application.ScreenUpdating = 0
    With Worksheets("Konsol 2011")
        .Range("AA6").Copy
        .Range("V7:V176").SpecialCells(xlCellTypeConstants, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply
        Application.CutCopyMode = False
        .Range("V9").Select
    End With
Application.ScreenUpdating
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995

Anton Stasenko

Борода, данные в ячейку я "загоняю" макросом из внешних файлов - просто не стал этот макрос оставлять, т.к. это я уже научился делать самостоятельно. Результатом в столбце V должно быть именно число - как вы и сделали. Премного благодарен.
Также меня заинтересовало использование Range.SpecialCells Method. К сожалению, в стандартной справке не представлены примеры ее практического применения и тем более того наворота, что Вы там добавили. Если у Вас есть какие-либо ссылки на "популярные" тексты о применении (вариантах использования) этой функции, то был бы признателен (можно на англ.).
Еще раз спасибо.

_Boroda_

ЦитироватьТакже меня заинтересовало использование Range.SpecialCells Method. К сожалению, в стандартной справке не представлены примеры ее практического применения и тем более того наворота, что Вы там добавили. Если у Вас есть какие-либо ссылки на "популярные" тексты о применении (вариантах использования) этой функции, то был бы признателен (можно на англ.).
У меня вообще никаких материалов нет. А если на пальцах - то на листе Excel жмем F5 (или Ctrl+G) - выделить - а дальше ставим нужные галки.
Скажи мне, кудесник, любимец ба'гов...



Яндекс-деньги: 41001632713405
Webmoney: R289877159277; Z102172301748; E177867141995