Як перетворити цілий рядок у рядок у Excel VBA?


Відповіді:


262

CStr(45) все, що вам потрібно (функція «Перетворити рядок»)


1
CStr(45), якщо бути точним.
Kouichi C. Nakamura

це не працюватиме для перетворених номерів e +! тобто 7.7685099559e + 11 буде показано як "7.7685099559e + 11", не так, як очікувалося: "776850995590" Тому я скоріше скажу, що це буде більш загальним:CStr(CDbl(***))
Mahhdy

Це може відповісти на потреби запитання, але воно також є неповним і недостатнім за деяких обставин. Часто (наприклад, для іменування файлів), можливо, ви захочете створити нульові префіксні номери, такі, що 7стає 007. Ви також можете вказати кількість десяткових знаків або включити тисячу роздільників. Якщо для вас важливі ці деталі: excelfunctions.net/vba-format-function.html
cartbeforehorse

97

Спробуйте функцію CStr ()

Dim myVal as String;
Dim myNum as Integer;

myVal = "My number is:"
myVal = myVal & CStr(myNum);

51

У більшості випадків вам не потрібно буде "конвертувати"; VBA здійснить безпечне неявне перетворення типу без використання таких перетворювачів CStr.

Наведений нижче код працює без жодних проблем, тому що змінна має тип String, і неявна конвертація типів проводиться автоматично!

Dim myVal As String
Dim myNum As Integer

myVal = "My number is: "
myVal = myVal & myNum

Результат:

"Мій номер: 0"

Вам навіть не потрібно захоплюватися цим, це також працює:

Dim myString as String
myString = 77

"77"

Конвертувати потрібно лише тоді, коли змінна Type є неоднозначною (наприклад, Variant Type або Cell Value(що є Variant)).

Навіть тоді вам не доведеться використовувати CStrфункцію, якщо ви поєднуєте іншу змінну String або константу. Подобається це:

Sheet1.Range("A1").Value = "My favorite number is " & 7

"Моє улюблене число - 7"

Тож насправді єдиний рідкісний випадок - це коли ви дійсно хочете зберегти ціле значення у варіант або значення комірки, коли також не поєднуються з іншим рядком (що я можу додати):

Dim i as Integer
i = 7
Sheet1.Range("A1").Value = i

7

Dim i as Integer
i = 7
Sheet1.Range("A1").Value = CStr(i)

"7"


2
Я не розумію, чому ця відповідь не має більше голосів, якщо це правда. Варто зазначити, що перетворення типів здійснюється не завжди , це залежить від оператора, який використовується. Наприклад, операція + не завжди розширюватиме ціле число до рядка.
Марк Ч.

1
@MarkCh Я знаю, що це давнє, але ... можливо, тому, що недоброзичливі неявні перетворення VBA та виклики учасників за замовчуванням - це те, що робить такий код VBA слабким, дивовижним та схильним до помилок? Не було б і вдвічі менше запитань щодо VBA, якщо б це не було неявних перетворень, неявної доступності, неявного доступу за замовчуванням, неявного масиву на основі 1 Option Base 1, неявного введення тексту Def[Type](хлопчик, що ЗЛИВ!), Неявного ... Ви отримуєте це - єдиний хороший неявний предмет у VBA - це синтаксис неявного виклику, який зробив явний Callзастарілий.
Матьє Гіндон

7

У моєму випадку функцію CString не знайдено. Але додавання порожнього рядка до значення також працює.

Dim Test As Integer, Test2 As Variant
Test = 10
Test2 = Test & ""
//Test2 is now "10" not 10

2
Ніхто не говорив про те CString, що є функцією VB.NET. Об’єднання порожнього рядкового рядка для створення рядка є доволі кульгавим методом перетворення. Використання CStrдля явних перетворень типів - це неявна конверсія типу і піднімає брови у кожного, хто читає цей код. Вибачте, що знайшов цю відповідь так пізно після її опублікування, я б хотів, щоб я спростував її значно раніше.
Матьє Гіндон

2

Якщо рядок, яку ви втягуєте, трапляється як шістнадцятковий номер, такий як E01, то Excel переведе це як 0, навіть якщо ви використовуєте функцію CStr, і навіть якщо ви спочатку депозитуєте її у тип змінної String. Один із способів навколо проблеми - додавання "до початку значення.

Наприклад, витягуючи значення з таблиці Word та приводячи їх у Excel:

strWr = "'" & WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)

2

Найкоротший спосіб без оголошення змінної - за допомогою Тип Підказки :

s$ =  123   ' s = "123"
i% = "123"  ' i =  123

Це не буде компілюватися з Option Explicit. Типи не будуть, Variantале StringіInteger


0

Інший спосіб зробити це - з'єднати два проаналізовані секції числового значення разом:

Cells(RowNum, ColumnNum).Value = Mid(varNumber,1,1) & Mid(varNumber,2,Len(varNumber))

Я знайшов кращий успіх у цьому, ніж CStr()через те, CStr()що, здається, не конвертував десяткових чисел, які виходили з варіантів у моєму досвіді.


0

Якщо у вас дійсне ціле значення і ваша вимога полягає в порівнянні значень, ви можете просто продовжити порівняння, як показано нижче.

Sub t()

Dim i As Integer
Dim s  As String

' pass
i = 65
s = "65"
If i = s Then
MsgBox i
End If

' fail - Type Mismatch
i = 65
s = "A"
If i = s Then
MsgBox i
End If
End Sub

0

Прийнята відповідь хороша для меншої кількості, головне, коли ви берете дані з аркушів excel. оскільки більші числа автоматично перетворюються на наукові числа, тобто e + 10.
Тому я думаю, що це дасть вам більш загальну відповідь. Я не перевіряв, чи є в ній падіння чи ні.

CStr(CDbl(#yourNumber#))

це працюватиме для перетворених номерів e +! оскільки справедливий CStr(7.7685099559e+11)буде показаний як "7.7685099559e + 11", не так, як очікувалося: "776850995590" Тож я скажу, що моя відповідь буде більш загальним результатом.

З повагою, М


0

введіть тут опис зображення

    Sub NumToText(ByRef sRng As String, Optional ByVal WS As Worksheet)
    '---Converting visible range form Numbers to Text
        Dim Temp As Double
        Dim vRng As Range
        Dim Cel As Object

        If WS Is Nothing Then Set WS = ActiveSheet
            Set vRng = WS.Range(sRng).SpecialCells(xlCellTypeVisible)
            For Each Cel In vRng
                If Not IsEmpty(Cel.Value) And IsNumeric(Cel.Value) Then
                    Temp = Cel.Value
                    Cel.ClearContents
                    Cel.NumberFormat = "@"
                    Cel.Value = CStr(Temp)
                End If
            Next Cel
    End Sub


    Sub Macro1()
        Call NumToText("A2:A100", ActiveSheet)
    End Sub

Reffer: MrExcel.com - Перетворення номерів у текст за допомогою VBA

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.