Дайте мне знать, если вы хотите создать таблицу программно. Но сейчас мы продолжим ручную технику.
Я использую Excel 2016 ... Сначала выберите весь набор данных. Go в меню [Вставить] и выберите [Таблица]. Щелкните в любом месте внутри новой таблицы, и в конце ленты появится меню [Инструменты для таблицы -> Дизайн]. Go там и обратите внимание на поле [Table Name], поскольку оно потребуется вам в приведенном ниже коде, чтобы правильно установить переменную objList.
Имена столбцов жестко закодированы в массив, но вы можете загрузить Listbox с именами столбцов скрытым листом и по-настоящему полюбить его, если хотите:
Sub replaceBlank()
Dim rngRow As Range, rngColDataSet As Range
Dim ws As Worksheet
Dim objListCols As ListColumns
Dim objList As ListObject
Dim cntCols As Long, y As Long, MaxCols As Long
Dim arColNames(1) As String
'add column names as needed
arColNames(0) = "Revenue"
arColNames(1) = "Margin"
Set ws = ActiveSheet 'because ActiveSheet won't list properties/methods and that just bugs me
Set objList = ws.ListObjects("Table1")
Set objListCols = objList.ListColumns
MaxCols = objListCols.Count
'--> loop each column in the table
For cntCols = 1 To MaxCols
'--> test if column is in the names you want processed
For y = LBound(arColNames) To UBound(arColNames)
If arColNames(y) = objListCols(cntCols).Name Then
Set rngColDataSet = objListCols(cntCols).DataBodyRange.Areas(1)
'-----------> OPTION 1: QUICK AND EFFICIENT!
rngColDataSet.Replace "", "0", xlWhole
rngColDataSet.Replace " ", "0", xlWhole
'-----------> OPTION 2: IF YOU WANT TO ACCESS INDIVIDUAL CELL PROPERTIES OR METHODS <-------------------
' For Each rngRow In rngColDataSet
' If rngRow.Value = "" Or rngRow.Value = " " Then
' rngRow.Value = "0"
' End If
' Next
Exit For
End If
Next
Next
End Sub
Благодаря @Zack E и @JvdV для вдохновения;)