Saturs
Dažreiz ir nepieciešams ļoti ilgs laiks, lai izdomātu dažas lietas. Bet, kad tie JAU ir izdomāti, pēc tam tie šķiet acīmredzami un pat banāli. No sērijas “Kas, tas bija iespējams?”.
Sākot ar pirmajām versijām, statusa joslā Microsoft Excel loga apakšā tradicionāli tika rādītas atlasīto šūnu kopsummas:
Ja vēlaties, pat bija iespējams ar peles labo pogu noklikšķināt uz šiem rezultātiem un konteksta izvēlnē atlasīt tieši tās funkcijas, kuras mēs vēlamies redzēt:
Un pavisam nesen jaunākajos Excel atjauninājumos Microsoft izstrādātāji pievienoja vienkāršu, bet ģeniālu līdzekli — tagad, noklikšķinot uz šiem rezultātiem, tie tiek kopēti starpliktuvē!
Skaistums.
Bet kā ir ar tiem, kuriem vēl nav (vai jau?) šāda Excel versija? Šeit var palīdzēt vienkārši makro.
Atlasīto šūnu summas kopēšana starpliktuvē, izmantojot makro
Atvērt cilnē attīstītājs (Izstrādātājs) redaktors Visual Basic vai izmantojiet šo īsinājumtaustiņu cits+F11. Izmantojot izvēlni, ievietojiet jaunu tukšu moduli Ievietot - modulis un nokopējiet tur šādu kodu:
Sub SumSelected() Ja TypeName(Selection) <> "Diapazons" Pēc tam izejiet no apakšdaļas, izmantojot GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.SumP Beigu panelis(BeigasC)
Tās loģika ir vienkārša:
- Vispirms nāk “aizsardzība no muļķa” – pārbaudām, kas tieši ir izcelts. Ja nav atlasītas šūnas (bet, piemēram, diagramma), izejiet no makro.
- Pēc tam izmantojiet komandu Getobject mēs izveidojam jaunu datu objektu, kurā vēlāk tiks saglabāta mūsu atlasīto šūnu summa. Garš un nesaprotams burtciparu kods patiesībā ir saite uz Windows reģistra filiāli, kurā atrodas bibliotēka Microsoft Forms 2.0 objektu bibliotēka, kas var izveidot šādus objektus. Dažreiz šo triku sauc arī par netieša novēlota saistīšana. Ja jūs to neizmantojat, tad failā, izmantojot izvēlni, ir jāizveido saite uz šo bibliotēku Rīki — atsauces.
- Atlasīto šūnu summa tiek uzskatīta par komandu WorksheetFunction.Sum(atlase), un pēc tam iegūtā summa tiek ievietota starpliktuvē ar komandu PutInClipboard
Lietošanas ērtībai jūs, protams, varat piešķirt šo makro īsinājumtaustiņiem, izmantojot pogu Makro tab attīstītājs (Izstrādātājs — makro).
Un, ja vēlaties redzēt, kas tieši tika kopēts pēc makro palaišanas, varat ieslēgt starpliktuves paneli, izmantojot mazo bultiņu attiecīgās grupas apakšējā labajā stūrī. Galvenais (Mājas) tab:
Ne tikai summa
Ja papildus banālajai summai vēlies ko citu, tad vari izmantot jebkuru no funkcijām, ko objekts mums nodrošina Darblapas funkcija:
Piemēram, ir:
- Summa – summa
- Vidējais – vidējais aritmētiskais
- Skaits – šūnu skaits ar cipariem
- CountA – aizpildīto šūnu skaits
- CountBlank – tukšo šūnu skaits
- Min – minimālā vērtība
- Max – maksimālā vērtība
- Mediāna — mediāna (centrālā vērtība)
- … Utt.
Ko darīt, ja rindas vai kolonnas ir paslēptas (manuāli vai ar filtru) atlasītajā diapazonā? Lai tos neņemtu vērā summās, mums būs nedaudz jāmaina kods, pievienojot objektu Atlase īpašums SpecialCells(xlCellTypeVisible):
Sub SumVisible() Ja TypeName(Atlase) <> "Diapazons" Pēc tam izejiet no apakšgrupas, izmantojot GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(SpecialCells)T. PutInClipboard beigas ar beigu apakšā
Šajā gadījumā jebkuras kopējās funkcijas aprēķins tiks piemērots tikai redzamajām šūnām.
Ja vajag dzīvu formulu
Ja jūs sapņojat, varat izdomāt scenārijus, kad labāk ir kopēt buferī nevis skaitli (konstanti), bet gan dzīvo formulu, kas aprēķina kopsummas, kas mums vajadzīgas atlasītajām šūnām. Šajā gadījumā jums būs jāpielīmē formula no fragmentiem, pievienojot tai dolāra zīmju noņemšanu un aizstājot komatu (kas tiek izmantots kā atdalītājs starp vairāku atlasīto diapazonu adresēm VBA) ar semikolu:
Sub SumFormula() Ja TypeName(Atlase) <> "Diapazons" Tad izejiet apakšā ar GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText "=СУММ(" & Aizstāt. Adrese, ",", ";"), "$", "") & ")" .PutInClipboard beigas ar beigu apakšpunktu
Summēšana ar papildu nosacījumiem
Un, visbeidzot, pilnīgiem maniakiem varat uzrakstīt makro, kas apkopos nevis visas atlasītās šūnas, bet tikai tās, kas atbilst dotajiem nosacījumiem. Tātad, piemēram, makro izskatīsies tā, ka buferī tiek ievietota atlasīto šūnu summa, ja to vērtības ir lielākas par 5 un tajā pašā laikā tās ir aizpildītas ar jebkuru krāsu:
Sub CustomCalc() Dim myRange As Range If TypeName(Selection) <> "Range" Tad izejiet no apakšdaļas katrai atlases šūnai If cell.Value > 5 Un cell.Interior.ColorIndex <> xlNone then If myRange Is Nothing then Set myRange = cell Else Iestatīt myRange = Union(mans diapazons, šūna) Beigas Ja Beigas Ja Nākamā šūna With GetObject("Jauns:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText WorksheetFunction.Sum(myRange) EndP With EndInC) .
Kā jūs viegli varat iedomāties, nosacījumus var iestatīt pilnīgi jebkurus - līdz šūnu formātiem - un jebkurā daudzumā (tostarp sasaistot tos ar loģiskajiem operatoriem vai vai un). Ir daudz vietas iztēlei.
- Pārvērst formulas vērtībās (6 veidi)
- Kas ir makro, kā tos lietot, kur ievietot Visual Basic kodu
- Noderīga informācija Microsoft Excel statusa joslā