Скопіюйте робочий аркуш Excel та підтримуйте відносну клітинку у формулах


40

Ще одна проблема копіювання в Excel:

Як я можу скопіювати робочий аркуш з WorkbookA.xlsx в WorkbookB.xlsx без скопійованого робочого листа, який все ще посилається на WorkbookA.xlsx, наприклад формула =B!23стає =[WorkbookA.xlsx]!B!23при копіюванні.

Я хочу підтримувати "відносні" посилання на клітини замість "абсолютних" посилань на клітинки (я повинен винайти цю термінологію у світі Excel, якщо вона ще не існує).

Інша можлива альтернатива, що я не можу змусити його працювати - це можливість вставити лише "значення" комірок. Excel розглядає "значення" як обчислені значення, а не фактичні формули в комірці. Якщо я виберу формулу пасти, вона все одно дає абсолютні посилання.

Детальніше про те, для чого мені це потрібно: я використовую xlsx виробництва для щоденних операцій. Нам постійно потрібно робити "оновлення" цього xlsx, і тому одна людина може створити копію та її зміни там для одного аркуша. Одночасно інша особа також може вносити зміни до іншого аркуша. Зважаючи на те, що ці аркуші не мають залежних комірок на інших аркушах , як, наприклад, підсумковий звіт, бажано просто скопіювати та об'єднати аркуші в початковий xlsx. Але "абсолютне" посилання доставляє багато клопоту.


Я щось розгублений. Ви хочете скопіювати аркуш 1 з WBA в WBB, і ви хочете, щоб він скопіював формули відносно WBB, а не WBA. Це неможливо, якщо аркуш WBB 2 не збігається з листом WBA 2. Це так? Крім того, якщо ви просто хочете значення, ви можете скопіювати аркуш, select all - copy - paste special - valuesщоб мати лише значення. Якщо ви хочете зробити це під час копіювання, а не покладатися на кінцевого користувача, щоб виконати ці кроки, я працюю над цим. Дайте нам знати, як ви хочете, щоб це йшло з точки зору WorkbookA (або 1) та WBB (2) та аркуша
№s

Я вже намагався пояснити в своєму останньому абзаці, але, думаю, це все ще було не ясно. Так, WBA та WBB однакові очікування для одного аркуша в WBA. Під час проектування цього аркуша в WBA передбачається, що всі посилання на комірки мають відносно робочої книги аркуша. Функція аркуша копіювання додає всі формули комірок з WBA, роблячи її "абсолютною", і я цього не хочу.
Джейк

спеціальні значення вставки вставляють лише обчислені значення. Мені потрібні скопіювані формули, БЕЗ WBA.xls додаються.
Джейк

Гаразд, я зрозумів. Я опублікую відповідь, якщо / коли я
зрозумію

Ви не можете просто зробити копію всієї робочої книги, а потім видалити те, що вам не потрібно з нової копії?
осідання

Відповіді:


21

Спробуйте використовувати Ctrl+ ~для відображення формул. Потім натисніть Ctrl+, Aщоб вибрати все, скопіюйте його, а потім вставте його в блокнот.

Нарешті скопіюйте його з блокнота та вставте його в іншу робочу книжку.


1
@Jake: але ви сказали, що у вашій робочій книжці є кнопки, спадні місця та інше ; та названі діапазони. Ця техніка не копіює їх (або приземлені речі, такі як форматування) - як / чому ви вважаєте це прийнятним?
Скотт

На великому робочому аркуші техніка редагування посилань / змін джерела була болісно повільною, але це було швидко.
Тоні Пулокас

23

У багатьох випадках мені було легше зробити наступне:

  • скопіюйте аркуш у нову робочу книжку
  • активуйте новий аркуш у новій робочій книжці
  • вибрати всіх ( Ctrl+ A)
  • знайдіть / замініть на
    • знайти: [WorkbookA.xlsx]!
    • замінити: <залишити порожнім>
  • замінити всіх

11

Непідписаний відповідь прямо під цим - той, який працював на мене, з дуже незначною варіацією.

  1. Створіть та збережіть електронну таблицю призначення.

  2. Використовуйте "перемістити", "скопіювати" або перетягніть сторінку за допомогою формул у нову електронну таблицю. Це залишає формули на новій сторінці, які вказують на старий робочий аркуш. Потім збережіть нову електронну таблицю в тому самому місці, що і старий робочий аркуш.

  3. Потім перейдіть на вкладку «Дані»> натисніть «Змінити посилання». Цей параметр не буде активним, якщо на сторінці немає посилань.

  4. У діалоговому вікні, що виходить, виберіть ім'я вихідного файла та натисніть "Змінити джерело".

  5. У діалоговому вікні з відкритим файлом, що з’явиться далі, виберіть назву нової електронної таблиці.

Клацніть Закрити, і ви закінчите.


9

Або просто виконайте наступне:

Перетворити це:

=database_feed!A1

до цього:

=INDIRECT("database_feed!A1")

і більше не змінювати ваші посилання при копіюванні між робочими аркушами.

