Макрос для заполнения пустых ячеек в диапазоне - PullRequest
0 голосов
/ 12 ноября 2018

Допустим, у меня есть диапазон ячеек A1: C3, и мне нужно заполнить все пустые ячейки из диапазона значением, которое находится в ячейках A4: C4, пустые ячейки в столбце A будут заполнены значениемA4, те, что в столбце B со значением от B4 и т. Д.

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы можете попробовать это .. просто измените Worksheets(1) на нужный лист и 4 на нужный ряд

Dim rng As Range
Dim cel As Range

With ThisWorkbook.Worksheets(1)
    Set rng = .Range("A1:C3")
    For each cel in rng
        If Len(Trim(CStr(cel.Value))) = 0 Then cel.Value = .Cells(4, cel.Column).Value
    Next
End With
0 голосов
/ 12 ноября 2018

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

  1. Определить последнюю строку в диапазоне (определяется Column A)
  2. Определить последний столбец (определяется последней строкой в ​​шаге 1)
  3. Перебирать строки столбец за столбцом
  4. Заполнить пробелы значением, связанным с последней строкой, если пусто

Option Explicit

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<== Update Sheet Name
Dim LRow As Long, LCol As Long, r As Long, c As Long

LRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
LCol = ws.Cells(LRow, ws.Columns.Count).End(xlToLeft).Column

Application.ScreenUpdating = False
    For c = 1 To LCol
        For r = 1 To LRow - 1
            If ws.Cells(r, c) = "" Then
                ws.Cells(r, c).Value = ws.Cells(LRow, c).Value
            End If
        Next r
    Next c
Application.ScreenUpdating = True

End Sub

Оба примера ниже взяты из одного макроса. Обратите внимание, что он работает, как и ожидалось, для вашего примера (4 Rows x 3 Columns) и для таблиц других размеров, как пример справа (8 Rows x 7 Columns)

enter image description here

0 голосов
/ 12 ноября 2018

Если все ячейки в A1: C3 пусты, то рассмотрим:

Sub FillInTheBlanks()
    Range("A1:C3").Value = Range("A4:C4").Value
End Sub

Если некоторые ячейки в A1: C3 не пусты, используйте:

Sub FillInTheBlanks2()
    For i = 1 To 3
        For j = 1 To 3
            If Cells(i, j) = "" Then
                Cells(4, j).Copy Cells(i, j)
            End If
        Next j
    Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...