Определение адреса выделенного диапазона ячеек на листе Excel с помощью кода VBA. Определение номера первой и последней строки. Программное выделение диапазона.
Адрес выделенного диапазона
Для определения адреса выделенного диапазона ячеек в VBA Excel используется свойство Address объекта Selection.
Объект Selection — это совокупность всех выделенных ячеек на листе Excel. Это может быть одна ячейка, смежный или несмежный диапазон ячеек, представляющий коллекцию смежных диапазонов. Если выделение состоит из несмежного диапазона, адреса смежных диапазонов, из которых он состоит, будут перечислены через запятую.
Смежный диапазон — прямоугольная область смежных (прилегающих друг к другу) ячеек.
Несмежный диапазон — совокупность (коллекция) смежных диапазонов (прямоугольных областей смежных ячеек).
Стоит отметить: несмотря на то, что в выделенном диапазоне может содержаться много ячеек, активной может быть только одна. Она представлена объектом ActiveCell. Для определения ее адреса в коде VBA Excel также используется свойство Address.
Sub Primer1() MsgBox «Адрес выделенного диапазона: « & Selection.Address & _ vbNewLine & «Адрес активной ячейки: « & ActiveCell.Address & _ vbNewLine & «Номер строки активной ячейки: « & ActiveCell.Row & _ vbNewLine & «Номер столбца активной ячейки: « & ActiveCell.Column End Sub |
Скопируйте и запустите код на выполнение. В результате получите что-то вроде этого, зависящее от того, какие диапазоны вы выберите:
Определение адресов выделенного диапазона и активной ячейки
Выделение ячеек и диапазонов
Выделить несмежный диапазон ячеек можно следующим образом:
Sub Primer2() Range(«B4:C7,E5:F7,D8»).Select End Sub |
Как видно из примера, в адресной строке объекта Range перечисляются адреса смежных диапазонов, составляющих общий несмежный диапазон, через запятую. Выделение осуществляется методом Select объекта Range.
Определение номеров первой и последней строки
Чтобы вычислить номера первой и последней строки выделенного диапазона, будем исходить из того, что первая ячейка смежного диапазона находится на первой строке, а последняя — на последней строке выделенного диапазона.
Sub Primer3() Dim i1 As Long, i2 As Long i1 = Selection.Cells(1).Row i2 = Selection.Cells(Selection.Cells.Count).Row MsgBox «Первая строка: « & i1 & _ vbNewLine & «Последняя строка: « & i2 End Sub |
Результат будет таким, зависит от выделенного диапазона:
Номера первой и последней строки выделенного смежного диапазона
Таким же образом можно вычислить номера первого и последнего столбцов выделенного диапазона, которые можно использовать для обработки информации по столбцам.
Обратите внимание, что для несмежных диапазонов этот пример не работает.
На практике я использовал определение номеров первой и последней строк по выделенному диапазону для формирования файла загрузки данных держателей дисконтных карт на сервис отправки СМС-сообщений. Оказалось, что базу данных клиентов заполнять в таблице Excel намного удобнее, чем на портале сервиса, а для загрузки в сервис достаточно сформировать несложный файл. Заполнил новые строки, выделил их по любому столбцу, нажал кнопку и файл готов.
Download Article
Download Article
This wikiHow teaches you how to start using Visual Basic procedures to select data in Microsoft Excel. As long as you’re familiar with basic VB scripting and using more advanced features of Excel, you’ll find the selection process pretty straight-forward.
-
1
Select one cell on the current worksheet. Let’s say you want to select cell E6 with Visual Basic. You can do this with either of the following options:[1]
ActiveSheet.Cells(6, 5).Select
ActiveSheet.Range("E6").Select
-
2
Select one cell on a different worksheet in the same workbook. Let’s say our example cell, E6, is on a sheet called Sheet2. You can use either of the following options to select it:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
Advertisement
-
3
Select one cell on a worksheet in a different workbook. Let’s say you want to select a cell from Sheet1 in a workbook called BOOK2.XLS. Either of these two options should do the trick:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(2,1)
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("A2")
-
4
Select a cell relative to another cell. You can use VB to select a cell based on its location relative to the active (or a different) cell. Just be sure the cell exists to avoid errors. Here’s how to use :
-
Select the cell three rows below and four columns to the left of the active cell:
ActiveCell.Offset(3, -4).Select
-
Select the cell five rows below and four columns to the right of cell C7:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
-
Select the cell three rows below and four columns to the left of the active cell:
Advertisement
-
1
Select a range of cells on the active worksheet. If you wanted to select cells C1:D6 on the current sheet, you can enter any of the following three examples:
ActiveSheet.Range(Cells(1, 3), Cells(6, 4)).Select
ActiveSheet.Range("C1:D6").Select
ActiveSheet.Range("C1", "D6").Select
-
2
Select a range from another worksheet in the same workbook. You could use either of these examples to select cells C3:E11 on a sheet called Sheet3:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3:E11")
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("C3", "E11")
-
3
Select a range of cells from a worksheet in a different workbook. Both of these examples would select cells E12:F12 on Sheet1 of a workbook called BOOK2.XLS:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12:F12")
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E12", "F12")
-
4
Select a named range. If you’ve assigned a name to a range of cells, you’d use the same syntax as steps 4-6, but you’d replace the range address (e.g., «E12», «F12») with the range’s name (e.g., «Sales»). Here are some examples:
-
On the active sheet:
ActiveSheet.Range("Sales").Select
-
Different sheet of same workbook:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("Sales")
-
Different workbook:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("Sales")
-
On the active sheet:
-
5
Select a range relative to a named range. The syntax varies depending on the named range’s location and whether you want to adjust the size of the new range.
- If the range you want to select is the same size as one called Test5 but is shifted four rows down and three columns to the right, you’d use:
ActiveSheet.Range("Test5").Offset(4, 3).Select
- If the range is on Sheet3 of the same workbook, activate that worksheet first, and then select the range like this:
Sheets("Sheet3").Activate ActiveSheet.Range("Test").Offset(4, 3).Select
- If the range you want to select is the same size as one called Test5 but is shifted four rows down and three columns to the right, you’d use:
-
6
Select a range and resize the selection. You can increase the size of a selected range if you need to. If you wanted to select a range called Database’ and then increase its size by 5 rows, you’d use this syntax:
Range("Database").Select Selection.Resize(Selection.Rows.Count + 5, _Selection.Columns.Count).Select
-
7
Select the union of two named ranges. If you have two overlapping named ranges, you can use VB to select the cells in that overlapping area (called the «union»). The limitation is that you can only do this on the active sheet. Let’s say you want to select the union of a range called Great and one called Terrible:
-
Application.Union(Range("Great"), Range("Terrible")).Select
- If you want to select the intersection of two named ranges instead of the overlapping area, just replace Application.Union with Application.Intersect.
-
Advertisement
-
1
Use this example data for the examples in this method. This chart full of example data, courtesy of Microsoft, will help you visualize how the examples behave:[2]
A1: Name B1: Sales C1: Quantity A2: a B2: $10 C2: 5 A3: b B3: C3: 10 A4: c B4: $10 C4: 5 A5: B5: C5: A6: Total B6: $20 C6: 20 -
2
Select the last cell at the bottom of a contiguous column. The following example will select cell A4:
ActiveSheet.Range("A1").End(xlDown).Select
-
3
Select the first blank cell below a column of contiguous cells. The following example will select A5 based on the chart above:
ActiveSheet.Range("A1").End(xlDown).Offset(1,0).Select
-
4
Select a range of continuous cells in a column. Both of the following examples will select the range A1:A4:
ActiveSheet.Range("A1", ActiveSheet.Range("a1").End(xlDown)).Select
ActiveSheet.Range("A1:" & ActiveSheet.Range("A1"). End(xlDown).Address).Select
-
5
Select a whole range of non-contiguous cells in a column. Using the data table at the top of this method, both of the following examples will select A1:A6:
ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
ActiveSheet.Range("A1",ActiveSheet.Range("A65536").End(xlUp)).Select
Advertisement
Ask a Question
200 characters left
Include your email address to get a message when this question is answered.
Submit
Advertisement
Video
-
The «ActiveSheet» and «ActiveWorkbook» properties can usually be omitted if the active sheet and/or workbook(s) are implied.
Thanks for submitting a tip for review!
Advertisement
About This Article
Article SummaryX
1. Use ActiveSheet.Range(«E6»).Select to select E6 on the active sheet.
2. Use Application.Goto (ActiveWorkbook.Sheets(«Sheet2»).Range(«E6»)) to select E6 on Sheet2.
3. Add Workbooks(«BOOK2.XLS») to the last step to specify that the sheet is in BOOK2.XLS.
Did this summary help you?
Thanks to all authors for creating a page that has been read 167,714 times.
Is this article up to date?
Excel VBA Selection Range
We all might have seen the process where we need to select the range so that we could perform some work on it. This is the basic step towards any task we do in Excel. If we do any manual work, then we can select the range of cells manually. But, while automating any process or work it is necessary to automate the process of Selection of Range as well. And VBA Selection Range is the basic steps toward any VBA code. When we write the steps for Selection of Range, their Range becomes the Object and Selection becomes the property. Which means the cells which we want to select are Objects and selection process of the property in VBA Selection Range.
How to Select a Range in Excel VBA?
We will learn how to select a range in Excel by using the VBA Code.
You can download this VBA Selection Range Excel Template here – VBA Selection Range Excel Template
Excel VBA Selection Range – Example #1
In the first example, we will see a very simple process where we will be selecting any range of cells using VBA code. For this, follow the below steps:
Step 1: Open a Module from the Insert menu tab where we will be writing the code for this.
Step 2: Write the subcategory of VBA Selection Range or we can choose any other name as per our choice to define it.
Code:
Sub Selection_Range1() End Sub
Step 3: Now suppose, we want to select the cells from A1 to C3, which forms a matrix box. Then we will write Range and in the brackets, we will put the cells which we want to select.
Code:
Sub Selection_Range1() Range("A1:C3") End Sub
Step 4: Now we have covered the cells. Further, we can apply any function to it. We can select the cells, select the values it has or copy the selected range as well. Here we will simply select the range.
Code:
Sub Selection_Range1() Range("A1:C3").Select End Sub
Step 5: Now compile the code and run it by clicking on the Play button located below the menu bar. We will see the changes in the current sheet as cells from A1 to C3 are selected as shown below.
In a similar way, we can put any value to selected range cells. For this we will use Value function instead of Select.
Code:
Sub Selection_Range2() Range("A1:C3").Value End Sub
Now assign any value or text which we want to see in the selected range cells. Here that value is My Range.
Code:
Sub Selection_Range2() Range("A1:C3").Value = "My Range" End Sub
Now again run the code by clicking on the Play Button.
We will see the required text which we were in code value is got printed to the selected range.
Excel VBA Selection Range – Example #2
There is another way to implement VBA Selection Range. For this, follow the below steps:
Step 1: Write the subcategory of VBA Selection Range as shown below.
Code:
Sub Selection_Range3() End Sub
Step 2: By this process, we can select the range of any specific sheet which we want. We don’t need to make that sheet as current. Use Worksheet function to activate the sheet which wants by putting the name or sequence of the worksheet.
Code:
Sub Selection_Range3() Worksheets("Sheet2").Activate End Sub
Step 3: Now again as per example-1, we will select the range of the cells which want to select. Here we are considering the same range from cell A1 to C3.
Code:
Sub Selection_Range3() Worksheets("Sheet2").Activate Range("A1:C3").Select End Sub
Step 4: Now run the code by clicking on the Play Button. We will see, the cells from A1 to C3 of the worksheet which is Name as Sheet2 are now selected.
As we have already selected the cells which we wanted, so now we can again write the one line code by which we will insert any text to selected cells. Or we can select the new range of cells manually also to see the changes by this code.
Step 5: For this use Selection function along with Value and choose the value which we want to see. Here our value is the same as we used before as My Range.
Code:
Sub Selection_Range3() Worksheets("Sheet2").Activate Range("A1:C3").Select Selection.Value = "My Range" End Sub
Step 6: Now again run the code by clicking on Play Button.
We will see, the selected cells from A1 to C3 got the value as My Range and those cells are still selected.
Excel VBA Selection Range – Example #3
In this example, we will see how to move the cursor from a current cell to the far most end cell. This process of selecting the end cell of the table or blank worksheet is quite useful in changing the location from where we can select the range. In Excel, this process is done manually by Ctrl + any Arrow key. Follow the below steps to use VBA Selection Range.
Step 1: Write the subcategory of VBA Selection Range again.
Code:
Sub Selection_Range4() End Sub
Step 2: Choose the reference range cell from where we want to move the cursor. Let’s say that cell is B1.
Code:
Sub Selection_Range4() Range("B1") End Sub
Step 3: Now to move to the End table or sheet towards right we will use xlToRight and for left it would be changed to xlToLeft as shown below.
Code:
Sub Selection_Range4() Range("B1").End(xlToRight).Select End Sub
Step 4: Now run the code by pressing F5 key.
We will see, our cursor from anywhere from the first row or cell B1 will move to the far end to the sheet.
In a similar way, we can move the cursor and select the cell of the far down or up location of any sheet by xlDown or xlUP. Below is the code for selecting the far down cell of a sheet from reference cell B1.
Code:
Sub Selection_Range4() Range("B1").End(xlDown).Select End Sub
Pros of Excel VBA Selection Range
- This is as easy as selecting the range of cells manually in Excel.
- We can choose any type of range which we cannot do manually.
- We can select and fill the cells which are only possible in excel by Find and Replace option.
- Selecting the range cells and putting the data into that can be done simultaneously with one line of code.
Things to Remember
- Using xlDown/Up and xlToLeft/Right command in code will take us to cells which is a far end or to the cell which has data. Means, the cell with the data will stop and prevent us from taking to the far end of the sheet.
- We can choose any type of range but, make sure the range of cells is in sequence.
- Random selection of cell is not allowed with these shown examples.
- Always save the excel file as Macro Enable excel to prevent losing the code.
Recommended Articles
This is a guide to VBA Selection Range. Here we discuss how to select a range in Excel using VBA code along with practical examples and downloadable excel template. You can also go through our other suggested articles –
- VBA Conditional Formatting
- VBA Remove Duplicates
- Excel Named Range
- VBA XLUP
Выделения относительно активной ячейки
Выделить вниз до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Down)
Sub CtrlShiftDown()
Range(ActiveCell, ActiveCell.End(xlDown)).Select
End Sub
Выделить вверх до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Up)
Sub CtrlShiftUp()
Range(ActiveCell, ActiveCell.End(xlUp)).Select
End Sub
Выделить вправо до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Right)
Sub CtrlShiftRight()
Range(ActiveCell, ActiveCell.End(xlToRight)).Select
End Sub
Выделить влево до первой или последней заполненной ячейки (равносильно нажатию Ctrl+Shift+Left)
Sub CtrlShiftLeft()
Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
End Sub
Выделить текущую область (выделяется диапазон неразрывно заполненных ячеек — равносильно нажатию кнопок Ctrl+Shift+*)
Sub CtrlShiftUmn()
ActiveCell.CurrentRegion.Select
End Sub
Выделить активную область (происходит выделение всего заполненного диапазона Ctrl+Shift+Home, End, Home)
Sub CtrlShiftHome()
Range(Range("A1"), ActiveCell.SpecialCells(xlLastCell)).Select
End Sub
Выделить смежные (заполненные прилегающие к активной ячейке) ячейки в столбце с активной ячейкой
Sub SelectActiveColumn()
Dim TopCell As Range
Dim BottomCell As Range
If IsEmpty(ActiveCell) Then Exit Sub
On Error Resume Next
If IsEmpty(ActiveCell.Offset(-1, 0)) Then Set TopCell = _
ActiveCell Else Set TopCell = ActiveCell.End(xlUp)
If IsEmpty(ActiveCell.Offset(1, 0)) Then Set BottomCell = _
ActiveCell Else Set BottomCell = ActiveCell.End(xlDown)
Range(TopCell, BottomCell).Select
End Sub
Выделить смежные ячейки в строке с активной ячейкой
Sub SelectActiveRow()
Dim LeftCell As Range
Dim RightCell As Range
If IsEmpty(ActiveCell) Then Exit Sub
On Error Resume Next
If IsEmpty(ActiveCell.Offset(0, -1)) Then Set LeftCell = _
ActiveCell Else Set LeftCell = ActiveCell.End(xlToLeft)
If IsEmpty(ActiveCell.Offset(0, 1)) Then Set RightCell = _
ActiveCell Else Set RightCell = ActiveCell.End(xlToRight)
Range(LeftCell, RightCell).Select
End Sub
Выделить весь активный столбец
Sub SelectionEntireColumn()
Selection.EntireColumn.Select
End Sub
Выделить всю активную строку
Sub SelectEntireRow()
Selection.EntireRow.Select
End Sub
Выделить рабочий лист
Sub SelectEntireSheet()
Cells.Select
End Sub
Выделить следующую пустую ячейку снизу
Sub CellNextDown()
ActiveCell.Offset(1, 0).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Выделить следующую пустую ячейку справа
Sub CellNextRight()
ActiveCell.Offset(0, 1).Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(0, 1).Select
Loop
End Sub
Выделение от первой непустой до последней непустой ячеек в строке
Sub SelectFirstToLastInRow()
Dim LeftCell As Range
Dim RightCell As Range
Set LeftCell = Cells(ActiveCell.Row, 1)
Set RightCell = Cells(ActiveCell.Row, 256)
If IsEmpty(LeftCell) Then Set LeftCell = LeftCell.End(xlToRight)
If IsEmpty(RightCell) Then Set RightCell = RightCell.End(xlToLeft)
If LeftCell.Column = 256 And RightCell.Column = 1 Then ActiveCell. _
Select Else Range(LeftCell, RightCell).Select
End Sub
Выделение от первой непустой до последней непустой ячеек в столбце
Sub SelectFirstToLastInColumn()
Dim TopCell As Range
Dim BottomCell As Range
Set TopCell = Cells(1, ActiveCell.Column)
Set BottomCell = Cells(16384, ActiveCell.Column)
If IsEmpty(TopCell) Then Set TopCell = TopCell.End(xlDown)
If IsEmpty(BottomCell) Then Set BottomCell = BottomCell.End(xlUp)
If TopCell.Row = 16384 And BottomCell.Row = 1 Then ActiveCell. _
Select Else Range(TopCell, BottomCell).Select
End Sub
Петелин_Роман Пользователь Сообщений: 17 |
#1 09.03.2017 09:54:39 Добрый день.
Прикрепленные файлы
Изменено: Петелин_Роман — 09.03.2017 12:44:36 |
||
Пытливый Пользователь Сообщений: 4587 |
j = Cells(1, 3).Value = Range(«Количество_строк») P.S. Точнее даже не так: что вы пытались сделать этой инструкцией, какая ее задача? Изменено: Пытливый — 09.03.2017 10:09:43 Кому решение нужно — тот пример и рисует. |
Цель сделать так, чтобы при вводе каждого нового числа в ячейку «Количество_строк», макрос автоматически удалял прежнюю таблицу, и создавал новую. То есть, макрос должен удалить количество строк, зависящее от предыдущего значения ячейки B1, и создать новую, отталкиваясь от нового значения. Я и не говорю, что это отличный способ. Пробовал сделать сам, опыта в VBA мало. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#4 09.03.2017 10:15:31
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Пытливый Пользователь Сообщений: 4587 |
#5 09.03.2017 10:18:38 Уберите в том месте ссылку на ячейку С1
это что сразу видно. Зачем в коде 3 раза Range(«Количество_строк»).Select? Зачем нужно для выполнения задачи выделение этого диапазона? Если не нужно — удалите. Изменено: Пытливый — 09.03.2017 10:21:20 Кому решение нужно — тот пример и рисует. |
||
Этот способ не решает проблему, чтобы он стирал прежнюю таблицу, а потом рисовал новую, опираясь на данные одной и той же ячейки. Еще раз » макрос должен удалить количество строк, зависящее от предыдущего значения ячейки B1, и создать новую, отталкиваясь от нового значения». |
|
Просьба всем. Есть вполне понятный вопрос — макрос должен удалить количество строк, зависящее от предыдущего значения ячейки B1, и создать новую, отталкиваясь от нового значения. Я прекрасно понимаю, что там можно многое усовершенствовать и упростить. Но первоочередная задача все же одна. Про выделение одной и той же ячейки несколько раз в курсе, рудимент многократной переделки макроса, добавления новых задач. Я пытался сделать ячейку, которая дублирует старое значение B1. Оттого и ввел переменную j. Может затея кривая, но по-другому идей нет. Изменено: Петелин_Роман — 09.03.2017 10:31:18 |
|
Пытливый Пользователь Сообщений: 4587 |
#8 09.03.2017 10:31:03
Кому решение нужно — тот пример и рисует. |
||
Уточню один момент. Мне не понятно, по какой причине макрос не выдавал ошибку при указании этого диапазона Set rng = Range(«C3:C» & k), но стал ругаться, когда я ввел Set rng1 = Range(«C3:F» & j). Это же в обоих случаях просто указание диапазона, размер которого зависит от переменной. Которая выше объявлена и является предыдущим значением ячейки B1, до того, как в нее ввели новое число. |
|
Пытливый Пользователь Сообщений: 4587 |
Видимо переменная j на момент использования ее в определении диапазона не содержит значения. Кому решение нужно — тот пример и рисует. |
Содержит. Для этого и указал, что она равна числовому значению ячейки B1. |
|
Пытливый Пользователь Сообщений: 4587 |
#12 09.03.2017 10:51:02 Нет, вы указали что
т.е. для переменной с типом данных целое число вы указали, что она равна равенству ячейки С3 и именованного диапазона. А поскольку это равенство ложно — то в переменную записан 0 (числовое значение означающее ЛОЖЬ). А при попытке задать диапазон с адресом (С3:F0) вываливается ошибка. Кому решение нужно — тот пример и рисует. |
||
Хорошо, тогда как надо было сделать правильно? Сохранив этот же принцип. Понимаю, что эту задачу можно и по-другому решить, но хочется понять, как вот таким способом нужно правильно указать. |
|
Юрий М Модератор Сообщений: 60575 Контакты см. в профиле |
#14 09.03.2017 10:55:01
А Вы остановите код в нужном месте, и посмотрите значение переменной j |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#15 09.03.2017 11:02:57
Я вроде выше в сообщении #4 именно эту часть кода Вам и привел правильно, да с обработкой ошибок. Пробовать лень было? Или что не так? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Петелин_Роман Пользователь Сообщений: 17 |
#16 09.03.2017 11:06:01
На личности не переходите, ок?
Если просто указать равенство с ячейкой B1, он сотрет только то количество строк, которое равно новому числу. Но не всю прежнюю таблицу. Это будет заметно, если новое число меньше старого. |
||||
Пытливый Пользователь Сообщений: 4587 |
Именно поэтому я предложил решение через очищение текущего диапазона (CurrentRegion). p.s. а если вы упорно хотите использовать придуманный Вами алгоритм, то тогда надо на событие изменения ячейки В1 в конец кода вешать инструкцию, чтоб значение В1 дублировалось в еще какую ячейку (например, в С1). Изменено: Пытливый — 09.03.2017 11:45:00 Кому решение нужно — тот пример и рисует. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#18 09.03.2017 11:45:10
А где переход на личности? Если чем-то задел — извиняюсь. Но на фоне Ваших сообщений выглядит именно так, что Вы просто игнорируете какие-то сообщения, задавая потом вопросы, которые в пропущенных сообщениях озвучены. Не согласны?
При этом не факт, что весь остальной код работает корректно, т.к. упор сделан именно на одну весьма ошибочную строку. Но не на код в целом. Изменено: The_Prist — 09.03.2017 12:45:31 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
Петелин_Роман Пользователь Сообщений: 17 |
#19 09.03.2017 11:48:33 The_Prist,Присмотритесь к обсуждению, там уже указано, что такой способ не подходит.
Остальной код работает, спасибо за излишнюю заботу. Изменено: Петелин_Роман — 09.03.2017 11:50:25 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#20 09.03.2017 11:54:12
Ну тогда для начала к формулировкам своим присмотритесь. Ибо то, что Вы хотите отличается от того, что просите. Нельзя сделать это
оставив это
Либо соглашайтесь, что надо все переписать, либо не советуйте присматриваться к своим противоречивым «хочухам». Изменено: The_Prist — 09.03.2017 12:45:57 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
Гражданин, тут уже дали вполне толковый совет. Без вас обошлись. Следите за речью. Прежде чем давать совет, можно внимательно прочитать историю обсуждения. А не выскакивать с советом, полезность которого в рамках вопроса равна нулю. Остальное пишите в лс, если и дальше намерены отвечать в подобном ключе. Вас никто не обязывает давать советы и насильно не заставляет. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#22 09.03.2017 12:00:52
Ну раз так, сначала пробовать надо, прежде чем критиковать. Я вставил предложенный кусок кода в Ваш файл. Вот, что получилось:
Знаете, даже работает. Правда, оставляет хвост внизу, если строк до вставки в таблице было больше. но про это и речи изначально не шло, т.к. вопрос в первом сообщении был другой. И именно на него был дан ответ, а не на пожелания к коду дальше в обсуждении.
здесь согласен. Больше в Ваши темы ни ногой. Гражданин. Удачи с таким подходом. P.S. Не сильно меняя исходный код можно так было сделать. Всего две строки добавить к выше предложенным:
Изменено: The_Prist — 09.03.2017 12:09:10 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||||
The_Prist, Оо, вы догадались до всего того, что уже успели выше обсудить. Здорово. Прогресс. |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#24 09.03.2017 12:19:37
Да, представляете. Догадался. А догадаться как применить к своему коду должны были Вы, еще на пятом сообщении. Так что я, в отличие от Вас, хоть как-то прорессирую… Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
The_Prist,Это был сарказм. Еще раз — пишите в лс, хватит гадить в обсуждении. Все, о чем вы «догадались», было разобрано выше без вас, мегадогадливого человека. Изменено: Петелин_Роман — 09.03.2017 12:25:22 |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Роман, хамить не надо. Это был не сарказм. Это был наезд, притом весьма неприкрытый. Притом в ответ на решение проблемы. Хотите не гадить в теме? Выдохните, перечитайте свои и мои сообщения и посмотрите внимательнее, кто здесь больше нагадил. И еще раз удачи с подобным подходом. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
The_Prist,Решения проблемы не было. И хамить начали вы. Прежде чем указывать, что вашим советом не воспользовались, убедитесь в этом еще раз. Совет был оценен и признан негодным для решения задачи в целом. Остальное пишите в лс, хватит гадить. Изменено: Петелин_Роман — 09.03.2017 12:28:56 |
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
Да-да. Я уже понял. Простите, что влез в обсуждение. Удачи еще раз. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
vikttur Пользователь Сообщений: 47199 |
#30 09.03.2017 12:47:19 Петелин_Роман, своими ответами Вы уже настроили большую часть постоянных посетителей форума против себя. |
Работа с выделениями
Работа с выделениями
Прежде чем изменить значение или формат ячейки или нескольких ячеек, пользователь должен их выделить. Однако в VBA выделение ячеек не требуется, так как для идентификации ячеек, над которыми должны проводиться определенные действия, можно использовать объекты Range. Но в VBA есть инструменты, связанные с выделением; они используются для реализации двух возможностей — код способен определить, какие ячейки выделены пользователем, и код может показать пользователю место на рабочем листе, где происходит что-то важное.
Во многих случаях пользовательский код должен воздействовать на выбранные ячейки, как это делают встроенные команды Excel. Для доступа к выделенному пользователем диапазону используется свойство Selection (Выделение) объекта Application или Window. Свойство Selection объекта Application возвращает диапазон, выделенный на рабочем листе, активном в данный момент. Следующие два оператора идентичны:
Application.Selection.Value = 20
Selection.Value =2 0
Для того чтобы удостовериться в том, что ссылка всегда относится к определенному окну, независимо оттого, какое окно активно в текущий момент, необходимо использовать свойство окна Selection. В следующем примере продемонстрирована данная техника; также здесь показано, как установить объектную ссылку на диапазон, представляющий текущее выделение для повторного использования того же диапазона в дальнейшем:
Dim Sel Range As Range
Set SelRange = Windows(«Инвентаризация игрушек.xls»>.Selection
With SelRange
.CheckSpelling
.AutoFit
.Copy
End With
Когда VBA-программа вносит изменения в рабочий лист и необходимо, чтобы пользователь их заметил, следует воспользоваться методом Select (Выделить) для перемещения выделения на нужный диапазон, диаграмму или что-либо другое. Метод Select можно применять фактически к любому существующему в Excel объекту, в том числе к объектам Chart (Диаграмма) и всем их компонентам (каждая часть диаграммы является отдельным VBA-объектом). к объектам Shape (Форма) и, конечно же, к объектам Range.
Для выделения диапазона необходимо сначала активизировать рабочий лист, на котором диапазон находится, а затем использовать метод Select для объекта Range, как показано в данном примере:
With Worksheets(» «)
.Activate .Range(«Разбитые сердца»).Select
End With
Кстати, метод Select для объектов Worksheet, очевидно, не выполняет ничего, кроме активизации указанного рабочего листа, и не изменяет в нем существующее выделение. Другими словами, он эквивалентен методу рабочего листа Activate. Подобным образом методы Activate и Select можно использовать для активизации листа диаграммы, но ни один из методов в действительности не выделяет диаграмму. Вот пример;
Chart s(«Места жительства клиентов»).Select
Для того чтобы выделить компонент диаграммы или внедренную диаграмму, используйте метод Select для интересующего вас объекта.
Чтобы сделать ячейку активной для ввода, к данной ячейке используется метод Activate (Активизировать) объекта Range. Если активизированная ячейка находится в пределах текущего выделения, весь диапазон остается выделенным. Именно таким образом работает следующий пример:
Worksheets(«НичегоНеДелайДоМоегоУказания»).Activate
Range(«A1:E7»).Select Range(«C4»).Activate
Если активизированная ячейка находится за пределами выделения, оно перемещается на активизированную ячейку.
Код для работы с выделенными ячейками, вероятно, приведет к возникновению ошибки, если его применить к диаграмме. Вот почему, прежде чем выполнять какие-либо операции с выделением, обычно следует убедиться, что выделение содержит тот тип объектов, который ожидается в коде. VBA-функция TypeName возвращает строку, содержащую тип объекта
выделения. С помощью структур If. . .Then или Case. . .Select можно определить, какое из возможных действий проводить над выделенным объектом.
В приведенном ниже примере выражение TypeName ( Selection) в операторе Select (вторая строка кода) возвращает строку, содержащую тип объекта текущего выделения. Данная строка затем проверяется рядом операторов Case, является ли выделение диапазоном (в таком случае его значение устанавливается равным 2 001), областью диаграммы (в таком случае устанавливается красный цвет выделения), когда же выделение не сделано, пользователь видит сообщение об отсутствии выделения. Также предусмотрен вывод соответствующего сообщения для случая, когда выделение не принадлежит ни одному из перечисленных типов:
With Selection
Select Case TypeName(Selection)
Case «Range»
.Value = 2001
Case «ChartArea»
.Interior.Colorlndex = 3 ‘ 3 = bright red
Case «Nothing»
MsgBox «Ничего не выделенно»
Case Else
MsgBox «Невозможно определить тип выделения!»
End Select
End With
Читайте также
Работа не волк. Работа – вервольф
Работа не волк. Работа – вервольф
Недаром твердят, что SEO – это индустрия. Тяжелая или легкая промышленность? Скорее нелегкая. Зато рабочих мест она порождает порядочное количество – от горняка в линк — менеджерском забое до конторского инженера в обличии высоколобого
1.3.3 Лабораторная работа #3 «Работа с внешними устройствами»
1.3.3 Лабораторная работа #3 «Работа с внешними устройствами»
1. Используя функции XKeysymToString() и XKeycodeToKeysym(), напишите программу, которая реагирует на нажатие клавиш в окне выдачей в него кода символа, состояния модификаторов и символьной расшифровки нажатой клавиши.
2. Напишите
Практическая работа 5. Работа с фрагментами текста
Практическая работа 5. Работа с фрагментами текста
Задание. Создать текстовый документ и переставить местами его отдельные фрагменты. Вставить в текстовый документ результаты вычислений в Калькуляторе.Последовательность выполнения1. Запустите Блокнот и создайте
Практическая работа 8. Работа с меню Пуск
Практическая работа 8. Работа с меню Пуск
Задание. Настроить значки меню Пуск.Последовательность выполнения1. Запустите программу Блокнот с помощью строки поиска в меню Пуск.2. Запустите программу Калькулятор с помощью строки поиска, не пользуясь мышью. Для этого:1)
Практическая работа 12. Работа с окнами папок
Практическая работа 12. Работа с окнами папок
Задание. Изучить работу с окнами папок. Научиться перемещаться по файлам и папкам.Последовательность выполнения1. С помощью меню Пуск откройте папку Компьютер. Ознакомьтесь с содержимым окна, покажите его составляющие.2. С
Практическая работа 14. Работа с файлами и папками
Практическая работа 14. Работа с файлами и папками
Задание. Научиться создавать папки, копировать, перемещать, переименовывать и удалять файлы.Последовательность выполнения1. Откройте с помощью меню Пуск папку Документы.2. В папке Документы создайте новую папку с именем
Практическая работа 15. Работа с изображениями в Проводнике
Практическая работа 15. Работа с изображениями в Проводнике
Задание. Просмотреть и отредактировать изображения с помощью встроенных средств Windows Vista.Последовательность выполнения1. Откройте папку, содержащую цифровые изображения. Это может быть папка с вашими
Практическая работа 16. Работа со сменными носителями
Практическая работа 16. Работа со сменными носителями
Задание 1. Скопировать файлы и папки на flash-диск.Последовательность выполнения1. Подключите к компьютеру устройство flash-памяти. При этом обратите внимание на размещение выступов на разъеме и самом устройстве, чтобы
Практическая работа 19. Поиск в Интернете. Работа с папками Избранное и Журнал
Практическая работа 19. Поиск в Интернете. Работа с папками Избранное и Журнал
Задание 1. Научиться выполнять поиск в Интернете, настраивать параметры поиска, работать с папками Избранное и Журнал.Последовательность выполнения1. Запустите Internet Explorer.2. Щелкните кнопкой мыши
Практическая работа 24. Работа с программой Dr.Web
Практическая работа 24. Работа с программой Dr.Web
Задание. Изучить приемы работы с программой Dr.Web.Для выполнения этой работы на компьютере должен быть установлен антивирус Dr.Web. При отсутствии какой-либо антивирусной программы на вашем компьютере вы можете установить Dr.Web
Практическая работа 26. Работа с файловым менеджером
Практическая работа 26. Работа с файловым менеджером
Задание 1. Установить и настроить программу Total Commander.Последовательность выполнения1. Загрузите последнюю версию Total Commander с сайта wincmd.ru.2. Запустите загруженный файл и установите программу, ответив на несколько простых
Практическая работа 27. Работа с проигрывателем Windows Media
Практическая работа 27. Работа с проигрывателем Windows Media
Задание 1. Изучить средства управления воспроизведением проигрывателя Windows Media.Последовательность выполнения1. Откройте для воспроизведения с помощью проигрывателя любой музыкальный файл, например из папки
Практическая работа 30. Редактирование документа. Работа с фрагментами.
Практическая работа 30. Редактирование документа. Работа с фрагментами.
Задание. Отредактировать сохраненный документ.Последовательность выполнения1. Откройте ранее сохраненный документ Урок 1 любым способом.2. Выделите слово, предложение, строку, абзац, весь документ.
Практическая работа 53. Запуск Access. Работа с объектами базы данных
Практическая работа 53. Запуск Access. Работа с объектами базы данных
Задание. Ознакомиться с окном программы Access. Запустить и рассмотреть учебную базу данных.
ВНИМАНИЕ
При выполнении задания помните, что все внесенные в базу данных изменения записываются немедленно и их
Практическая работа 61. Работа с оборудованием
Практическая работа 61. Работа с оборудованием
Задание. Проверить параметры и работу установленного оборудования и выполнить проверку жесткого диска.Последовательность выполнения1. Щелкните правой кнопкой мыши на значке Компьютер и выберите пункт Свойства. В