Якщо у вас немає посилань на багато аркушів, використовуватиметься інша альтернатива

=INDIRECT("'"&B1&"'!A1")

і введіть назву довідкового аркуша в комірку B1. Тепер у вас є лише одна комірка, яку потрібно оновити, скопіювавши її в нову електронну таблицю.


1
Гарна ідея: працює, якщо у вас є аркуш шаблонів з формулами і ви копіюєте це в нову робочу книжку з VBA. Я виявив, що вам потрібно зберегти посилання між цитатами та додати TRUE, щоб зберегти посилання типу A1. напр. = ПОСЛУГО ("'Sheet1'! A1", ІСТИНА)
RogerB

2
INDIRECTце мінлива формула, тому вона буде перерахована кожен раз (на відміну від лише коли вона редагується), що може насправді уповільнити складніші робочі зошити, тому використовуйте з обережністю
Енді Терра

3

Нижче наведений код можна адаптувати до ваших потреб. Він бере всі формули з аркуша wb1і застосовує їх до аркуша в новому робочому зошиті. Формули застосовуються як Strings, тому немає посилань на оригінальну робочу книжку. Крім того, цей код дуже швидкий, оскільки він не використовує буфер обміну і не вимагає циклічного перегляду клітинок.

Sub copyformulas()

Dim wb1 As Workbook, wb2 As Workbook
Dim s1 As Worksheet, s2 As Worksheet
Dim formArr() As Variant

Set wb1 = ThisWorkbook
Set s1 = wb1.Sheets("Sheet1")
Set wb2 = Workbooks.Add
Set s2 = wb2.Sheets("Sheet1")

formArr = s1.UsedRange.Formula
s2.Range("A1").Resize(UBound(formArr, 1), UBound(formArr, 2)).Formula = formArr

End Sub

3

Оскільки 99% відповідей навіть не відповіли на початкове запитання, ось правильна відповідь.

  1. Скопіюйте аркуші з оригінального файлу (Original.xlsx) у новий файл Excel (New.xlsx), як зазвичай. Як правило, я клацаю правою кнопкою миші на назві і вибираю "Перемістити чи скопіювати ...".

  2. Збережіть другий - щойно створений файл (New.xlsx).

  3. У новому файлі в розділі Дані натисніть "Редагувати посилання"

  4. У спливаючому вікні виберіть "Змінити джерело ..."

  5. Знайдіть файл (New.xlsx) і натисніть кнопку «Відкрити».

Усі посилання на оригінал (Original.xlsx) будуть видалені.

Зроблено!


Має бути вище у списку відповідей
sabre23t

2
  • скопіюйте робочий лист у "WorkbookB.xlsx"
  • відкрити робочий аркуш у новому файлі
  • вибрати все
  • перейдіть до меню Дані, натисніть на посилання редагування
  • редагуйте посилання так, щоб посилання на старий файл тепер було посиланням на відкритий на даний момент файл

Це працює для мене.


0

Обидві робочі книжки повинні бути відкритими для цього . Ви запускаєте цей макрос, і він скопіює workbookA!sheet1 в, workbookB!sheet1а потім замінить усі workbookAпосилання. Це сиро, але це працює . Ви, очевидно, можете змінити код, щоб він відповідав вашим іменам WorkbookA.xlsx, але переконайтеся, що вони мають правильне розширення та залишаються у лапках.

О, щоб зробити макрос, якщо ви цього не знаєте, натисніть, alt + F11щоб відкрити редактор Visual Basic. Потім клацніть правою кнопкою миші на WBA insert - moduleі скопіюйте і вставте код нижче в модуль. Потім натисніть, F5щоб запустити макрос. Якщо макрос не запуститься, можливо, через те, що макроси не ввімкнено, тому вперед збережіть його та повторно відкрийте, а коли буде запропоновано ввімкнути макроси, увімкніть їх.

Sub copysheetremoveWBref()

    Application.ScreenUpdating = False

    'activate WBA
    Application.Workbooks("workbooka.xlsx").Activate
    'Select WBA Sheet1
    Application.Workbooks("workbooka.xlsx").Sheets("Sheet1").Select
    'copy WBA!sheet1 to WBB!sheet1
    Sheets("Sheet1").copy Before:=Workbooks("WorkbookB.xlsx").Sheets("sheet2")
    'find WBA references and remove them
    Cells.Replace What:="=[workbookA.xlsx]", Replacement:="=", LookAt:=xlPart _
        , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False

    Application.ScreenUpdating = True


End Sub

1
Єдиний розпорядок приємний, як я вручну CTRL+H, але все це не фіксує опори для елементів управління, наприклад, кнопки, спадні місця тощо; та названі діапазони.
Джейк

0

Я домігся цього, скопіювавши комірки на новий робочий аркуш як звичайне, потім знайшов заміну, щоб видалити старий шлях до файлів у формулах.

Наприклад, якщо перша формула є, =J2і це стає =[filepath]J2, то просто знайдіть і замініть всю нову електронну таблицю для [filepath]і замініть нічим. Це видаляє його і відновлює формулу =J2.

