просто, якщо умова не працює в Excel

For Row = row_start To l1 + row_start
    For Column = col_start To l2 + col_start
        If Cells(Row, Column).Value = Cells(2, Column).Value Or Cells(Row, Column).Value = Cells(Row, 2).Value Then
            Cells(Row, Column).Interior.ColorIndex = 3
        End If
    Next Column
Next Row

Це частина макросу, яку я виконую. Моя рядова мінлива бігає від 5 до 33, а змінна стовпця - від 6 до 34. У мене є значення 824,6 в AA6, а також в AA2. Аналогічно, 824,8 в AB7 та AB2. 825 значення в AC8 і AC2. І так далі .. Але тільки AC8 фарбується червоним, а не іншими. Я не розумію, де є помилка. Чи може хто-небудь допомогти? Спасибі заздалегідь!

0
... і які значення критеріїв було пропущено, і ви очікуєте, що ви ввійдете в IF - чи використовували ви Вікно безпосереднього для перевірки?
додано Автор whytheq, джерело
.... і що станеться, якщо ви зробите формулу в speadsheet, подібно до цього = A1 = A2 , щоб порівняти ці дві комірки, які, на вашу думку, мають одне і те ж значення - чи це означає «Правда» або «Неправда»?
додано Автор whytheq, джерело
На цьому етапі програми, будь ласка, спробуйте Cells (Row, Column) .Value , ? Cells (2, Column) .Value і ? Cells (Row, Колонка) .Value = Клітини (2, Колонка). Значення у безпосередньому вікні - вони повертають x, x, TRUE ?
додано Автор whytheq, джерело
... Ви перейшли через макрос, використовуючи F8?
додано Автор whytheq, джерело
раді, що ви знайшли робоче місце
додано Автор whytheq, джерело
раді, що ви знайшли робоче місце
додано Автор whytheq, джерело
раді, що ви знайшли робоче місце
додано Автор whytheq, джерело
Я використав функцію Round (), перш ніж вводити значення в комірки, і тепер вона працює! Але, я не розумію, чому він раніше не працював і чому один шлях показує справжній та інший шлях показує помилку для порівняння ..
додано Автор Sravanth42, джерело
Я використав функцію Round (), перш ніж вводити значення в комірки, і тепер вона працює! Але, я не розумію, чому він раніше не працював і чому один шлях показує справжній та інший шлях показує помилку для порівняння ..
додано Автор Sravanth42, джерело
Він показує x, x False .. але в листі excel, коли я намагаюся = AA2 = AA6, він показує TRUE ..
додано Автор Sravanth42, джерело
Він показує x, x False .. але в листі excel, коли я намагаюся = AA2 = AA6, він показує TRUE ..
додано Автор Sravanth42, джерело
Він показує TRUE ..
додано Автор Sravanth42, джерело
це показує таке ж значення для обох ..
додано Автор Sravanth42, джерело
так, я зробив .. код просто пропускає, якщо умова, як би це не було правдою ..
додано Автор Sravanth42, джерело

7 Відповіді

Я не розумію, що в коді l1 і l2 ?

В якості випробувань, будь-ласка, замініть жорстко-кодованими значеннями та спробуйте наступне:

Sub xxx()

Dim row
Dim column
Dim row_start As Integer
Dim col_start As Integer
row_start = 5
col_start = 6

For row = row_start To 33
    For column = col_start To 34
        If Cells(row, column).Value = Cells(2, column).Value Or Cells(row, column).Value = Cells(row, 2).Value Then
            Cells(row, column).Interior.ColorIndex = 3
        End If
    Next column
Next row

End Sub

Найпростіший спосіб дізнатися, що відбувається, - це помістити курсор у код і натиснути F8 , після чого послідовно натискати F8 на цикли. Додайте наступні два вирази до вікна Watch , щоб ви могли відстежувати їх значення (без лапок), і, сподіваємось, знайдете комірки, які не відповідають вашим критеріям:

  1. "Клітинки (рядок, стовпець) .Value = Клітини (2, колонка). Значення"
  2. "Клітинки (рядок, стовпець) .Value = Клітини (рядок, 2). Значення"
