Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/14: Рейтинг темы: голосов - 14, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78

Если ячейка пуста - значение предыдущего столбца в список C

21.06.2013, 15:58. Показов 3047. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Есть два столбца таблицы соответствия A B, в B есть пустые ячейки. Если ячейка столбца B, то соответствующее ей значение из столбца A перенести в C1. Вторая ячейка с пустым значением в столбце B - соответствующее значение A в C2, чтобы к кончу выполнения макроса в столбце С был список значений А с пустыми ячейками B. Заранее спасибо.
Вложения
Тип файла: 7z 123.7z (293.0 Кб, 14 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.06.2013, 15:58
Ответы с готовыми решениями:

Удалить строку если опеределенная ячейка в ней пуста, если нет - оставить
Добрый день! Подскажите пожалуйста, как сделать: Есть лист excel, в котором находятся данные. Необходимо удалить все строки,...

Печатать лист, только если определенная ячейка не пуста
Доброй ночи !!! Ув.знатоки,в очередной раз потребовалась Ваша помощь.... Есть макрос,который выводит на печать несколько листов(из...

Присваивание значения ячейки данных из другой книги, если исходная ячейка пуста
Добрый день! Помогите разобраться с вопросом. Задача в следующем: Есть формат с 10 листами с разными формами. Часть ячеек заполнена...

16
 Аватар для Султанов
54 / 39 / 3
Регистрация: 25.01.2013
Сообщений: 368
21.06.2013, 16:25
а может формулами проше?

Добавлено через 3 минуты
Цитата Сообщение от TimurLat Посмотреть сообщение
Если ячейка столбца B, то соответствующее ей значение из столбца A перенести в C1. Вторая ячейка с пустым значением в столбце B - соответствующее значение A в C2, чтобы к кончу выполнения макроса в столбце С был список значений А с пустыми ячейками B.
приравняй столбец С к столбцу А, так как при любом приведенном услоивии в столбце В столбцы А=С ...
0
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78
21.06.2013, 16:28  [ТС]
Нужно именно макросом, для вставки этого действия в один большой макрос. Да и формулы нужно привязывать к ячейкам, пустые ячейки могут быть под разными адресами в столбце, так как формулы основаны на соответствии, сомневаюсь, что у меня получится создать адекватный список с соответствующими значениями из столбца А
начиная с начала столбца.

Добавлено через 51 секунду
Переносим только если B пустая. Не так написал я? сейчас гляну.

Добавлено через 2 минуты
Получается, нужно создать двумерный массив, собрать значения массива в случае пустоты второго столбца и затем вывести их в столбец С.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 16:30
TimurLat, Вы точно не готовите какую-то диверсию несчастному начальству? Если нет, тогда сейчас смотрю.
0
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78
21.06.2013, 16:32  [ТС]
Наоборот, просили список идентификаторов без значений в столбце B. посмотрите пожалуйста)
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 16:44
Пробуйте.
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub asdf()
Dim mrng As Range, cC As Range, i&, mARR()
   i = Cells(Rows.Count, 1).End(xlUp).Row
   Set mrng = Range(Cells(1, 2), Cells(i, 2)).SpecialCells(xlCellTypeBlanks)
   ReDim mARR(1 To mrng.Cells.Count): i = 0
      For Each cC In mrng
         i = i + 1: mARR(i) = cC.Offset(0, -1).Value
      Next ' cC
   [c1].Resize(UBound(mARR), 1).Value = Application.Transpose(mARR)
End Sub
Мне кажется, доведете Вы начальство до истерики.
1
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78
21.06.2013, 16:54  [ТС]

Не по теме:

Доведу, если таблицу не сделаю)))



Добавлено через 2 минуты
Спасибо, вроде работает. Там ограничений же нет по длине столбцов?А можно с глобальными ссылками код в виде "A1"?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 17:01
Ограничений нет. Поэтому и проверяем ст. А, что-бы не пролететь в ст.B (у Вас как по заказу такой случай).
По второму не понял. А зачем?
1
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78
21.06.2013, 17:15  [ТС]
Хочу понять что откуда берется и куда ссылается. Не вечно же мне на шее форумчан сидеть, хочу сам научиться и тоже помогать)

Добавлено через 11 минут
А, всё, сам разобрался! спасибо огромное!
Кликните здесь для просмотра всего текста
Как у вас с температурой?


Добавлено через 20 секунд

Не по теме:

как у вас с температурой?

0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 20:05
Имели ввиду что-то вот так?:
Visual Basic
1
2
3
4
5
6
7
8
Dim mrng As Range, cC As Range, i&, mARR()
   i = Cells(Rows.Count, "A").End(xlUp).Row
   Set mrng = Range([b1], Cells(i, "b")).SpecialCells(xlCellTypeBlanks)
   ReDim mARR(1 To mrng.Cells.Count): i = 0
      For Each cC In mrng
         i = i + 1: mARR(i) = cC.Offset(0, -1).Value
      Next ' cC
   [c1].Resize(UBound(mARR), 1).Value = Application.Transpose(mARR)
