Zakres przejścia do funkcji ABS w VBA


1

Chciałbym wykonać funkcję, która wygląda tak

Selection.FormulaArray = "=GEOMEAN(ABS((C646:E646)))"

Ponieważ mój zasięg ciągle się zmienia, chciałbym przekazać zakres jako zmienną, która wygląda tak

Range1 = Range("C646", Range("C646").Offset(0, 2)).Address(False, False)
Selection.FormulaArray = "=GEOMEAN(ABS(Range1))"

Otrzymuję błąd jako #NAME?

Ale jeśli przejdę w ten sposób

x = Range("C646").Address(False, False)    
Y = Range("C646").Offset(0, 2).Address(False, False)    
Selection.FormulaArray = "=GEOMEAN(ABS((x:y)))"

Dostaję błąd jako # WARTOŚĆ!

Czy ktoś może pomóc?

Odpowiedzi:


1

Wymień linię Selection.FormulaArray = "=GEOMEAN(ABS(Range1))" w twoim kodzie:

Selection.FormulaArray = "=GEOMEAN(ABS(" & Range1 & "))"

Nie testowałem tego, ale to wydaje się słuszne. (Uwaga: od tego czasu twoja konwencja nazewnictwa jest myląca Range1 to naprawdę łańcuch, a nie zakres.


Dzięki spróbowałem użyć, jak już wspomniałeś. To wyszło dobrze dla pojedynczego zakresu. Kiedy próbowałem kopiować, daje mi taką samą wartość dla wszystkich zakresów. Mój kod wygląda następująco: Range1 = Range („C1467”, Range („C1467”). Offset (0, 2)). Address (False, False) Range („M1467”). Wybierz Selection.FormulaArray = ”= GEOMEAN ( ABS („& amp; Range1 i”)) „Selection.AutoFill Destination: = Range („ M1467: M1667 ”), wpisz: = xlFillDefault Range („ M1467: M1667 ”). Wybierz. Muszę więc przejść do każdej komórki mającej tę formułę i wykonać CTRL + SHIFT + ENTER, a następnie uzyskać odpowiednią wartość. Tablica formuł nie działa!
NK1

0

ABS po prostu zwraca wartość bezwzględną dla liczby, a nie zakresu. Być może chcesz AVEDEV funkcja, która zwraca średnią bezwzględnych odchyleń punktów danych od ich średniej.

Dla GEOMEAN musisz albo zapętlić zakres w kodzie stosując ABS do każdej wartości i zbudować nowy zakres, aby przejść do funkcji.

Lub zgodnie z tym Odpowiedź StackOverflow użyj alternatywnej formuły:

EXP(AVERAGE(LN(A1:A171)))

Próbuję obliczyć średnią wartości logów (dB). Dlatego muszę użyć średniej geometrycznej. Ponieważ GEOMEAN nie działa dla liczb ujemnych, staram się przekonwertować liczby na wartość ABSOLUTE, a następnie zastosować funkcję GEOMEAN. Złap jest formułą Selection.FormulaArray = "= GEOMEAN (ABS ((C646: E646)))" działa idealnie dla wartości zakresu wymienionych tutaj. Mam jednak n zakresów i chcę umieścić tę formułę w pętli, aby obliczyć n liczby zakresów. Co się nie dzieje!
NK1

@ user216576 dodał więcej informacji dotyczących geomean
Brad Patton

Chciałbym wspomnieć, że jestem naiwnym użytkownikiem VBA w Excelu. Aby rozwiązać ten problem, wypróbowuję pracę. To przekształca każdą wartość komórki w absolutną, a następnie oblicza GEOMEAN. Ponieważ mam wartości ujemne w niektórych zakresach, stosuję znak ujemny na podstawie początkowej zawartości komórki. Ta metoda jest dość długa, mam nadzieję, że ktoś mógłby mi pomóc w rozwiązaniu bezpośrednim.
NK1

Spędziłem więcej czasu tego wieczoru, a potem powinienem spróbować stworzyć funkcję VB. Powinieneś prawdopodobnie utworzyć nową kolumnę, zastosować ABS do wszystkich wartości, a następnie wziąć GEOMEAN liczb dodatnich. Przepraszam, nie mogłem być bardziej pomocny.
Brad Patton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.