Копирајте вредности брзе статистике у међуспремник - Екцел савети

Питање се појавило током Екцел-овог семинара у Тампи: Зар не би било цоол кад бисте могли копирати статистику са статусне траке у међуспремник за касније лепљење у распон?

Притиснуо сам особу која је поставила питање тачно како паста треба да делује. Статистику наравно не можете одмах залепити, јер сте изабрали гомилу важних ћелија. Требало би да сачекате, изаберете други празан опсег табеле, пасте (као у Цтрл + В) и статистика ће се појавити у опсегу од 6 редова са 2 колоне. Особа која је поставила питање сугерисала је да би то биле статичне вредности.

Нисам покушао да одговорим на питање током семинара, јер сам знао да би могло бити мало незгодно ово извести.

Али, недавно сам покренуо макро да видим да ли се то може учинити. Моја идеја је била да направим дугачки текстуални низ који се може налепити. Да би се ставке присилиле да се појављују у две колоне, текстуални низ би морао имати ознаку за колону 1 (Збир), а затим Таб и вредност за колону 2. Тада би вам требао повратак кочије, ознака за ред 2, колона 1, па друга картица, вредност итд.

Знао сам да је Апплицатион.ВорксхеетФунцтион одличан начин за враћање резултата Екцел функција у ВБА, али да не подржава свих 400+ Екцел функција. Понекад, ако ВБА већ има сличну функцију (ЛЕВО, ДЕСНО, МИД), тада Апплицатион.ВорксхеетФунцтион неће подржати ту функцију. Покренуо сам ВБА помоћу Алт + Ф11, приказао сам тренутно окно са Цтрл + Г, а затим сам откуцао неке команде како бих био сигуран да је подржаних свих шест функција статусне траке. Срећом, свих шест вратило је вредности које се подударају са оним што се појавило на статусној траци.

Да бисте макро скратили, променљивој можете доделити Апплицатион.ВорксхеетФунцтион:

Set WF = Application.WorksheetFunction

Затим, касније у макронаредби, можете једноставно упутити се на ВФ.Сум (Избор), уместо да поново и поново откуцате Апплицатион.ВорксхеетФунцтион.

Шта је АСЦИИ код за картицу?

Почео сам да градим текстуални низ. Одабрао сам променљиву МС за МиСтринг.

MS = "Sum:" &

Ово је тачка у којој ми је требао знак табулатора. Довољно сам штреберски да знам неколико АСЦИИ знакова (10 = ЛинеФеед, 13 = Повратак кочије, 32 = размак, 65 = А, 90 = З), али нисам могао да се сетим картице. Кад сам се спремао да кренем у Бинг да је потражим, сетио сам се да у свом коду можете користити вблф за линефеед или вбцр у коду за повратак кочије, па сам откуцао вбтаб малим словом. Затим сам прешао на нову линију како бих Екцел ВБА-у омогућио употребу великих слова које је разумео. Надао сам се да ћу видети како вбтаб подиже капитал, и сасвим сигурно, линија је постала велика, што указује на то да ће ми ВБА дати знак таба.

Ако свој ВБА упишете малим словом, када пређете на нови ред, видећете да су све правилно написане речи негде у речи покупиле велико слово. На доњој слици је познато да вблф, вбцр, вбтаб вба добијају велика слова након преласка на нову линију. Међутим, ствар коју сам измислио, вбамперсанд, ВБА није позната ствар, па се зато не користи великим словима.

У овом тренутку, радило се о спајању 6 ознака и 6 вредности у један дугачки низ. Запамтите у доњем коду да _ на крају сваког ретка значи да се линија кода наставља у следећем реду.

Sub CopyQuickStatsToClipboard1() Set WF = Application.WorksheetFunction MS = "Average: " & vbTab & WF.Average(Selection) & vbCr _ & "Count: " & vbTab & WF.CountA(Selection) & vbCr _ & "Numerical Count: " & vbTab & WF.Count(Selection) & vbCr _ & "Min: " & vbTab & WF.Min(Selection) & vbCr _ & "Max: " & vbTab & WF.Max(Selection) & vbCr _ & "Sum: " & vbTab & WF.Sum(Selection) & vbCr MsgBox MS End Sub

Након што сам се придружио свим етикетама и вредностима, желео сам да се дивим свом раду, па сам резултат приказао у МсгБок-у. Покренуо сам код и учинио је прелепо:

Мислио сам да сам слободан од куће. Ако бих могао само да МС привучем у међуспремник, могао бих да започнем снимање Подцаста 1894. Можда би МС.Цопи учинио трик?

Нажалост, није било тако лако. МС.Цопи није била важећа линија кода.

Дакле, отишао сам на Гоогле и тражио „Екцел ВБА променљиву за копирање у међуспремник“. Један од најбољих резултата био је овај пост на форуму за поруке. У том посту, моји стари пријатељи Јуан Пабло и НатеО покушавали су да помогну ОП. Прави савет је, међутим, био тамо где је Јуан Пабло предложио да се користи неки код са веб локације Екцел МВП Цхип Пеарсон. Пронашао сам ову страницу која је објаснила како да променљиву убацим у међуспремник.