Я бы не советовал. Запутаться легче. Особенно когда связь индексов массивов с ячейками (приблизительно arr(1,1)=cells(1,1))
А если столбик далеко, и "тяжело посчитать" его цифровой номер, тогда:
1. В нужном столбике активируете любую ячейку.
2. В редакторе открываете окно Immediate (комб. кл. Ctrl + G)
3. В этом окне пишите: ?activecell.column
4. Нажимаете Enter
5. Ниже под ?activcell.... видите номер столбца с активной ячейкой.
С температурой? Если очень-очень мягко - тогда дурдом.

Добавлено через 2 часа 49 минут
TimurLat, я очень извиняюсь. Дал Вам урезнный вариант. Когда мы имеем дело с SpecialCells (во всех случаях), если не будут найдены (в этом случае) пустые ячейки (xlCellTypeBlanks), тогда будет сообщение про ошибку. Чтоб такого не было, практически всегда при работе с SpecialCells применяют обработку ошибок. Здесь это выглядит так: есть пустые (Err.number = 0) - код выполнит то, что Вы ему сказали от Sub до End Sub. Нет пустых (Err.number > 0), e.i. должен бы выдать сообщение про ошибку, а вместо этого код выдаст нами созданный MsgBox и выйдет из листинга (Exit Sub). Вот засело в мозгу, что все это знают - и не пишу Но лучше поздно... Честно - я не специально...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub asdf()
Dim mrng As Range, cC As Range, i&, mARR()
   i = Cells(Rows.Count, "A").End(xlUp).Row
   On Error Resume Next ' start error handling
   Err.Number = 0
   Set mrng = Range([b1], Cells(i, "b")).SpecialCells(xlCellTypeBlanks)
   If Err.Number > 0 Then MsgBox "NOT FOUND BLANKS": Exit Sub
   On Error GoTo 0 ' end error handling
   ReDim mARR(1 To mrng.Cells.Count): i = 0
      For Each cC In mrng
         i = i + 1: mARR(i) = cC.Offset(0, -1).Value
      Next ' cC
   [c1].Resize(UBound(mARR), 1).Value = Application.Transpose(mARR)
End Sub
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.06.2013, 20:36
Я бы делал сразу двумерный массив, чтоб позже не использовать Transpose - оно и время, и на больших объёмах глючит: в 2000 версии была вообще беда, в новых полегче, но кажется 65000 строк максимум. Я не проверял - проще сразу с двумерным работать.
2
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 20:54
Тоже правильно. А не запутается? Не думаю, что там столько будет. Но тогда, на всякий случай, последний код, от строки 9 (включительно) и до конца (строка 14), нужно заменить на это:
Visual Basic
1
2
3
4
5
6
   ReDim mARR(1 To mRNG.Cells.Count, 1 To 1): i = 0
      For Each cC In mRNG
         i = i + 1: mARR(i, 1) = cC.Offset(0, -1).Value
      Next ' cC
   [c1].Resize(UBound(mARR,1), ubound(marr,2)).Value = mARR
 End Sub
1
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.06.2013, 21:02
Ну где тут запутаться? 3 единички всего добавилось
Вместо ubound(marr,2) можно для простоты писать четвёртую.
2
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 21:06
Вот тогда точно запутается. Лучше с начала "академически"...
И я уже и так четыри насчитал ( 1 to 1)
1
2 / 2 / 0
Регистрация: 05.06.2013
Сообщений: 78
21.06.2013, 22:00  [ТС]
Igor_Tr, сейчас увидел исправления - аж за душу взяло, кто-то переживает, ему не всё равно. Спасибо Вам огромное, но вроде и тот код номрально работал, сейчас отдохну немного и дальше за таблицу эту примусь...Там ещё много всего нужно сделать. Спасибо вам огромное!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
21.06.2013, 22:02
Тот работал, но с исправлениями чуть быстрее и надёжнее будет
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
21.06.2013, 22:13
Не поверите - не переживаю!!! Хохотать - люблю, а тяп-ляп - как-то не очень. Просто SpeciallCell - это мощный и очень интересный инструмент, но с своими мухами в голове...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2013, 22:13
Помогаю со студенческими работами здесь

Проверка если значение столбца hour = 1, то вывести текст, если значение столбца = 0, Как реализовать?
На сайте уже есть регистрация, авторизация. И нужно сделать если у пользователя который авторизован на данный момент (в сеcсии) в поле...

как добавить к переменной значение если она не пуста
делаю фильтр материалов в категории таблица есть таблица с результатами данные из некоторых ячеек присваиваются дата...

Как проверить, пуста ли ячейка в excel?
Как сделать проверку на пустая ли ячейка, для того чтобы записывать данные только в пустые места. QAxObject* excel = new QAxObject(...

Как проверить пуста ли ячейка массива?
При стандартном условии : if ( a==NULL ) выдает ошибку.

Выделить всю строку dataGrid если ячейка 3 столбца пустая
Доброго времени суток. У меня вот такой вопрос, мне нужно по загрузке вкладки в программе создать цикл, который будет пробегаться по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru