zadanie z vba

Odpowiedz Nowy wątek
2019-01-08 17:32
0

Witam, nigdy nie miałem styczności z programowaniem, a gość z informatyki zadał mi zadanie i nie jestem w stanie go wykonać, dodatkowo nie chce mi wyjaśnić niektórych kwestii bo "nie mogę za was wykonać tego zadania" mógłby mi ktoś pomóc? nie oczekuje gotowego rozwiązania ale przynajmniej jakichś podpowiedzi które mogły by mi pomóc. od razu uprzedzam, że jestem w tym zielony.

oto zadanie: w arkuszu danego skoroszytu znajdują się dwie kolumny liczb. należy znaleźć te kolumny i traktując pierwsza kolumnę jako ciąg argumentów funkcji, a drugą jako ciąg wartości funkcji, policzyć metodą trapezów całkę oznaczoną tak zdefiniowanej funkcji f(x) oraz funkcji: f^2(x), tg(x)f(x^2). odpowiedni wynik należy wstawić, w odstępie jednego wiersza, pod kolumną reprezentującą wartości danej funkcji. wśród wszystkich liczb wyróżnić liczby, których mantysy są mniejsze niż 0.5

z tego co mi wyjaśnił to trzeba tu wstawić tabelę która znajdowała by wpisane przez niego liczby, a następnie po włączeniu tego programu wszystko obliczyło. o ile wiem teoretycznie jak to zrobić tak praktycznie nic mi się nie udaje. największy problem mam właśnie ze stworzeniem tej tablicy i po mimo, że szukałem jak się to robi nic mi nie wychodzi.

Pozostało 580 znaków

2019-01-08 19:29
0

Poniżej działający kod, przy założeniu że pierwotne ciągi liczb, w obu kolumnach są ciągłe (brak pustych komórek w kolumnach). Wszystkie obliczenia można wykonać w jednej pętli, dla przejrzystości umieściłem logikę w trzech osobnych.

W tym miejscu zaimplementuj wzór, ja umieściłem proste dodawanie:

For Each cell01 In Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(bottom01, FirstCellAddress.Column))
    cell01.Offset(RowSpan, 1).Value = cell01.Value + cell01.Offset(0, 1).Value ' tutaj zaimplementuj wzór
Next cell01
Sub abc()
 
Dim FirstCellAddress As Range
Dim cell01
Dim bottom01 As Single
Dim RowSpan As Single
 
Set FirstCellAddress = Range("a1:xfd1048576").Find(what:="*", LookIn:=xlValues) 'zakres dla Excel od 2007 w górę
 
bottom01 = Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(FirstCellAddress.Row, FirstCellAddress.Column)).End(xlDown).Row
RowSpan = bottom01 - FirstCellAddress.Row + 2
 
For Each cell01 In Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(bottom01, FirstCellAddress.Column))
    cell01.Offset(RowSpan, 1).Value = cell01.Value + cell01.Offset(0, 1).Value ' tutaj zaimplementuj wzór
Next cell01
 
For Each cell01 In Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(bottom01, FirstCellAddress.Column + 1))
    If Abs(cell01.Value) - Abs(Fix(cell01.Value)) < 0.5 Then
        cell01.Interior.Color = RGB(128, 128, 128)
    End If
Next cell01
 
For Each cell01 In Range(Cells(bottom01 + 2, FirstCellAddress.Column + 1), Cells(bottom01 + RowSpan, FirstCellAddress.Column + 1))
    If Abs(cell01.Value) - Abs(Fix(cell01.Value)) < 0.5 Then
        cell01.Interior.Color = RGB(128, 128, 128)
    End If
Next cell01
 
End Sub

Pozostało 580 znaków

2019-01-08 19:30
1

Nagraj makro.
Stań w komorce A1. Wciśnij END -> i skoczysz do pierwszej niepustej kolumny. Drugą znajdziesz tak samo.
Potem popatrz, jak to makro zrobiło...

Pozostało 580 znaków

2019-01-08 21:32
0

Marcin.Miga