Да бисте нешто додали у међуспремник, прво треба да одете у мени Алатке прозора ВБА и изаберете Референце. У почетку ћете видети неколико референци које су подразумевано проверене. Библиотека Мицрософт Формс 2.0 неће бити проверена. Морате га наћи на врло дугачкој листи и додати. Срећом, за мене је то било на првој страници избора, о месту где га показује зелена стрелица. Када додате ознаку поред референце, помериће се на врх.

Чипов код неће радити ако не додате референцу, зато немојте прескочити горњи корак!

Када додате референцу, довршите макро помоћу Чип-овог кода:

Sub CopyQuickStatsToClipboard() Set WF = Application.WorksheetFunction MS = "Average: " & vbTab & WF.Average(Selection) & vbCr _ & "Count: " & vbTab & WF.CountA(Selection) & vbCr _ & "Numerical Count: " & vbTab & WF.Count(Selection) & vbCr _ & "Min: " & vbTab & WF.Min(Selection) & vbCr _ & "Max: " & vbTab & WF.Max(Selection) & vbCr _ & "Sum: " & vbTab & WF.Sum(Selection) & vbCr ' Thanks to Chip Pearson http://www.cpearson.com/excel/Clipboard.aspx Dim DataObj As New MSForms.DataObject DataObj.SetText MS DataObj.PutInClipboard End Sub

Пре снимања подцаста, направио сам тест да се уверим да ли ради. Свакако, када сам покренуо макро, а затим изабрао нови опсег и притиснуо Цтрл + В за лепљење, привремена меморија се испразнила у опсег колона од 6 редова к 2.

Вхоо-хоо! Припремио сам ПоверПоинт насловну картицу за епизоду, укључио Цамтасиа Рецордер и снимио све горе. Али … док сам хтео да покажем завршне кредите, обузео ме мучан осећај. Овај макро је лепио статистику као статичке вредности. Шта ако се основни подаци промене? Не бисте ли желели да се налепљени блок ажурира? Настала је дуга пауза у подкасту где сам размишљао шта да радим. Коначно, кликнуо сам икону Цамтасиа Паусе Рецординг и отишао да видим да ли могу да убацим формулу унутар МС низа и да ли ће се правилно налепити. Свакако да јесте. Нисам чак ни завршио макро ни урадио више од једног теста када сам поново укључио диктафон и разговарао о овом макроу. У подцасту сам претпоставио да то никада неће успети за несуседне изборе, али у каснијим тестирањима то успева.Ево макронаредбе коју треба налепити као формуле:

Sub CopyQuickStatsAsFormulas() Set WF = Application.WorksheetFunction MA = Selection.Address MS = "Average: " & vbTab & "=AVERAGE(" & MA & ")" & vbCr _ & "Count: " & vbTab & "=CountA(" & MA & ")" & vbCr _ & "Numerical Count: " & vbTab & "=Count(" & MA & ")" & vbCr _ & "Min: " & vbTab & "=Min(" & MA & ")" & vbCr _ & "Max: " & vbTab & "=Max(" & MA & ")" & vbCr _ & "Sum: " & vbTab & "=Sum(" & MA & ")" & vbCr _ ' Thanks to Chip Pearson http://www.cpearson.com/excel/Clipboard.aspx Dim DataObj As New MSForms.DataObject DataObj.SetText MS DataObj.PutInClipboard End Sub

Након постављања видео снимка, редовни гледалац Мике Флисс питао је да ли постоји начин да се изграде формуле које би се стално ажурирале како би се приказале статистике за било који одабрани опсег. Ово би захтевало макро Ворксхеет_СелецтионЦханге који би стално ажурирао именовани опсег тако да одговара избору. Иако је ово хладна подвала, присиљава макро да се покреће сваки пут када померите показивач ћелије, а то ће стално брисати УнДо стек. Дакле, ако користите овај макро, он мора да се дода у свако окно кода радног листа тамо где желите да ради и мораћете да живите без Ундо на тим радним листовима.

Прво, из програма Екцел, кликните десним тастером миша на картицу листа и одаберите Виев Цоде. Затим налепите овај код.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) Selection.Name = "SelectedData" End Sub

Вратите се на Екцел. Изаберите нову ћелију и унесите формулу =SUM(SelectedData). У почетку ћете добити кружну референцу. Али, затим изаберите други опсег нумеричких ћелија и укупан број формула које сте управо креирали ће се ажурирати.

Изаберите нови опсег и формула ће се ажурирати:

За мене је велико откриће овде било како копирати променљиву у ВБА у међуспремник.

Ако желите да експериментишете са радном свеском, одавде можете преузети зиповану верзију.

Занимљиви Чланци...