0
додано
код працює, коли номер твердокодування .. цифри утворюються за допомогою дайвінгу набору чисел на 5 .. однак, для іншого введення .. код позначає всі правильні комірки, за винятком коли десяткова частина становить 0,4 ..
додано Автор Sravanth42, джерело

Я не розумію, що в коді l1 і l2 ?

В якості випробувань, будь-ласка, замініть жорстко-кодованими значеннями та спробуйте наступне:

Sub xxx()

Dim row
Dim column
Dim row_start As Integer
Dim col_start As Integer
row_start = 5
col_start = 6

For row = row_start To 33
    For column = col_start To 34
        If Cells(row, column).Value = Cells(2, column).Value Or Cells(row, column).Value = Cells(row, 2).Value Then
            Cells(row, column).Interior.ColorIndex = 3
        End If
    Next column
Next row

End Sub

Найпростіший спосіб дізнатися, що відбувається, - це помістити курсор у код і натиснути F8 , після чого послідовно натискати F8 на цикли. Додайте наступні два вирази до вікна Watch , щоб ви могли відстежувати їх значення (без лапок), і, сподіваємось, знайдете комірки, які не відповідають вашим критеріям:

  1. "Клітинки (рядок, стовпець) .Value = Клітини (2, колонка). Значення"
  2. "Клітинки (рядок, стовпець) .Value = Клітини (рядок, 2). Значення"
0
додано
код працює, коли номер твердокодування .. цифри утворюються за допомогою дайвінгу набору чисел на 5 .. однак, для іншого введення .. код позначає всі правильні комірки, за винятком коли десяткова частина становить 0,4 ..
додано Автор Sravanth42, джерело

Я не розумію, що в коді l1 і l2 ?

В якості випробувань, будь-ласка, замініть жорстко-кодованими значеннями та спробуйте наступне:

Sub xxx()

Dim row
Dim column
Dim row_start As Integer
Dim col_start As Integer
row_start = 5
col_start = 6

For row = row_start To 33
    For column = col_start To 34
        If Cells(row, column).Value = Cells(2, column).Value Or Cells(row, column).Value = Cells(row, 2).Value Then
            Cells(row, column).Interior.ColorIndex = 3
        End If
    Next column
Next row

End Sub

Найпростіший спосіб дізнатися, що відбувається, - це помістити курсор у код і натиснути F8 , після чого послідовно натискати F8 на цикли. Додайте наступні два вирази до вікна Watch , щоб ви могли відстежувати їх значення (без лапок), і, сподіваємось, знайдете комірки, які не відповідають вашим критеріям:

  1. "Клітинки (рядок, стовпець) .Value = Клітини (2, колонка). Значення"
  2. "Клітинки (рядок, стовпець) .Value = Клітини (рядок, 2). Значення"
0
додано
код працює, коли номер твердокодування .. цифри утворюються за допомогою дайвінгу набору чисел на 5 .. однак, для іншого введення .. код позначає всі правильні комірки, за винятком коли десяткова частина становить 0,4 ..
додано Автор Sravanth42, джерело

Чи є ці значення точно те, що ви заявляєте, чи вони відображаються округленими?

Властивість Value буде використовувати фактичні значення в комірках, а не їх відображуване значення. Отже, 824.6 і 824.5999 , відформатовані з одним десятковим значком, різні .

Кращий варіант полягає в тому, щоб скласти вікно повідомлень (або формулу десь) з різницею між підозрілими клітинами.

Наприклад, на наступному аркуші A1 є 824.6 , а B1 форматований як число з одним десятковим знаком і встановлено на 824.5999 . C1 форматований загальним і встановлено на = a1-b1 :

      A       B       C
1   824.6   824.6   1E-04

Що стосується того, як це виправити (якщо це проблема), я вважаю, що властивість Text комірки є тим, що відображається на екрані. Якщо ви використовуєте це, воно повинно враховувати формати клітинок тощо.

Ви також можете використовувати щось на кшталт:

MsgBox "diff = " & CStr(Range("b1").Value - Range("a1").Value)

Крім того, я б запропонував просто перейти через макрос з F8 (step in) і додати клітинки до вашого списку спостереження, щоб ви могли побачити, що вони є.

0
додано
Я перевірив різницю і точно показує 0.
додано Автор Sravanth42, джерело

Чи є ці значення точно те, що ви заявляєте, чи вони відображаються округленими?

Властивість Value буде використовувати фактичні значення в комірках, а не їх відображуване значення. Отже, 824.6 і 824.5999 , відформатовані з одним десятковим значком, різні .

Кращий варіант полягає в тому, щоб скласти вікно повідомлень (або формулу десь) з різницею між підозрілими клітинами.

Наприклад, на наступному аркуші A1 є 824.6 , а B1 форматований як число з одним десятковим знаком і встановлено на 824.5999 . C1 форматований загальним і встановлено на = a1-b1 :

      A       B       C
1   824.6   824.6   1E-04

Що стосується того, як це виправити (якщо це проблема), я вважаю, що властивість Text комірки є тим, що відображається на екрані. Якщо ви використовуєте це, воно повинно враховувати формати клітинок тощо.

Ви також можете використовувати щось на кшталт:

MsgBox "diff = " & CStr(Range("b1").Value - Range("a1").Value)

Крім того, я б запропонував просто перейти через макрос з F8 (step in) і додати клітинки до вашого списку спостереження, щоб ви могли побачити, що вони є.

0
додано
Я перевірив різницю і точно показує 0.
додано Автор Sravanth42, джерело

Чи є ці значення точно те, що ви заявляєте, чи вони відображаються округленими?

Властивість Value буде використовувати фактичні значення в комірках, а не їх відображуване значення. Отже, 824.6 і 824.5999 , відформатовані з одним десятковим значком, різні .

Кращий варіант полягає в тому, щоб скласти вікно повідомлень (або формулу десь) з різницею між підозрілими клітинами.

Наприклад, на наступному аркуші A1 є 824.6 , а B1 форматований як число з одним десятковим знаком і встановлено на 824.5999 . C1 форматований загальним і встановлено на = a1-b1 :

      A       B       C
1   824.6   824.6   1E-04

Що стосується того, як це виправити (якщо це проблема), я вважаю, що властивість Text комірки є тим, що відображається на екрані. Якщо ви використовуєте це, воно повинно враховувати формати клітинок тощо.

Ви також можете використовувати щось на кшталт:

MsgBox "diff = " & CStr(Range("b1").Value - Range("a1").Value)

Крім того, я б запропонував просто перейти через макрос з F8 (step in) і додати клітинки до вашого списку спостереження, щоб ви могли побачити, що вони є.

0
додано
Я перевірив різницю і точно показує 0.
додано Автор Sravanth42, джерело

Чи є ці значення точно те, що ви заявляєте, чи вони відображаються округленими?

Властивість Value буде використовувати фактичні значення в комірках, а не їх відображуване значення. Отже, 824.6 і 824.5999 , відформатовані з одним десятковим значком, різні .

Кращий варіант полягає в тому, щоб скласти вікно повідомлень (або формулу десь) з різницею між підозрілими клітинами.

Наприклад, на наступному аркуші A1 є 824.6 , а B1 форматований як число з одним десятковим знаком і встановлено на 824.5999 . C1 форматований загальним і встановлено на = a1-b1 :

      A       B       C
1   824.6   824.6   1E-04

Що стосується того, як це виправити (якщо це проблема), я вважаю, що властивість Text комірки є тим, що відображається на екрані. Якщо ви використовуєте це, воно повинно враховувати формати клітинок тощо.

Ви також можете використовувати щось на кшталт:

MsgBox "diff = " & CStr(Range("b1").Value - Range("a1").Value)

Крім того, я б запропонував просто перейти через макрос з F8 (step in) і додати клітинки до вашого списку спостереження, щоб ви могли побачити, що вони є.

0
додано
Я перевірив різницю і точно показує 0.
додано Автор Sravanth42, джерело