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?

NK1
źródło

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.

Excellll
źródło
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)))
Brad Patton
źródło
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