Vba excel данные с одного столбца в столбец

how to use VBA’s End(xlRight) to copy one column’s value to another one?
like I want to always copy columnZ’s range(«Z4:Z203») value to another column’s range(«i5:i204»),how can i use End(xlright) check if the column was pasted and it will paste on next column ?

Community's user avatar

asked Jan 13, 2015 at 8:54

user3425118's user avatar

Why not simply copy always the needed range?

Sub test()
Range("Z4:Z203").Select
Selection.Copy
Range("I5:I204").Select
ActiveSheet.Paste
End Sub

answered Jan 14, 2015 at 9:08

Kᴀτᴢ's user avatar

KᴀτᴢKᴀτᴢ

2,1266 gold badges28 silver badges57 bronze badges

 

Дмитрий Астахов

Пользователь

Сообщений: 11
Регистрация: 07.12.2022

#1

13.03.2023 21:04:50

Доброго времени суток.
Пытаюсь разобраться с Vba Excel, и встала интересная задача
Искал в интернете код, нашёл похожую тему на англоязычном сайте, там человек с подобной задачей обратился, ему написали вот это и сказали что всё работает Good

Код
Sub CopySpecifcColumn()

Set MR = Range("A1:e1")

For Each cell In MR

If cell.Value = "Date" Then 
    cell.EntireColumn.Copy
End If

If cell.Value = "Name" Then    '<- Add these for each column title
    cell.EntireColumn.Copy
End If 

If cell.Value = "ID" Then 
    cell.EntireColumn.Copy
End If

If cell.Value = "Amount" Then 
    cell.EntireColumn.Copy
End If

Next cell

End Sub

Цель: Найти на Листе1 столбец, у которого в заголовке будет название «Date», например, и скопировать его в Лист2 в столбец, где будет такой же заголовок «Date» (заголовки могут гулять по столбцам, поэтому нужен их поиск).
Суть: Я этот макрос вставил, а он вообще ничего не делает, даже не выделяет столбец, не то что уж куда-то его вставляет (в коде ни слова про вставку значения)
У меня есть макрос, который ищет столбцы с определёнными заголовками, и удаляет всё кроме них, но как я не пытался их скрестить — получается туфта.

Код
Sub Удаляем_ненужные_столбцы()
    Dim i&
    List = "|Column1|Column2|Column3|"
    For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1
            If InStr(List, "|" & Cells(1, i) & "|") = 0 Then Columns(i).Delete
    Next
End Sub

Подскажите как выйти (и можно ли) из данной ситуации, буду благодарен за подсказки.

 

Пытливый

Пользователь

Сообщений: 4587
Регистрация: 22.12.2012

#2

13.03.2023 21:19:00

Доброго. Найти что-либо в диапазоне (например, строку «Date» можно, например, методом Range.Find. Например, если у нас заголовки на активном столбце содержатся в диапазоне А1:D1, то найти значение Date можно как-то так:

Код
    Dim my_range As Range
    Set my_range = Range("A1", "D1").Find(What:="Date", LookIn:=xlValues, MatchCase:=False)

Далее, отталкиваясь от найденного значения, можно выделять столбцы (зачем целые столбцы? Можно же определенный диапазон, ячейки таблицы из этого столбца, зачем миллион с лишним ячеек выделять?), копировать, вставлять на новый лист и т.д. Т.е. примерно так — на одном листе нашли откуда копировать, на другом листе куда. Ну и скопировали. :)

Кому решение нужно — тот пример и рисует.

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#3

15.03.2023 01:12:08

Дмитрий Астахов, Здравствуйте. Может так вам надо?

Код
Sub CopySpecifcColumn()
    Dim Pos         As Long
    Dim vHeader     As Variant
    Dim rngFound1 As Range, rngFound2 As Range
    Dim ArryHeader1() As String, ArryHeader2() As String
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = ActiveWorkbook.Sheets(1)
    Set ws2 = ActiveWorkbook.Sheets(2)

    ArryHeader1 = Split("Date", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист исходник)
    ArryHeader2 = Split("Date", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист назначения)

    Application.ScreenUpdating = False

    For Each vHeader In ArryHeader1
        Set rngFound1 = ws1.Cells.Find(vHeader, , xlValues, xlWhole, 1, 1, 0)

        If Not rngFound1 Is Nothing Then
            Pos = Application.Match(vHeader, ArryHeader1, False) - 1
            Set rngFound2 = ws2.Cells.Find(ArryHeader2(Pos), , xlValues, xlWhole, 1, 1, 0)

            '            ' Вставка без форматов ячеек
            '            Range(rngFound1.Offset(1), rngFound1.End(xlDown)).Copy
            '            rngFound2.Offset(1).PasteSpecial xlPasteValues

            ' Копирования столбца и вставка с форматом ячеек
            Range(rngFound1.Offset(1), rngFound1.End(xlDown)).Copy Destination:=rngFound2.Offset(1)
        End If

    Next

    ws2.Select.  ' Можете закоментировать строку если не нужна активация второго листа (лист назначения)
    Application.ScreenUpdating = True
 End Sub

Изменено: MikeVol15.03.2023 01:22:00
(Мерцание экрана забыл включить ;) )

 
MikeVol

, Доброго времени суток. Макрос супер, правда не хотел через перечисление искать столбцы, искал только первый в списке, в данном примере «Date». Пытался заменить Split на что-то другое — эксель ругается, мол «не лезь дурак, оставь как есть». Поэтому я просто скопировал кусок начиная с «ArryHeader1…» вплоть до «Next», и уже там вписал другой столбец, и всё отлично заработало. Единственно момент, можно ли как-то найденные столбцы копировать полностью кроме первой строки? (имею в виду что он со второй строки (что кстати супер) копирует до последнего найденного символа, а если в столбце будет пробел, то всё после него он не увидит). Просто таблица, ИЗ которой я хочу копировать столбцы, ведётся не мной, а мало ли что там человек может напутать, намешать. И чтобы была защита от дурака, я хочу копировать либо весь столбец, либо для меньше загруженности Range задать. Но сам я как дурак с этим Range.EntireColumn попытался втиснуться, но пока безуспешно. Буду пробовать дальше, вдруг нащупаю «правильное направление мысли»

Изменено: Дмитрий Астахов15.03.2023 09:59:50
(Скорее всего изъяснился в тексте я так себе, поэтому прикреплю файл )))

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#5

15.03.2023 10:50:08

пробуйте этот

Код
Sub CopySameColumns()
  Dim dc, c, i&, rg As Range, ws As Worksheet
  Set dc = CreateObject("Scripting.Dictionary")
  For Each c In Array("Date", "Name", "ID", "Amound")
    dc(c) = 0
  Next
  Set ws = Worksheets(1)
  For i = 1 To ws.Cells(1, Columns.Count).End(xlToLeft).Column
    If dc.Exists(ws.Cells(1, i).Value) Then
      dc(ws.Cells(1, i).Value) = i
      Set rg = ws.Cells(Rows.Count, i).End(xlUp)
      If rg.Row > 1 Then Range(ws.Cells(2, i), rg).ClearContents
    End If
  Next
  For Each c In dc.keys
    If dc(c) = 0 Then dc.Remove c
  Next
  With Worksheets(2)
    For i = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
      If dc.Exists(.Cells(1, i).Value) Then
        Set rg = .Cells(Rows.Count, i).End(xlUp)
        If rg.Row > 1 Then
          Range(.Cells(2, i), .Cells(Rows.Count, i).End(xlUp)).Copy _
          ws.Cells(2, dc(.Cells(1, i).Value))
        End If
      End If
    Next
  End With
End Sub

Изменено: Ігор Гончаренко15.03.2023 10:50:40

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#6

15.03.2023 11:48:15

Дмитрий Астахов, Здравствуйте! А так точно то что вам нужно?

Код
Option Explicit

Sub CopySpecifcColumn_v2()
    Dim Pos         As Long
    Dim vHeader     As Variant
    Dim rngFound1 As Range, rngFound2 As Range
    Dim ArryHeader1() As String, ArryHeader2() As String
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = ActiveWorkbook.Sheets(1)
    Set ws2 = ActiveWorkbook.Sheets(2)

    ArryHeader1 = Split("Date,Pon", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист исходник)
    ArryHeader2 = Split("Date,Pon", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист назначения)

    Application.ScreenUpdating = False

    For Each vHeader In ArryHeader1
        Set rngFound1 = ws1.Cells.Find(vHeader, , xlValues, xlWhole, 1, 1, 0)

        If Not rngFound1 Is Nothing Then
            Pos = Application.Match(vHeader, ArryHeader1, False) - 1
            Set rngFound2 = ws2.Cells.Find(ArryHeader2(Pos), , xlValues, xlWhole, 1, 1, 0)

            ' Копирования столбца и вставка с форматом ячеек
            Range(rngFound1.Offset(1), rngFound1(Rows.Count).End(xlUp)).Copy Destination:=rngFound2.Offset(1)
        End If

    Next

    Application.ScreenUpdating = True
    MsgBox "А теперь Правильно? ", vbQuestion
End Sub

Обратите внимание как правильно надо было вписать заголовки в ArryHeader1 и ArryHeader2 а не лепить горбатого! В комментариях для этих строк я же написал что и как!

 
Ігор Гончаренко

, шо-то он мне выдал ошибку 400, и усё, вроде даже перепроверил, может недокопировал чего, а он всё равно не хочет

 
MikeVol

, теперь всё супер, спасибо за Ваше терпение и труд )) Эти кавычки в экселе меня периодически ставят в тупик, и частенько я их пихаю уже куда не следовало бы. Ошибка новичка, так сказать
Ещё раз спасибо ))

 

в файле из сообщния 4 с такой строкой:
For Each c In Array(«Date», «Pon», «ID», «Amound»)
сработало (с листа 2 на лист 1 скопированы данные с колонок Date и Pon)

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

MikeVol

Пользователь

Сообщений: 229
Регистрация: 20.10.2020

Ученик

#10

15.03.2023 13:01:27

Дмитрий Астахов, А, так вам надо было копировать столбцы со второго листа в первый лист? Тогда мой код не будет работать! Код Ігор Гончаренко из его

#5

тогда то что вам надо!

Обновление!
Хотя чуток переделав код то получим то что и требуется, копирование со второго листа на первый лист.

Код
Option Explicit

Sub CopySpecifcColumn_v3()
    Dim Pos         As Long
    Dim vHeader     As Variant
    Dim rngFound1 As Range, rngFound2 As Range
    Dim ArryHeader1() As String, ArryHeader2() As String
    Dim ws1 As Worksheet, ws2 As Worksheet

    Set ws1 = ActiveWorkbook.Sheets(1)
    Set ws2 = ActiveWorkbook.Sheets(2)

    ArryHeader1 = Split("Date,Pon", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист исходник)
    ArryHeader2 = Split("Date,Pon", ",")   ' Здесь можете задать несколько заголовков столбцов, через запятую вписываете заголовок (Лист назначения)

    Application.ScreenUpdating = False

    For Each vHeader In ArryHeader2
        Set rngFound1 = ws1.Cells.Find(vHeader, , xlValues, xlWhole, 1, 1, 0)

        If Not rngFound1 Is Nothing Then
            Pos = Application.Match(vHeader, ArryHeader2, False) - 1
            Set rngFound2 = ws2.Cells.Find(ArryHeader1(Pos), , xlValues, xlWhole, 1, 1, 0)

            ' Копирования столбца и вставка с форматом ячеек
            Range(rngFound2.Offset(1), rngFound2(Rows.Count).End(xlUp)).Copy Destination:=rngFound1.Offset(1)
        End If

    Next

    Application.ScreenUpdating = True
    MsgBox "А теперь Правильно? ", vbQuestion
