Здравствуйте. есть лист со значениями ячеек отражающих значения отметок координат. Нужно произвести серию манипуляций с этим листом. Атрибуты: В1-AF1 значение координат по оси Х А2-А34 значение координат по оси У действие 1: из всех значений в заполненных ячейках диапазона В2-AF32 вычесть 38.5 (таким образом ячейка N20 должна принять значение 0 (ноль)) действие 2: после вычитания придать всем значениям в заполненных ячейках минусовое значение действие 3: (самое важное, и не уверен что осуществимое в excel) экспортировать полученное в текстовый файл в формате в каждой строке n X Y Z N где n(number) порядковый номер ячейки с имеющимся значением X координата по оси Х У координата по оси У N (Name) имя (произвольное, все ячейки могут иметь одно имя так как относятся к одной группе) между значениями в одной строке разделитель пробел (один символ пробела, с этим в случае чего смогу справиться сам)
Здравствуйте. есть лист со значениями ячеек отражающих значения отметок координат. Нужно произвести серию манипуляций с этим листом. Атрибуты: В1-AF1 значение координат по оси Х А2-А34 значение координат по оси У действие 1: из всех значений в заполненных ячейках диапазона В2-AF32 вычесть 38.5 (таким образом ячейка N20 должна принять значение 0 (ноль)) действие 2: после вычитания придать всем значениям в заполненных ячейках минусовое значение действие 3: (самое важное, и не уверен что осуществимое в excel) экспортировать полученное в текстовый файл в формате в каждой строке n X Y Z N где n(number) порядковый номер ячейки с имеющимся значением X координата по оси Х У координата по оси У N (Name) имя (произвольное, все ячейки могут иметь одно имя так как относятся к одной группе) между значениями в одной строке разделитель пробел (один символ пробела, с этим в случае чего смогу справиться сам)andreichsb
Sub Oper() Dim i&, j&, k& Dim t$(), s$, Name1$ Dim i_n&, j_n& Name1 = "Тест" i_n = Cells(Rows.Count, 1).End(xlUp).Row j_n = Cells(1, Columns.Count).End(xlToLeft).Column ReDim t(i_n, j_n) For i = 1 To i_n For j = 1 To j_n If Cells(i, j) <> "" And i <> 1 And j <> 1 And i < 33 Then Cells(i, j) = -1 * (Cells(i, j) - 38.5) End If t(i, j) = Cells(i, j) Next j Next i MsgBox Now() Open ActiveWorkbook.Path & "\" & Replace(Now(), ":", "-") & ".txt" For Output As 1 For i = 2 To i_n s = "" For j = 2 To j_n If t(i, j) <> "" Then k = k + 1 s = k & " " & t(1, j) & " " & t(i, 1) & " " & t(i, j) & " " & Name1 & Chr(13) Print #1, s End If Next j Next i Close 1 End Sub
[/vba] Файл создаётся в той же папке, в котором лежит файл эксель.
andreichsb, Похоже? [vba]
Код
Sub Oper() Dim i&, j&, k& Dim t$(), s$, Name1$ Dim i_n&, j_n& Name1 = "Тест" i_n = Cells(Rows.Count, 1).End(xlUp).Row j_n = Cells(1, Columns.Count).End(xlToLeft).Column ReDim t(i_n, j_n) For i = 1 To i_n For j = 1 To j_n If Cells(i, j) <> "" And i <> 1 And j <> 1 And i < 33 Then Cells(i, j) = -1 * (Cells(i, j) - 38.5) End If t(i, j) = Cells(i, j) Next j Next i MsgBox Now() Open ActiveWorkbook.Path & "\" & Replace(Now(), ":", "-") & ".txt" For Output As 1 For i = 2 To i_n s = "" For j = 2 To j_n If t(i, j) <> "" Then k = k + 1 s = k & " " & t(1, j) & " " & t(i, 1) & " " & t(i, j) & " " & Name1 & Chr(13) Print #1, s End If Next j Next i Close 1 End Sub
[/vba] Файл создаётся в той же папке, в котором лежит файл эксель.Roman777
Спасибо, все работает, вот только странно, текст создает частично с разделителем разрядов "запятой" а частично "точкой". Мне по идее нужна точка. еще не плохо бы переместить разряд на два нуля в право, т.е. значение 80,0 должно принять значение 0,80. пока делаю это ручками, выделяя диапазон и через специальную вставку умножаю на 0,01. через спецвставку делал и минусовое значение. а что нужно удалить из кода что бы пропустить шаг 1?
Спасибо, все работает, вот только странно, текст создает частично с разделителем разрядов "запятой" а частично "точкой". Мне по идее нужна точка. еще не плохо бы переместить разряд на два нуля в право, т.е. значение 80,0 должно принять значение 0,80. пока делаю это ручками, выделяя диапазон и через специальную вставку умножаю на 0,01. через спецвставку делал и минусовое значение. а что нужно удалить из кода что бы пропустить шаг 1?andreichsb