Nigdzie niemoge znalezc odpowiedzi

Użytkowanie arkusza kalkulacyjnego
superkiel11
Posty: 3
Rejestracja: czw mar 24, 2011 1:29 pm

Nigdzie niemoge znalezc odpowiedzi

Post autor: superkiel11 »

Witam . mam problem mianowicie zrobilem arkusz w ktorym wstawialem w niektore komorki 1 albo zostawialem je puste . Chcialbym stworzyc formule wiersza ktora podaje adresy 3 albo 2 komorek z zawartoscia 1 przylegajacych do siebie w wyznaczonej komorce , jesli nieprzylegaja do siebie 3 lub 2 komorki w danym wierszu nic niepokazuje czyli jesli B2=1,C2=1,D2=1 to wynik J2= B2,C2,D2 Z gory dziekuje i sorry za nieprzejzystosc
Windows 7 ,office student 2007
Jan_J
Posty: 4565
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Nigdzie niemoge znalezc odpowiedzi

Post autor: Jan_J »

Nie ma takiej funkcji. Nie można napisać takiej funkcji w Basicu, bo argumenty, jakie funkcja otrzymuje podczas obliczania formuły, nie są adresami komórek, tylko wartościami. Więc dowiesz się, jaką wartość ma komórka, ale nie sprawdzisz, skąd się wzięła.
Można natomiast napisać sobie taką procedurę, działającą np. na bieżącym wierszu albo na zaznaczonym zakresie komórek.
Coś w rodzaju naprędce skleconego

Kod: Zaznacz cały

sub serieWWierszach()
	mindlug = 2 ' wyłapuj ciągi o tej lub większej długości
        kolumnaWynikowa = 0 ' w tej komórce gromadź wyniki
	doc = thisComponent
	r = doc.currentController.Selection.RangeAddress
	s = thisComponent.Sheets.getByIndex(r.Sheet)
	for i = r.StartRow to r.EndRow
	  bloki = ""
   	  pocz = ""
	  c = s.getCellByPosition(j,i)
	  wbloku = 0
	  for j = r.StartColumn to r.EndColumn
	  	lc = c
	  	c = s.getCellByPosition(j,i)
	    if c.getValue() = 1 then 
	       if wbloku = 0 then
	         pocz = CellAddress(c) & ":"
	       endif
	       wbloku = wbloku + 1
	    else
	      if wbloku >= mindlug then
	    	  bloki = bloki & pocz & CellAddress(lc) & ";"
          endif
    	  pocz = ""
	      wbloku = 0
	    endif
	  next j
	  if wbloku >= mindlug then
    	  bloki = bloki & pocz & CellAddress(c) & ";"
	  endif 
	  if len(bloki) > 0 then
  	    bloki = left(bloki, len(bloki)-1)
  	  endif  
	  s.getCellByPosition(kolumnaWynikowa,i).setString(bloki)
	next i
end sub
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
superkiel11
Posty: 3
Rejestracja: czw mar 24, 2011 1:29 pm

Re: Nigdzie niemoge znalezc odpowiedzi

Post autor: superkiel11 »

Kolego ale mi chodzilo o excela a nie visial basic :D:D hehe wiec ponawiam pytanie
Windows 7 ,office student 2007
Jan_J
Posty: 4565
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Nigdzie niemoge znalezc odpowiedzi

Post autor: Jan_J »

superkiel11 pisze:Kolego ale mi chodzilo o excela a nie visial basic :D:D hehe wiec ponawiam pytanie
Zacytuję pierwszą część mojej wypowiedzi.
Nie ma takiej funkcji. Nie można napisać takiej funkcji w Basicu, bo argumenty, jakie funkcja otrzymuje podczas obliczania formuły, nie są adresami komórek, tylko wartościami. Więc dowiesz się, jaką wartość ma komórka, ale nie sprawdzisz, skąd się wzięła.
Można natomiast napisać sobie taką procedurę, działającą np. na bieżącym wierszu albo na zaznaczonym zakresie komórek.
Za pomocą funkcji Wyszukaj() i Adres() możesz próbować klecić takie formuły. ale zanim dojdziesz do wyizolowania bloków jedynek, zagubisz się w skomplikowanych przeliczeniach. To nie jest dobre zadanie na formułę.

Btw, ani to Excel, ani to Visual Basic, mimo że podobne.
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
superkiel11
Posty: 3
Rejestracja: czw mar 24, 2011 1:29 pm

Re: Nigdzie niemoge znalezc odpowiedzi

Post autor: superkiel11 »

No chyba ze tak:D:D to w jakim programie moglbym cos takiego stworzyc , dziekuje i pozdrawiam
Windows 7 ,office student 2007
ODPOWIEDZ