Dobre i przydatne. Działa w poziomie i w pionie.
Podpowiedz jeszcze jak z pod VBA odczytać do której kolumny lub wiersza "skoczyło" zaznaczenie?

Pozostało 580 znaków

2019-01-08 21:43
1

ActiveCell.Column i ActiveCell.Row

Pozostało 580 znaków

2019-01-08 22:09
0

Coś nie tak jest z moim myśleniem bo nawet nie znając tych poleceń mogłem je "wykombinować". Popatrzeć co wyświetla "podpowiadacz".

Pozostało 580 znaków

2019-01-11 21:06
0

Witam!
Z takiej racji iż widzę po treści posta i zadania, że z kolegą mamy tego samego Pana u którego zaliczamy nie tworzę nowego posta i podpinam się o pomoc, będąc w sytuacji jak autor.
Treść mojego zadania:

W arkuszu danego skoroszytu znajdują się dwa wiersze liczb. Należy znaleźć te wiersze i traktując pierwszy wiersz jako ciag argumentów a drugi jako ciag wartoci, obliczyć metodą trapezów całkę oznaczoną tak zdefiniowanej funkcji f(x) oraz funkcji |x|f(x), tg(x)f(x^0.5). Odpowiedni wynik wstawić w odstępie jednej kolumny na prawo od wiersza reprezentującego wartości danej funkcji. Wśród liczb wyróżnić liczby parzyste.

Proszę o pomoc z mniej więcej objaśnieniem co gdzie i jak tak bym mogł się czego kolwiek nauczyć :)

Pozostało 580 znaków

2019-01-14 19:59
0

Poniżej gotowiec, zmodyfikowana wersja poprzedniego kodu, umieściłem komentarze, co robi dana część kodu. Opisu funkcji poszukaj w google i na stacku, tam są dokładnie opisane.

Sub abc1()
 
Dim FirstCellAddress As Range 'adres pierwszej komórki z wartością
Dim cell01 As Range 'komórka do operacji na pętlach
Dim right01 As Single 'numer ostatniej kolumny pierwszego zakresu
Dim RowSpan As Single ' szerokość zakresu
 
If Range("a1").Value = "" Then
    Set FirstCellAddress = Range("a1:xfd1048576").Find(What:="*", LookIn:=xlValues) 'zakres dla Excel od 2007 w górę, tutaj przeszukujesz zakres
Else
    Set FirstCellAddress = Range("a1") 'gdy pierwsza niepusta komórka to A1
End If
 
right01 = Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(FirstCellAddress.Row, FirstCellAddress.Column)).End(xlToRight).Column
RowSpan = right01 - FirstCellAddress.Column + 2 'wartośc przesunięcia kolumny, czyli gdzie wstawić wartości z wyniku
 Debug.Print FirstCellAddress.Address
For Each cell01 In Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(FirstCellAddress.Row, right01))
    cell01.Offset(1, RowSpan).Value = cell01.Value + cell01.Offset(1, 0).Value ' tutaj zaimplementuj wzór
    'Debug.Print cell01.Address
Next cell01 'tutaj iterujesz po każdej komórce w zakresie i wstawiasz wynik zgodnie z przesunięciem
 
For Each cell01 In Range(Cells(FirstCellAddress.Row, FirstCellAddress.Column), Cells(FirstCellAddress.Row + 1, right01))
    If cell01.Value - (Int(cell01.Value / 2) * 2) = 0 Then
        cell01.Interior.Color = RGB(128, 128, 128)
    End If
Next cell01 'również iterujesz po zakresie, sprawdzasz czy liczba jest parzysta
 
For Each cell01 In Range(Cells(FirstCellAddress.Row + 1, FirstCellAddress.Column + RowSpan), Cells(FirstCellAddress.Row + 1, right01 + RowSpan))
    If cell01.Value - (Int(cell01.Value / 2) * 2) = 0 Then
        cell01.Interior.Color = RGB(128, 128, 128)
    End If
    'Debug.Print cell01.Address
Next cell01 'iterujesz po zakresie z wynikiem, sprawdzasz jw.
 
End Sub

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: Googlebot