< návrat zpět

MS Excel


Téma: pojmenované oblasti rss

Zaslal/a 28.12.2010 20:02

Dobrý den,
v příloze jsou tři pojmenované oblasti (oblast1, 2 a 3). Potřebuji vypsat např. do msgboxu obsah sloupce A a D vždy z jedné určité oblasti, která by byla dána pozicí aktivní bunky (je-li to možné). Výpis oblasti2 by měl vypadat asi takto:
F 1
G 7
H 9
I 8
J 2

Příloha: zip3601_pojmenovane_oblasti.zip (2kB, staženo 31x)
Zaslat odpověď >

#003602
Vasey
Sub vypis()
Dim i(1 To 3, 1 To 2) As Single
Dim kderadek%, kdesloupec%, oblast%, f%
Dim hodnota$

i(1, 1) = 1: i(1, 2) = 5
i(2, 1) = 7: i(2, 2) = 11
i(3, 1) = 13: i(3, 2) = 17

kderadek = ActiveCell.Row
kdesloupec = ActiveCell.Column

oblast = 0
hodnota = ""

Select Case kderadek
Case Is <= 5: oblast = 1
Case 7 To 11: oblast = 2
Case 13 To 17: oblast = 3
End Select

If (kdesloupec = 1 Or kdesloupec = 4) And oblast > 0 Then
For f = i(oblast, 1) To i(oblast, 2)
hodnota = hodnota & Cells(f, 1) & " " & Cells(f, 4) & vbCrLf
Next f
Else
hodnota = "nic!"
End If
MsgBox (hodnota)
End Sub
citovat
#003607
avatar
Děkujicitovat
#003616
avatar
Vesey ty jsi vypsal buňky, ne pojmenované oblasti. Pojmenovaná oblast se tvoří proto, abychom zabranili chybným výpisům při vložení buněk, řádků či sloupců, a to jak v pojmenované oblasti tak i mimo ní, to tvůj program nesplňuje, ten je tvrdý jako kámen, pokud by něco takového nastalo musíš měnit všechny parametry programu.
Proto zkus toto:

Sub Vyber()
For Each Oblast In Names
If Not Intersect(ActiveCell, Range(Oblast)) Is Nothing Then
vyh = True
hodnota = Oblast.Name & vbCrLf
For Each bunka In Range(Oblast)
If Not bunka = "" Then
If vyh Then
hodnota = hodnota & bunka & " "
Else
hodnota = hodnota & bunka & vbCrLf
End If
vyh = Not vyh
End If
Next bunka
MsgBox (hodnota)
End If
Next Oblast
End Sub

Sám bych si rád nechal poradit jak zefektivnit (resp. udělat výpis pojmenované oblati, když neznám počet sloupců ani řádků a vybírám po buňce viz přiložený kód.
Díkycitovat
#003618
avatar
Cau, Romane, Tvé řešení se mi zdá mnohem lepší a pro můj účel vhodnější, ale ještě bych potřeboval, aby v tom výpisu byly JEN určené sloupce, tedy A a D, protože v B a C budou také data, ale ty ve výpisu nechci.citovat
#003623
avatar
Hledáš stejné řešení na jaké se já ptám v poslední větě, vím , že je to nějak v litaratuře popsané, ale já si to nepamatuji a momentálně nemám na to ani čas. Myslel jsem, že se někdo ozve a popíše to, jak se pojmeované oblasti chováji při jejich prohledávání.
Tvůj problém lze ale řešit i jinak a to ne obecně, neboť ty chceš konkrétně první a čtvrtý sloupec. Pokud je dám natvrdo tak to lze. Já využívám pojmenované oblasti málo a spíše jen jako startovací body pro makra, pokud si je označiš stejně, tz. pouze body, které chceš, aby makro procházelo (ne všechny buňky) pak je to velmi jednoduché.
Oblasti pro tvůj příklad:
oblast1 =List1!$A$1:$A$5
oblast2 =List1!$A$7:$A$11
oblast3 =List1!$A$13:$A$17
A makro značně jednodušší ale už ne obecné, pokud vložíš sloupec do pojmenované oblasti musíš makro měnit:

Sub VyberA()
For Each Oblast In Names
If Not Intersect(ActiveCell, Range(Oblast)) Is Nothing Then
Hodnota = Oblast.Name & vbCrLf
For Each bunka In Range(Oblast)
Hodnota = Hodnota & bunka & " " & bunka.Offset(0, 3) & vbCrLf
Next bunka
MsgBox (Hodnota)
End If
Next Oblast
End Sub
citovat
#003644
avatar
Dík, použiju to.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje