Извиняюсь, хотел подробнее описать проблему и что ранее уже было сделано, чтобы не предлагались в ответ ранее выполненные действия, а эффект оказался в точности да наоборот
Jack Famous, спасибо! Но есть небольшое НО, при выделении данных из разных СТРОК, они будут разделятся табуляцией как будто это разные СТОЛБЦЫ. Но переделать для отслеживания смены строки и вставки vbCrLf - не составит труда. сделано см код ниже
Скрытый текст
Код
Sub CopySelectionOnly_ToClipBoard()
Dim rng As Range, cl As Range
Dim tx$
Dim rr As Long
Set rng = Selection
For Each cl In rng
If rr = cl.Row Or rr = 0 Then
tx = tx & vbTab & cl.Value
Else
tx = tx & vbCrLf & cl.Value
End If
rr = cl.Row
Next cl
CreateObject("htmlfile").parentWindow.clipboardData.SetData "Text", Mid$(tx, 2) & vbCrLf
End Sub
В итоге те два варианта упомянутые мной в первом посте и оказались решением данной проблемы, жаль что в Excel есть такой баг... а может быть фича Всем огромное спасибо!
Дмитрий(The_Prist) Щербаков написал: а выделили Вы до копирования какой диапазон? Были ли скрытые ячейки среди выделенных?
Выделялся до копирования НЕ весь тот диапазон, который вставился - в этом собственно и вся проблема. И ячейки/столбцы/строки не были скрыты. Выше был код выделения и копирования (он есть и в файле примера).
Но оно (выделение) может быть вообще рандомное. Суть такова, что при выделении ячеек A1 и С1 их копировании, в Excel вставится A1C1, а в остальные приложения A1B1C1, также и со столбцами - при выделении A1 и A3 - вставится в Excel A1A3, а в остальные приложения A1A2A3.
Попробовал ваше предложение, и ничего не получилось (см приложенный скрин). Честно, мне уже начинает казаться, что я единственный с такой проблемой и у всех остальных это всё работает
Код
Sub Copy_to_1()
Dim rr As Long
rr = Selection.Row
Range("B" & rr & ":F" & rr & ",K" & rr & ",A" & rr & ",M" & rr & ",V" & rr & ",AA" & rr).Select
Selection.SpecialCells(xlCellTypeVisible).Copy
End Sub
Все верно, в MS Word вставился весь диапазон начиная с А5 до АА5 (27 полей) - просто у вас вставленная таблица за границы листа вышла, а должны было вставится эти диапазоны "A" ",B:F" ",K" ",M" ",V" ",AA" (10 выделенных полей)
PS Как прикрепить картинку чтобы в сообщении была? что-то совсем туплю
New, спасибо за ценные замечания 1. Бесспорно Long для этих целей подойдет больше 2. Действительно, если не используется вначале листа какое либо количество строк есть большая вероятность затереть перекопированием начальные данные - тут как говорится пока не попадешь в просак - проблему не увидишь 3. В моем проекте первичный датасет я получаю каждый раз новый из БД (с предварительной очисткой и другими действиями) поэтому пошел по пути наименьшего сопротивления. Но честно-честно меня этот вариант очень коробил именно из-за описанных вами вещей (я это упоминал в первом посте). А реализовывать с доп листом (который надо скрывать от посторонних глаз) - просто в виду не нужности - не хочется
Что касается копирования - в любое место - блокнот, гуглшит, яндекс таблицы и даже внутри MS - тот же ворд, поверпоинт, аксесс и д.р. - везде не работает копирование выделенных (разнесенных) ячеек
Еще раз здравствуйте. К сожалению не нашлось ответов на мой вопрос. Видимо действительно не существует подобного нативного решения
Однако как и обещал прикладываю вариант своего решения (из 1 сообщения это вариант №2) Для начала поясню какой была задача: Имеется датасет с определенной последовательностью полей, и для разных "внешних" приложений требуется различные данные из этого датасета, где-то только 1,2,4 и 6 поля (столбцы) где-то 2, 5 и 7 и т.д. Было сделано несколько кнопок для каждого случая и при выборе необходимой строки выделялись и копировались необходимые столбцы ну а дальше проблема изложена в первом сообщении
Пример выбора необходимых полей и вызова процедуры рекопирования (на каждую кнопку можно вешать свой набор полей)
Сама процедура рекопирования тут можно пользоваться одним из двух методов и у обоих есть свои минусы (см. в комментарии внутри)
Код
Sub copy_to()
Dim cc As Integer
cc = ActiveSheet.UsedRange.Rows.Count
'особенности: вставляет не переключаясь на выделенную ячейку, копирует форматы, может вставлять после вырезания range.cut
ActiveSheet.Paste Range("B" & cc + 100)
'особенности: вставляет переключаясь на выделенную ячейку, копирует только значения, не вставляет вырезаные значения range.cut
'ActiveSheet.Range("B" & cc + 100).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("B" & cc + 100).CurrentRegion.Copy
End Sub
Минусов у этого решения полно (о них я писал и начале, и в комментариях) но меня локально пока всё устраивает В общем может кому-то поможет
P.S. ...и все интересно, есть ли другой более элегантный (и быстрый) способ? ....
Изменено: Viktor Vavilov - 28.11.2022 06:08:33(добавил пример)
Ham13 написал: Я может не до конца понял, копирование выделенных ячеек на свободный участок в эксель (Например в ячейку AA1), а далее уже копирование в другое приложение Range("AA1").CurrentRegion.Copy
Суть вы правильно поняли, и один из путей решения тоже (я указал этот способ под номером 2) Так как проект планируется для использования условными "бабушками", которым трудно объяснить даже такую простую последовательность действий - меня интересует возможность (если таковая есть) в естественном виде скопировать/вставить - хоть с помощью волшебного сочетания клавиш, хоть с помощью неизвестного мне параметра/функции/и т.д. в VBA (c реализацией в VBA у меня проблема не стоит - оба варианта за часок -другой можно накидать, но не дает это сделать мысль, что возможно существует другой нативный или более оптимальный способ)
Здравствуйте уважаемые форумчане. Давно волновал вопрос, но до последнего времени остро не стоял - Как скопировать из Excel в другие приложения только выделенные ячейки?
Честно, уделил поиску ответа на данный вопрос пару дней (не полных конечно же ) Из того, что находится - только темы "...копировать только отфильтрованные ячейки..." и "...скопировать без скрытых ячеек..." и сводится к использованию сочетания Ctrl+G и выделение только видимых ячеек. Нашлась только одна тема на хабре и то без нужного мне ответа. Данные решения не подходят так как ячейки не скрыты - они видны, и просто не попадают в селекшон
Я понимаю что Excel внутри себя имеет некоторые "расширенные" свойства буфера данных, и при копировании только выделенных ячеек и вставки их на этот/другой лист - все происходит как задумано, но стоит тут же вставить эти данные например в блокнот - магии не происходит и туда вставляются все данные находящиеся между выделенными ячейками.
У меня возникло идея только 2 способов реализации этого: 1. Проходится циклом по всем выделенным ячейкам, с копированием данных в какой-нибудь массив и дальнейшем переносом этих данных в клипборд (смущает скорость выполнения особенно при больших выборках) 2. После стандартного копирования выделенных ячеек - вставка их на временный лист/диапазон - с последующим повторным копированием ячеек (уже без пропусков) с этого диапазона в клипборд (смущает наличие "временного листа/диапазона" особенно при больших выборка стремящихся к максимальному значению столбцов/строк)
Может кто-нибудь наставить на путь истинный и подсказать заветную функцию/параметр/свойство если таковой имеется в VBA в нативном виде ну или подсказать более легкий алгоритм чем предложенные выше?
Заранее спасибо!
Изменено: Viktor Vavilov - 24.11.2022 14:02:09(орфография)
sokol92 написал: Проблема, вероятно, связана с тем, что Вы используете формулу массива в качестве формулы условного форматирования. Попробуйте заменить в макросе СУММ на СУММПРОИЗВ.
Еще раз огромное спасибо, помогло - всё отлично!
Цитата
vikttur написал: i3anan , измените логин. Не нужно буквы цифрами подменять
Я понимаю п.п. 3.2. должен быть выполнен беспрекословно, но всё-же, есть ли возможность поменять отображаемое имя без изменения логина? Просто для меня это будет крайне не удобно, т.к. имеется многолетняя привязка на многих форумах именно к этому логину.
Здравствуйте уважаемы форумчане. Сразу к делу: При попытке создать правило условного форматирования макросом, правило создается но формат не применяется. Причем, стоит зайти в редактирование этого правила (а именно в редактирование формулы) и ничего не изменяя - нажать ок/применить форматирование - правило начинает работать. При повторном применении макроса - правило снова перестает работать
Правило взято из статьи Николая Павлова Выделение дубликатов цветом и должно подсвечивать повторы не по одному столбцу, а по нескольким.
Kuzmich спасибо, но я уже перелопатил пару руководств и нашел плюс мне параллельно подсказали с соседнего ресурса (ссылку на который дал многоуважаемый Z)
После моего Вопроса к администрации отписалось как минимум 2 представителя, но ни один не ответил на вопрос... Да - так хорошо, НЕТ - ну на нет, как говорится...
Здравствуйте уважаемые ТС, форумчане и администрация. Честно говоря, поначалу после происшествия и столь "теплого" приема даже и писать что-либо не хотелось. Но увидев, что есть и адекватно воспринявшие ситуацию люди, решил всё-таки отписаться.
На сколько мне известно, форумы создаются для безвозмездной взаимопомощи, я думаю ваш - не исключение. И вот когда «новичок» попросил о такой помощи, его сразу отправляют в платный раздел. Ситуация двоякая – раз. Параллельно вставляя фразочки – явно показывающие недоброжелательный настрой – два, причем нисколько не помогающие решить проблему – три. Действительно "радушный" прием...
Я естественно до конца сохраняя спокойствие, и решив по вышеописанным причинам попросить подобной помощи на соседних ресурсах, естественно предварительно уточнив из правил не запрещено ли данное действие (п.п.4.1). После чего эти же «участники» видимо на правах «старичков» форума, начинают мнить из себя администрацию.
В общем не сдержался, за что и прошу прощения. НО настолько ли Я ХАМ? Называя вещи своими именами? Не грубя, выражаясь литературным языком…ну да ладно администрацию не осуждают. Теперь по делу, на параллельном ресурсе (том самом, в которое меня как котенка тыкали) на вопрос, который я задал дали ответ. Вопрос к администрации, есть ли возможность открыть ту самую тему (возможно с удалением «ошибок» прошлого), для внесения мной же ответа. Так как я считаю, что тема не должна страдать из-за когнитивных ошибок отдельных форумчан (в т.ч. и меня). Возможно кому-то пригодится решение, или кто-то предложит альтернативное решение...
И правила я знаю, п.п 4.1 находится в разделе "Не рекомендуется" а не "Запрещено". Вас не напрягает, что "...вы заставляете сразу нескольких людей параллельно думать над вашей задачей и обесцениваете усилия тех, кто даст ответ вторым-третьим и т.д."[МОДЕРАТОР]
Скорее второе... А по поводу поиска - все найденные темы по запросу "подсветка", "выделение" приводят, простите за тавтологию, к выделению всей ячейки\строки\столбца, а вот внутри ячейки не нашел, однако буду рад, даже если Вы меня ткнете носом в такую тему...
Цитата
А примерчик - файл XL - все-таки приложите
не стал прикладывать, так как прикладывать нужно что-то, а на текущий момент нет ничего кроме идеи, которую изложил в первом посте весьма доходчиво
Здравствуйте уважаемые гуру Excel'я. В вашей статье Поиск символов латини... есть пункт про подсветку символов определенным цветом. Мне необходима подобная функция, но с небольшим различием. Необходимо выделение конкретных символов в ячейке по заданному образцу, например: Ячейка1______Ячейка2___Ячейка3___Ячейка4___Ячейка5 абвгд________аб________0_________1_________абвгд абвгд________гд________1_________2_________абвГД
Яч1 - исходный текст Яч2 - образец для выделения Яч3 - да\нет смена регистра Яч4 - код цвета (условно) Яч5 - результат
В общем как то так макросик то несложный, и для тех кто знает синтаксис VBA проблем не составит, Буду рад за любую оказанную помощь