napisał: abuk postów: 20
umieszczony: 6 stycznia 2006 01:08
|
|
wielkie dzieki pil... rozjasnilo mi to pare watkow i bardzo pomoglo... raz jeszcze thx... |
|
napisał: pil postów: 154
umieszczony: 27 grudnia 2005 07:23
|
|
W dziale makra/Excel zamieściłem to makro. Wszystkich zainteresowanych zachęcam do ściągnięcia. |
|
napisał: pil postów: 154
umieszczony: 22 grudnia 2005 09:04
|
|
Oj, coś nie mam szczęścia. Pętle For... Next powinny wygląć tak:
.
.
.
For i = 1 To mA
For j = 1 To nB
tempWynik = "= 0"
For k = 1 To mB
tempWynik = tempWynik & "+" & macierzA.Cells(i, k).Address() _
& "*" & macierzB.Cells(k, j).Address()
Next k
Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
Next j
Next i
.
.
.
Przepraszam wszystkich za zamieszanie. |
|
napisał: pil postów: 154
umieszczony: 22 grudnia 2005 08:42
|
|
albo tak :
Option Explicit
Sub MnozenieMacierzy()
Dim strA, strB, strC As String
Dim macierzA As Range, macierzB As Range
Dim mA, nA, mB, nB As Integer
Dim tempWynik As String
Dim wierszStart, kolumnaStart As Integer
Dim i, j, k, l As Integer
'pobranie od uzytkownika zakresow z macierzami
strA = Application.InputBox("Wskaż zakres macierzy A :", "mnozenie macierzy", , , , , , 8).Address()
strB = Application.InputBox("Wskaż zakres macierzy B :", "mnozenie macierzy", , , , , , 8).Address()
Set macierzA = Range(strA)
Set macierzB = Range(strB)
'wymiary macierzy
mA = macierzA.Rows.Count: nA = macierzA.Columns.Count
mB = macierzB.Rows.Count: nB = macierzB.Columns.Count
'sprawdzenie czy jest tyle samo kolumn w A co wierszy w B
If (nA = mB) Then
'pozcyja wstawienia wyniku :
strC = Application.InputBox("Wskaż komórkę pocz. wyniku :", "mnozenie macierzy", , , , , , 8).Address()
wierszStart = Range(strC).Row - 1: kolumnaStart = Range(strC).Column - 1
'-1 się bierze z późniejszej iteracji od 1
For i = 1 To mA
For j = 1 To mB 'tutaj poprzednio był błąd ;)
tempWynik = "= 0"
For k = 1 To (nB-1)' tutaj poprzednio był błąd
tempWynik = tempWynik & "+" & macierzA.Cells(i, k).Address() _
& "*" & macierzB.Cells(k, j).Address()
Next k
MsgBox tempWynik
Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
Next j
Next i
Else
MsgBox "Niepoprawne zakresy"
End If
Set macierzA = Nothing
Set macierzB = Nothing
End Sub
Wtedy wynik iloczynu będzie aktualizowany przy zmianie w macierzach A i B. |
|
napisał: pil postów: 154
umieszczony: 22 grudnia 2005 06:57
|
|
Witam. Ja zaproponuję coś takiego :
Option Explicit
Sub MnozenieMacierzy()
Dim strA, strB, strC As String
Dim macierzA As Range, macierzB As Range
Dim mA, nA, mB, nB As Integer
Dim tempWynik As Double
Dim wierszStart, kolumnaStart As Integer
Dim i, j, k As Integer
'pobranie od uzytkownika zakresow z def. macierzy
strA = Application.InputBox("Wskaż zakres macierzy A :", "mnozenie macierzy", , , , , , 8).Address()
strB = Application.InputBox("Wskaż zakres macierzy B :", "mnozenie macierzy", , , , , , 8).Address()
Set macierzA = Range(strA)
Set macierzB = Range(strB)
'wymiary macierzy
mA = macierzA.Rows.Count: nA = macierzA.Columns.Count
mB = macierzB.Rows.Count: nB = macierzB.Columns.Count
'sprawdzenie czy jest tyle samo kolumn w A co wierszy w B
If (nA = mB) Then
'pozcyja wstawienia wyniku :
strC = Application.InputBox("Wskaż komórkę pocz. wyniku :", "mnozenie macierzy", , , , , , 8).Address()
wierszStart = Range(strC).Row - 1
kolumnaStart = Range(strC).Column - 1
For i = 1 To mA
For j = 1 To nB
tempWynik = 0
For k = 1 To nB
tempWynik = tempWynik + macierzA.Cells(i, k) * macierzB.Cells(k, j)
Next k
Cells(wierszStart + i, kolumnaStart + j).Value = tempWynik
Next j
Next i
Else
MsgBox "Niepoprawne zakresy"
End If
Set macierzA = Nothing
Set macierzB = Nothing
End Sub |
|
napisał: Trebor postów: 1209
umieszczony: 19 grudnia 2005 21:16
|
|
Witaj!!
Pewnie nie o to chodzi, ale nikt nie odpisuje to spróbuje wtrącić swoje wypociny (pewnie sobie poczytam zasłużoną krytykę ;)
a = Application.InputBox("Wskaż zakres macierzy", , , , , , , 8).Address()
b = Application.InputBox("Wskaż gdzie utworzyć nową macierz", , , , , , , 8).Address()
c = InputBox("Przez ile pomnożyć?")
Range(b).Select
ActiveCell.CurrentRegion.ClearContents
Range(a).Copy Range(b)
For Each komórka In ActiveCell.CurrentRegion
Range(komórka.Address()) = komórka * c
Next
Wskazana komórka nie może przylegać do macierzy.
Pozdrawiam |
|
napisał: abuk postów: 20
umieszczony: 19 grudnia 2005 16:48
|
|
witam serdecznie...
musze napisac makro, ktore bedzie mnozylo macierze (mxn)... uzytkownik ma wprowadzic wartosci do komorek odpalic makro i zaznaczyc zakresy macierzy... kliknac na komorke bedaca lewym gornym rogiem macierzy, ktora powstanie w wyniku mnozenia...
moze ktos z Was robil cos podobnego i moze cos doradzic (jak sie do tego zabrac) badz wkleic przykladowy kod...
z gory dzieki za jakiekolwiek odpowiedzi...
pozdrawiam... |
|
 wstecz 1 dalej  wszystkich stron: 1
|
|