Массив с помощью Join
с простым транспонированием
- Ваш пост предполагает гибкий диапазон в столбце
A:A
, поэтому первый шаг [1]
получает последнюю строкуномер и определяет диапазон данных. - На шаге
[2]
назначенный диапазон данных присваивается массиву , который должен быть вариантом.Функция Application.Transpose
изменяет исходные данные столбца на «плоский» массив всего за одну строку кода и уменьшает размер по умолчанию для 2-dim до простого массива с 1-dim.Кроме того, последний элемент просто обогащается путем вставки "и".Это позволяет избежать сложного действия разделения и поиска. - Шаг
[3]
позволяет объединить любой 1-мерный массив с помощью функции Join
и вставитьлюбой пользовательский разделитель (например, двоеточие ",").Наконец, перед двоеточием «и» удаляется начальная двоеточие, заменяя только «и» на «и». - Step
[4]
отображает окно с сообщением.
Пример кода
Option Explicit ' declaration head of your code module
Sub displayMsg()
' [0] declare constants and variables
Const LNK$ = " and ", COLON$ = "," ' define linking constants "and" plus COLON
Dim v As Variant, msg$, lastRow& ' provide for variant datafield array and message string
Dim ws As Worksheet, rng As Range ' declare worksheet object *)
Set ws = ThisWorkbook.Worksheets("MySheetName") ' << change to your sheet name *)
' [1] define flexible range object in column A:A via last row number
lastRow = ws.Range("A" & ws.Rows.count).End(xlUp).Row
Set rng = ws.Range("A1:A" & lastRow) ' e.g. A1:A4, if n = 4
' [2] get 2-dim column data to "flat" 1-dim array
v = Application.Transpose(rng) ' read into array and make it "flat"
v(UBound(v)) = LNK & v(UBound(v)) ' insert " and " into last array element
' [3] concatenate elements and delete superfluous last colon
msg = Replace(Join(v, COLON), COLON & LNK, LNK) ' get wanted message string
' [4] display message
MsgBox "You have entered " & msg & ".", vbInformation, UBound(v) & " elements"
End Sub
Альтернативная ссылка
*) Вместо ссылки на рабочий лист ws
, например, ThisWorkBook.Worksheets("MySheetName")
, вы можете просто использовать CodeName на рабочем листе, как указано в VB Editor (без объявления ws
и установки его в память), просто кодируйте следующим образом:
' [1] define flexible range object in column A:A via last row number
lastRow = Sheet1.Range("A" & Sheet1.Rows.count).End(xlUp).Row
Set rng = Sheet1.Range("A1:A" & lastRow)
Наслаждайтесь : -)