Я искал в Интернете ответы на эти вопросы и нашел вещи, которые подходят близко, но на самом деле не могу заставить их работать вообще, поэтому решил сократить свои потери и попросить замечательных гуру здесь:)
У меня есть рабочая тетрадь с пятью вкладками.На первых четырех вкладках записываются данные о заказах, размещенных на разных вкладках - т.е. на первой вкладке записываются заказы, размещенные с бизнесом 1, на двух вкладках - бизнес 2 и т. Д.
На каждой из четырех вкладок имеется строка заголовкаи столбец A содержит идентификатор, а столбец G содержит информацию в свободном тексте о фактических размещенных заказах, таких как «A & I, BHU, GUIDS, U & E».Когда мы получаем элементы, которые мы не получаем сразу, мы окрашиваем соответствующий элемент в ячейку другим цветом.Так что для этого заказа, если бы мы получили A & I и BHU, они были бы другого цвета, но GUIDS и U & E все еще были бы черными.Я знаю, что это ужасный формат, и я создаю правильное приложение, чтобы заменить весь набросок, но сейчас я не могу изменить то, что у нас есть.
То, что нам нужно в качестве временной меры, - это способчтобы получить невыполненные заказы.Я создал рабочий лист № 5 для этого.У него есть раздел для каждой из четырех других вкладок (я подумал, что будет проще написать более простой процесс и повторить его четыре раза, по одному разу для каждого листа).Столбцы A и B имеют заголовки «ID» и «Неоплаченные заказы» и относятся к бизнесу 1. Столбцы D и E имеют одинаковые заголовки, но относятся к бизнесу 2 и т. Д.
Что мне нужно: мне нужно пройти через столбец G на рабочем листе «Бизнес 1» и для любой ячейки, в которой есть какой-то черный текст, вернуть весь черный текст в виде строки (вырезая любой другой цвет)в одну ячейку в столбце B на рабочем листе 5 и в столбце A на рабочем листе 5 верните идентификатор (столбец A), который был в той же строке на рабочем листе 1.
Пока у меня есть что-то подобное, нона самом деле это куча мусора ... (и не компилируется)
Sub ProduceLateList()
Dim r As Range
Dim cell As Range
Dim i1 As Integer
Dim EmptyRow As Long
EmptyRow = 0
For Each r In Worksheets("Business 1").Range("G2").CurrentRegion
For Each cell In r.Cells
Dim sColoredText
For i1 = 1 To Len(cell.Value)
If (cell.Characters(i1, 1).Font.Color = RGB(0, 0, 0)) Then
sColoredText = sColoredText & Mid(cell, i1, 1)
End If
Next i1
With Worksheets("Worksheet 5").Range("A2")
If sColoredText <> "" Then
.Offset(EmptyRow, 1).Value = sColoredText
.Offset(EmptyRow, 0).Value = Worksheets("Business 1").Cells(cell.r, 0).Value
End If
End With
EmptyRow = EmptyRow + 1
Next cell
Next r
End Sub
Теперь он компилируется после помощи, предоставленной JMax, и после того, как я закомментирую бит, который должен заполнитьмой идентификатор ...
Проблема в том, что он в основном проходит через КАЖДУЮ ОДНУ ЯЧКУ в диапазоне, а не только в столбце G, поэтому я получаю треугольные данные.в моих результатах я получаю в своей первой ячейке текст первой ячейки заголовка от A1 Business1.Во второй ячейке результатов я получаю объединенное значение первой ячейки заголовка + второй ячейки заголовка Business 1 (IE A1 и B1).Это происходит в формате «сквозь вниз», поэтому моя последняя строка (довольно долгое время спустя) по существу поместила весь текст из всей таблицы Business 1 в одну ячейку ... в одну строку ... хотя вЧестно говоря, это только дает мне черный текст !!!!!
Я не могу предоставить оригинальную электронную таблицу из-за проблем с обменом данными, но я, возможно, смогу сделать что-то наподобие, что даст вам идею, если этопомог бы ??
Пожалуйста, пожалуйста, пожалуйста, любая помощь будет очень очень признательна - я не программист VB и очень надеюсь, что добрый человек там пожалеет меня и покажет мне свет!!
Большое вам спасибо
edit: ссылка на мою фиктивную таблицу, где вы можете увидеть ее в действии !!(Надеюсь ...) - не мой мусорный код, а приятный материал, любезно предоставленный Тони Даллимором: http://www.mediafire.com/?ndqu98giu4jjmlp