End Sub

Изменено: MikeVol15.03.2023 13:16:52
(Дополнил ответ. ;) )

Скопировать данные из одного столбца в другой

Leojse

Дата: Суббота, 05.12.2020, 15:32 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 148


Репутация:

1

±

Замечаний:
0% ±


2010/2013

Добрый день!
Пытаюсь написать макрос, который бы копировал значения из столбца «Данные 8» в столбец «Данные 4», но никак не могу победить проблему — данные не копируются.
Подскажите, пожалуйста, где я ошибся в коде?

К сообщению приложен файл:

6761630.xls
(34.0 Kb)

 

Ответить

lebensvoll

Дата: Суббота, 05.12.2020, 16:25 |
Сообщение № 2

Группа: Проверенные

Ранг: Старожил

Сообщений: 1002


Репутация:

30

±

Замечаний:
0% ±


Excel 2010

Leojse, я не силен в макросах
Но мне кажется Вы на кнопку не установили само выполнение ((((
А если установить само выполнение мокроса 1
То вот тут
[vba]

Код

e.FormulaLocal = «=» & e.Offset(0, 5).Address

[/vba] код ругается

К сообщению приложен файл:

5957291.xls
(39.0 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvollСуббота, 05.12.2020, 17:02

 

Ответить

gling

Дата: Суббота, 05.12.2020, 16:28 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

Здравствуйте. А без формулы никак?[vba]

Код

For Each e In Range(«D12:D» & f)
        ‘e.FormulaLocal = «=» & e.Offset(1, 5).Address
        e.Value = e.Offset(0, 5).Value
    Next e

[/vba]


ЯД-41001506838083

Сообщение отредактировал glingСуббота, 05.12.2020, 16:32

 

Ответить

Leojse

Дата: Суббота, 05.12.2020, 16:36 |
Сообщение № 4

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 148


Репутация:

1

±

Замечаний:
0% ±


2010/2013

gling, спасибо за подсказку, но так тоже не сработало.
Выдает ошибку «Application-defined or object-defined error»

К сообщению приложен файл:

0946168.xls
(33.0 Kb)

Сообщение отредактировал LeojseСуббота, 05.12.2020, 17:16

 

Ответить

bmv98rus

Дата: Суббота, 05.12.2020, 17:33 |
Сообщение № 5

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

Это
? Range(«D12:D» & f).SpecialCells(xlCellTypeVisible).Address
$1:$9,$12:$65536
все пояснит

а это
[vba]

Код

For Each e In Range(«D12:D» & f)
        If Not e.Rows.Hidden Then e.Value = e.Offset(0, 5).Value
Next

[/vba]
исправит.


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

Pelena

Дата: Суббота, 05.12.2020, 17:34 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Попробуйте так
[vba]

Код

Sub Макрос1()
    If Not ActiveSheet.AutoFilterMode Then Rows(«9:9»).AutoFilter
    ActiveSheet.Range(«A:I»).AutoFilter Field:=1, Criteria1:=»Расходники»

    Dim e As Range
    Dim f As Long
    f = Cells(Rows.Count, 1).End(xlUp).Row
    If f >= 12 Then
        For Each e In Range(«D12:D» & f)
            If Not e.EntireRow.Hidden Then e = e.Offset(0, 5)
        Next e
    End If

End Sub

[/vba]


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

Leojse

Дата: Суббота, 05.12.2020, 19:52 |
Сообщение № 7

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 148


Репутация:

1

±

Замечаний:
0% ±


2010/2013

Pelena, огромное Вам спасибо!!!

 

Ответить

gling

Дата: Суббота, 05.12.2020, 23:11 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 2449


Репутация:

652

±

Замечаний:
0% ±


2010

но так тоже не сработало.

А зачем вы оставили это .SpecialCells(xlCellTypeVisible), в сообщении 3 этого нет. Уберите это в файле из сообщения 4 и будет работать.
А можно и не проверять наличие автофильтра, он же всё равно ставится в 9 строку. Еще вариант[vba]

Код

Sub Макрос1()
    Dim e As Range
    Dim f As Long
    f = Cells(Rows.Count, 1).End(xlUp).Row
    Range(«A9:I» & f).AutoFilter Field:=1, Criteria1:=»Расходники»
    If f >= 12 Then
        For Each e In Range(«D12:D» & f)
            e.Value = e.Offset(0, 5).Value
        Next e
    End If
End Sub

[/vba]


ЯД-41001506838083

Сообщение отредактировал glingСуббота, 05.12.2020, 23:33

 

Ответить

Sub Макрос()

        Dim src(), res()
    Dim lr As Long, i As Long

            ‘1. Сбрасываем автофильтр, если он есть, иначе макрос не сможет вставить данные из массива.
    If ActiveSheet.AutoFilterMode = True Then
        ActiveSheet.AutoFilter.ShowAllData
    End If

        ‘2. Поиск последней строки в столбце B.
        ‘ End не ищет в скрытых строках.
    lr = Cells(Rows.Count, «B»).End(xlUp).Row

        ‘3. Копирование данных из столбца B в массив.
        ‘ Данные копируются со строки 2 (подразумевается, что первая строка это шапка).
    src() = Range(«B2:B» & lr).Value

        ‘4. Создание ячеек в массиве-результате.
    ReDim res(UBound(src), 1)

        ‘5. Перемещение ячеек, в которых есть слово «ткань» из массива «src» в массив «res».
    For i = 1 To UBound(src)
        ‘ Если в ячейке есть слово «ткань».
        If InStr(src(i, 1), «ткань») <> 0 Then
            ‘ Копирование данных из массива «src» в массив «res».
            res(i, 1) = src(i, 1)
            ‘ Очистка ячейки в массиве «src».
            src(i, 1) = Empty
        End If
    Next i

        ‘6. Вставка изменённых массивов на лист.
    Range(«B2»).Resize(UBound(src)).Value = src()
    Range(«C2»).Resize(UBound(res)).Value = res()

        ‘7. Сообщение.
    MsgBox «Готово.», vbInformation

End Sub

[свернуть]

1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

1

07.05.2014, 15:47. Показов 12373. Ответов 19


Студворк — интернет-сервис помощи студентам

Собсетвено есть данные в столбцах А , В , С , D.
Нужно сделать так что бы столбец С поменялся местами со столбцом В вместе со всеми данными? с помошью макроса VBA
Буду благодарен любым вашим мыслям!



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

07.05.2014, 15:47

19

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

07.05.2014, 15:56

2

Banzayl2w, запишите макрорекордером действия: выделить ст. С, Ctrl+X, выделить ст. В, Вставить — Вставить вырезанные ячейки.



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

07.05.2014, 16:07

 [ТС]

3

надо бы довести «до ума» через получившиеся макросы вручную в VB

Добавлено через 2 минуты
просто как вы говорите делать данные куда вставляешь теряются а надо что бы они сместились оставаясь в табличке



0



OLEGOFF

1062 / 506 / 137

Регистрация: 27.02.2013

Сообщений: 1,451

07.05.2014, 16:28

4

Попробуй так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub замена()
 
    Columns("C:C").Select
    Selection.Cut
    Columns("T:T").Select
    ActiveSheet.Paste
    Columns("B:B").Select
    Selection.Cut
    Columns("C:C").Select
    ActiveSheet.Paste
    Columns("T:T").Select
    Selection.Cut
    Columns("B:B").Select
    ActiveSheet.Paste
End Sub

Через любой свободный столбец



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

07.05.2014, 16:35

 [ТС]

5

нет все столбцы забиты данными нужно данные столбца D поменять с данными столбца А, просто перенести местами



0



OLEGOFF

1062 / 506 / 137

Регистрация: 27.02.2013

Сообщений: 1,451

07.05.2014, 17:14

6

Так что-ли?

Visual Basic
1
2
3
4
5
6
7
8
Sub UpToDown()
Dim A, B
    A = [C:C]
    B = [B:B]
    
   [C:C] = B
   [B:B] = A
End Sub



0



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

07.05.2014, 17:49

7

Цитата
Сообщение от Banzayl2w
Посмотреть сообщение

как вы говорите делать данные куда вставляешь теряются

Неправда! Вот записанный макрос:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Макрос2()
'
' Макрос2 Макрос
'
 
'
    Columns("C:C").Select
    Selection.Cut
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
End Sub

Для решения учебного задания этого достаточно. Если убрать лишнее, то так:

Visual Basic
1
2
3
4
Sub Макрос2()
    Columns("C").Cut
    Columns("B").Insert
End Sub



1



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 11:44

 [ТС]

8

Не работает макрос не переносит (



1



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

08.05.2014, 11:49

9

Не буду спорить — но счёт 2:1 не в Вашу пользу — у меня и Алексея работает

По макросу OLEGOFF аналогично 2:1



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 12:21

 [ТС]

10

файл ниже вот нужно поменять столбец A cо столбцом D местами, и код не хочет работать)



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

08.05.2014, 12:53

11

И где тот код, который не хочет работать?



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 12:59

 [ТС]

12

ниже



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

08.05.2014, 13:00

13

Вообще понятно — уж сколько говорено, что объединение ячеек — эло! Повторю ещё раз.



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 13:04

 [ТС]

14

тоесть никак не решить эту задачу? с переносом данных из одного столбца в другой?



0



Hugo121

6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

08.05.2014, 13:04

15

Visual Basic
1
2
3
4
5
6
Sub Макрос333()
    Columns(1).Cut
    Columns(4).Insert
    Columns(4).Cut
    Columns(1).Insert
End Sub

Только сперва уберите объединение в A!



1



Казанский

15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

08.05.2014, 13:06

16

Лучший ответ Сообщение было отмечено Banzayl2w как решение

Решение

С автоматическим снятием объединения ячеек в задействованных столбцах

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос1()
Dim c As Range
For Each c In Intersect(Range("A:A,D:D"), ActiveSheet.UsedRange)
  If c.MergeCells Then
    If c.MergeArea.Columns.Count > 1 Then c.UnMerge
  End If
Next
  
Columns("D").Cut
Columns("A").Insert
Columns("B").Cut
Columns("E").Insert
End Sub



1



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

08.05.2014, 13:07

17

Лучший ответ Сообщение было отмечено Banzayl2w как решение

Решение

И чего не все варианты пробовали? Вариант через массив работает «из коробки», только диапазоны изменить, и объединения не мешают.
И это будет именно перенос данных в чистом виде!



1



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 13:14

 [ТС]

18

Огромное спасибо!



0



1062 / 506 / 137

Регистрация: 27.02.2013

Сообщений: 1,451

08.05.2014, 13:24

19

У меня все работает…?



0



1 / 1 / 0

Регистрация: 14.04.2014

Сообщений: 40

08.05.2014, 13:26

 [ТС]

20

Да, все работает!



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

08.05.2014, 13:26

Помогаю со студенческими работами здесь

Макрос VBA
Добрый день!Помогите с задачей.

Создать макрос , доступный во всей рабочей книге, в
процессе…

Макрос.VBA
Создать Mакрос в Word, так чтобы он находил в тексте буквосочетание и выделял его цветом, а потом…

Макрос VBA
Помогите написать макрос или подскажите как должен выглядеть. есть база данных макрос ищет по…

Перемещение с переименованием файлов в vba
Здравствуйте. Есть задача, найти в целевой папке список имен фото, находящийся в столбце 1 Excel, и…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Понравилась статья? Поделить с друзьями:
  • Vba excel данные не открывая
  • Vba excel группировка свернуть
  • Vba excel группировка по строкам
  • Vba excel группа элементов
  • Vba excel график на форме