Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Пример 2. Код валюты указан с помощью форматирования

Пример прайса:

...

Вывод валюты форматированием - это когда вы вместе с цифрой цены в ячейке видите и пометку валюты, какой-то символ, например $, или код валюты EUR. При этом, если выделить эту ячейку, то в строке формулы не видно этого текста, а видно только одно число или выражение. Это значит, что текст не вписан и его нельзя определить исходя из текста в ячейке, а нужно определять по форматированию ячейки.

...

Код валюты в этом прайсе определяется с помощью макроса:

Expand
titleМакрос определения валюты по форматированию (разверните)
Code Block
languagevb
'индекс листа
SHEET_IDX = Array(1)
'SHEET_IDX = Array(1,3,5)

'список строк, которые присутствуют в формате ячейки
TEXT_ARRAY = Array("$", "e")

'список кодов валют (в том же порядке как и искомый текст)
CURR_ARRAY = Array("USD", "EUR")

'валюта цены, если не найдена ни один текст из списка
DEFAULT_PRICE_CURR = "RUB"

'валюта РЦ, если не найдена ни один текст из списка
DEFAULT_RC_CURR = "RUB"

'колонка с ценой (0, если в прайсе нет цены)
CLMN_PRICE = 5

'колонка, в которую будет помещен код валюты цены
CLMN_RESULT_PRICE = 20

'колонка с РЦ (0, если в прайсе нет РЦ)
CLMN_RC = 0

'колонка, в которую будет помещен код валюты РЦ
CLMN_RESULT_RC = 0

'начальная строка, с которой начинаются товары в прайсе
FIRST_ROW = 16

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

for n = LBound(SHEET_IDX) To Ubound(SHEET_IDX)
	Set Sht = Sheets(SHEET_IDX(n))

	For i = FIRST_ROW To Sht.UsedRange.Rows.Count
		if CLMN_PRICE > 0 then
			If Sht.Cells(i, CLMN_PRICE).Value <> "" Then
				str_format = Sht.Cells(i, CLMN_PRICE).NumberFormat
				
				is_found = False
				
				For j = LBound(TEXT_ARRAY) To Ubound(TEXT_ARRAY)
					If InStr(1, str_format, TEXT_ARRAY(j)) Then
						Sht.Cells(i, CLMN_RESULT_PRICE).Value = CURR_ARRAY(j)
						is_found = True
						Exit For
					End If
				Next j
				
				If Not is_found Then
				   Sht.Cells(i, CLMN_RESULT_PRICE).Value = DEFAULT_PRICE_CURR
				End If
			End If
		End If
		
		if CLMN_RC > 0 then
			If Sht.Cells(i, CLMN_RC).Value <> "" Then
				str_format = Sht.Cells(i, CLMN_RC).NumberFormat
				
				is_found = False
				
				For j = LBound(TEXT_ARRAY) To Ubound(TEXT_ARRAY)
					If InStr(1, str_format, TEXT_ARRAY(j)) Then
						Sht.Cells(i, CLMN_RESULT_RC).Value = CURR_ARRAY(j)
						is_found = True
						Exit For
					End If
				Next j
				
				If Not is_found Then
				   Sht.Cells(i, CLMN_RESULT_RC).Value = DEFAULT_RC_CURR
				End If
			End If
		End If
	Next i
Next n

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

В макросе нужно указать следующие настройки:

...

Индекс листа - указывается индекс листа, на котором нужно выполнить макрос для определения валюты. Или несколько листов, через запятую.

Список строк, которые присутствуют в формате ячейки - указывается какой-то текст из формата ячейки, который присутствует только для одной валюты. Если валют несколько, то и текстов указывается несколько.

Список кодов валют - указывается список кодов волют, соответственно списку искомых текстов.

Формат ячейки можно посмотреть при помощи файла

Quad Solutions\files\6_ data\Проверка формата ячейки.xlsm

View file
nameПроверка формата ячейки.xlsm

Откройте файл и скопируйте в него текст из проверяемой ячейки.

...

Применяемый формат будет виден после текста NumberFormat =

Найдите в этом тексте какую-то подстроку, которая есть только для формата этой валюты, например символ валюты или код валюты. В примере выше это текст USD

В итоге должно получиться примерно такие соответствия:

Code Block
'список строк, которые присутствуют в формате ячейки
TEXT_ARRAY = Array("$", "e", "руб")

'список кодов валют (в том же порядке как и искомый текст)
CURR_ARRAY = Array("USD", "EUR", "RUB")

Какую-то одну валюту можно не указывать, а в настройках сделать ее валютой по умолчанию - в этом случае нужно задать соответствия для всех валют, кроме этой. Валюта по умолчанию задается отдельно для валюты цены и валюты РЦ.

...

Указать колонки, в которых проверять формат цены и РЦ, и колонки, в которые будет помещен результат, т.е. записан код валюты.

...

Указать начальную строку, с которой начинаются товары в прайсе.

...

После выполнения макроса он запишет код валют в колонку результатов:

...

Эта колонка указывается в качестве Кода валюты при настройке прайса.