Не потрібно VB!


На жаль, excel, здається, працює лише з перервами, коли йдеться про пошук підрядків всередині формул: /. Мабуть, не вдається знайти що-небудь і за допомогою одиничних лапок.
Дуглас Гаскелл

0

У мене була подібна проблема. Причина, яку формули вставляли із посиланням на WBA, полягала в тому, що вкладка (аркуш), над якою я працював у WBA, була названа інакше, ніж у WBB. Для мене це був завжди "останній аркуш", але один був названий "MinFlow", а другий - "NormalFlow". Я перейменував і "Результати", і копія / вставка працювала так, як я цього хотів, - "відносної пасти".


0

Виберіть комірки, які потрібно перемістити. Тепер спробуйте перемістити їх, перетягнувши n крапку на різні робочі аркуші (різні вкладки).

Я знаю, це прокручується. Ось складна частина: просто натисніть cmd (mac) або alt (win), і це дозволить вам перенести комірки на іншу вкладку.


Чи можете ви трохи розширити свою відповідь? Незрозуміло, як / куди потрапити на іншу вкладку під час перетягування. Спасибі.
fixer1234

0

Привіт ось просте рішення цієї проблеми:

  1. Скопіюйте над клітинками, як зазвичай.
  2. У формулі виберіть і скопіюйте текст, пов'язуючи його з попередньою робочою книжкою [WorkbookA.xlsx].
  3. Виберіть усі комірки, які потрібно змінити, і натисніть CTRL+F та виберіть вкладку заміни.
  4. Замініть [WorkbookA.xlsx] порожнім місцем (він же нічого не пише в Replace withполі, натисніть Replace All.

Вуаля - робиться.


0

Ще один "трюк" - перш ніж копіювати робочий аркуш джерела, замініть всі класифікатори формули =іншими наборами символів (скажіть ###=).

Скопіюйте робочий аркуш, а після його копіювання замініть класифікатор формули назад (замінивши ###=на= ).

Переконайтесь, що будь-які посилання на аркуші у формалах також копіюються на новий аркуш перед аркушем посилання.


0
  1. Скопіюйте аркуш як завжди. (клацніть правою клавішею миші та перейдіть до «переміщення чи копіювання») Це для форматування.

  2. Скопіюйте всі клітинки з оригінального аркуша (використовуючи Ctrl+ Aабо верхній лівий трикутник та Ctrl+ C)

  3. Вставити як значення в нову робочу книжку (на аркуші "крок-1") (Параметри вставки> 123)


0

Якщо вам потрібно зробити це автоматично, тому що ви тягнете аркуші в програмі VBA. Використовуй це:

Public Sub ChangeSource()
'
' ChangeSource Macro
' Edit the links to point to the current workbook.
'
    Dim allLinks As Variant
    allLinks = ThisWorkbook.LinkSources(xlExcelLinks)
    If Not IsEmpty(allLinks) Then
        Dim eachLink As Long
        For eachLink = 1 To UBound(allLinks)
            If InStr(3, "String found in source book name.", allLinks(eachLink)) Then
                ThisWorkbook.ChangeLink Name:=allLinks(eachLink), NewName:=ThisWorkbook.FullName, Type:=xlExcelLinks
            End If
        Next eachLink
    End If
End Sub

Просто змініть "Рядок, знайдений у назві вихідної книги". відповідно до старих посилань, які ви хочете замінити. Ви можете його видалити, якщо заблокувати, якщо ви хочете замінити всі посилання.


-1

Відкрийте обидві робочі зошити. У вихідній робочій книжці (WorkbookA.xlsx) виберіть аркуш, який потрібно скопіювати. Клацніть правою кнопкою миші на вкладці аркуша та виберіть «Перемістити чи скопіювати…». У діалоговому вікні "Перемістити чи скопіювати" виберіть "WorkbookB.xlsx" у спадному меню "До книги", виберіть, де в цій книзі ви хочете її розмістити, і поставте прапорець "Створити копію". (І натисніть "ОК".)


-1

Зробіть копію аркуша, на який ви хочете перемістити аркуші, з яких у цьому випадку буде WorkbookA.xlsx. Перейменуйте його, щоб сказати "Копія WorkbookA.xlsx". Тепер відкрийте цю нову робочу книжку, а також робочу книгу, до якої потрібно перемістити аркуш, до якого в цьому випадку буде WorkbookB.xlsx. Клацніть правою кнопкою миші на аркушах створеної робочої книги з копією, тобто Copy of WorkbookA.xlsx, виберіть "перемістити або скопіювати", а потім перемістіть ці аркуші до WorkbookB.xlsx. Ви закінчили!


Не ясно, як ваша відповідь вирішує проблему питання. Чому переміщення буде працювати по-іншому, ніж копія буде працювати?
Máté Juhász

Я спробував ваше запропоноване рішення, і воно не працює. Немає різниці між копіюванням та переміщенням цілих аркушів.
nixda
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.