天道酬勤,学无止境

如何将范围转换为字符串 (VBA)?(How can I convert a range to a string (VBA)?)

问题

将一系列单元格转换为字符串的最佳方法是什么? 我有一个只接受字符串作为输入的函数,所以我需要将范围转换为字符串,同时尽可能多地保留格式(即它需要看起来像一个表格或列表,而不仅仅是一个字符串) . 我尝试过使用 CStr() 以及从范围转换为数组然后转换为字符串,但我只是遇到错误。

编辑:代码尝试

Dim email_answer As Integer
email_answer = MsgBox("Do you want to be emailled a copy of this schedule?", vbYesNo)
If email_answer = vbYes Then

    Dim wb As Workbook
    Dim to_send As Range
    to_send = Range("D3", "D10")

    If Val(Application.Version) < 14 Then Exit Sub

    Set wb = ActiveWorkbook
    With wb
        MailFromMacWithMail body content:=CStr(to_send), _
                    mailsubject:="Schedule", _
                    toaddress:="email address", _
                    ccaddress:="", _
                    bccaddress:="", _
                    attachment:=.FullName, _
                    displaymail:=False
    End With
    Set wb = Nothing
End If
回答1

要制作一个范围内的单元格值的逗号分隔列表:

Function RangeToString(ByVal myRange as Range) as String
    RangeToString = ""
    If Not myRange Is Nothing Then
        Dim myCell as Range
        For Each myCell in myRange
            RangeToString = RangeToString & "," & myCell.Value
        Next myCell
        'Remove extra comma
        RangeToString = Right(RangeToString, Len(RangeToString) - 1)
    End If
End Function

如果行号增加,您可以添加额外的功能,例如插入分号而不是逗号。

要使用此功能:

Sub AnySubNameHere()
    Dim rng As Range
    Set rng = ActiveSheet.Range("A3:A10")

    Dim myString as String
    myString = RangeToString(rng)
End Sub
回答2

你可以使用这个功能:

Function Rang2String(rng As Range) As String
    Dim strng As String
    Dim myRow As Range
    With rng
        For Each myRow In .Rows
            strng = strng & Join(Application.Transpose(Application.Transpose(myRow.value)), "|") & vbLf
        Next
    End With
    Rang2String = Left(strng, Len(strng) - 1)
End Function

这将返回一个带有换行符作为范围行分隔符和管道(“|”)作为列分隔符的字符串

回答3

我知道这个问题已经快一年了,但我找到了一个对我有用的快速解决方案:您必须创建对 Microsoft Forms 2.0 对象库的引用才能使用 DataObject。

Public Function GetStringFromRange(RNG As Range) As String
    Dim DOB As New MSForms.DataObject
    RNG.Copy
    DOB.GetFromClipboard
    GetStringFromRange = DOB.GetText
End Function
回答4

这些功能中的任何一个都可以为您完成。

Function ConCatRange2(CellBlock As Range) As String
'for non-contiguous cells =ccr((a1:a10,c4,c6,e1:e5))
Dim Cell As Range
Dim sbuf As String
For Each Cell In CellBlock
If Len(Cell.Text) > 0 Then sbuf = sbuf & Cell.Text & ","
Next
ConCatRange2 = Left(sbuf, Len(sbuf) - 1)
End Function

或者

Function mergem(r As Range) As String
mergem = r.Cells(1, 1).Value
k = 1
For Each rr In r
    If k <> 1 Then
        mergem = mergem & "," & rr.Value
    End If
    k = 2
Next
End Function

或者

Function spliceUm(r As Range) As String
spliceUm = ""
For Each rr In r
spliceUm = spliceUm & rr.Value & ";"
Next
End Function
回答5

有一个更简单的方法。 假设变量 rng 是一个范围,那么写:

rng = Left(rng,Len(rng))

将奇迹般地将 rng 变成字符串。

回答6

您可以使用以下解决方案在 VBA 中将范围转换为字符串:

Sub convert()

Dim rng As Range, cell As Range

Dim filter As String

filter = ""

Set rng = Selection

For Each cell In rng

    If Not cell Is Nothing Then
        filter = """" & cell & """" & "," & filter
    End If

Next cell

End Sub
回答7

鉴于显然需要迭代范围,我认为首先将范围复制到数组并通过循环数组构建字符串会快得多。

回答8

即使使用另一个工作表中的范围,这也能完成工作

Function RangeToString(ByVal myRange As range) As String
    RangeToString = ""
    If Not myRange Is Nothing Then
        RangeToString = "=" & myRange.Worksheet.Name & "!" & myRange.Address
    End If
End Function
回答9

无需迭代。

Application.Textjoin(Chr(10),TRUE,Range("D3", "D10"))

或者

Join(Application.Transpose(Range("D3:D10")),Chr(10))

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何在Excel VBA中将整数转换为字符串?(How Do I Convert an Integer to a String in Excel VBA?)
    问题 如何在Excel VBA中将整数值“ 45”转换为字符串值“ 45”? 回答1 CStr(45)就是您所需要的(“转换字符串”功能) 回答2 尝试CStr()函数 Dim myVal as String; Dim myNum as Integer; myVal = "My number is:" myVal = myVal & CStr(myNum); 回答3 大多数情况下,您无需“转换”; VBA将为您执行安全的隐式类型转换,而无需使用CStr之类的转换器。 下面的代码可以正常工作,因为该变量的类型为字符串,并且隐式类型转换会自动为您完成! Dim myVal As String Dim myNum As Integer myVal = "My number is: " myVal = myVal & myNum 结果: “我的电话是:0” 您甚至不必花哨,这也可以: Dim myString as String myString = 77 “ 77” 您将需要转换的唯一时间是当变量类型是不明确的(例如,类型变体或Cell的Value (这是变))。 即使这样,如果要与另一个String变量或常量复合,也不必使用CStr函数。 像这样: Sheet1.Range("A1").Value = "My favorite number is " & 7 “我最喜欢的号码是7”
  • 如何将范围 obj 变量传递给 Excel VBA(2016)中的子项[重复](How do I pass a range obj variable to a sub in Excel VBA (2016) [duplicate])
    问题 这个问题在这里已经有了答案: 数组参数必须是 ByRef (1 个回答) 4年前关闭。 鉴于以下代码:我似乎无法成功地将范围对象变量从一个子函数传递到另一个子函数。 我花了一整天的时间研究和实验,然后才放下骄傲来到这里。 请阅读下面的评论,并回答您对为什么最后两行不起作用的任何想法。 Public Sub doSomethingToRows(ROI As Range) *'do Something with the cell values within the supplied range* End Sub ' Public Sub testDoAltRows() Dim RegionOfInterest As Range 'is this an object or not? '*The following yields: Class doesn't support Automation (Error 430)* '*Set RegionOfInterest = New Worksheet 'this just gives an error* Set RegionOfInterest = Worksheets("Sheet1").Range("A1") RegionOfInterest.Value = 1234.56 '*okay, updates cell A1* Set
  • Excel VBA - 将用户表单中输入的字符串转换为数字(Excel VBA - Convert string entered in user form to number)
    问题 我有一个 excel 用户表单,用户可以在其中输入数字,当这些数字被输入到电子表格中时,它们会出现并通知这是一个以文本形式存储的数字。 =SUM(H6:H13) 显示零结果。 我试过NumCrtn = cLng(NumCrtn) - 不会将单元格更改为数字,公式仍然显示为零。 我试过NumCrtn = Val(NumCrtn) - 不会将单元格更改为数字,公式仍然显示为零。 我已经尝试将 copy 和 paste.special 复制到一个值,但也没有将其更改为数字。 不知道该怎么办。 帮助! 回答1 试试这个: With Range("H6:H13") .NumberFormat = "0" .Value = .Value End With 编辑: 另一种解决方案。 基于 Pradeep Kumar 的建议,该建议涉及在输入数据之前准备范围,将代码更改为这样的内容 Private Sub UserForm_Initialize() Dim aCell As Range Range("H6:H13").NumberFormat = "0" 'This is to cater for any previous values if filled in For Each aCell In Range("H6:H13") aCell.Formula = aCell.Value
  • Vba将Excel范围转换为图片并发送到Outlook,将文本写入正文(Vba convert Excel range into picture and send to Outlook, write text into body)
    问题 我想从受保护的 Excel 工作表中复制一个范围并将其作为图片粘贴到 Outlook 中,编写一些文本并显示它。 我下面的代码首先粘贴文本,然后粘贴图片,但同时删除文本。 但我想要文字和文字图片(范围从 Excel 转换为图片)。 有人可以帮我如何得到它吗? Sub Send_Email() Dim r As Range Set r = Range("NR7:OD39") Dim outlookApp As Outlook.Application Set outlookApp = CreateObject("Outlook.Application") Dim OutMail As Outlook.MailItem Set OutMail = outlookApp.CreateItem(olMailItem) Dim StrFileName As String Application.DisplayAlerts = False Application.ScreenUpdating = False Sheets("table1").Select ActiveSheet.Unprotect Password:="blabla" ActiveSheet.Outline.ShowLevels RowLevels:=8, ColumnLevels:=8 r.Select r.Copy
  • 将Excel范围转换为VBA字符串(Turn Excel range into VBA string)
    问题 我想将给定范围内的值转换为VBA字符串,其中原始单元格值由任何选定的列定界符和行定界符分隔。 分隔符可以是一个字符或更长的字符串。 行定界符是该行末尾的字符串。 字符串应该与我们从左上角,从左到右,到右下角的文本读取相同。 以下是范围A1:C5中的VALUES的示例: +----+----+----+ | A1 | B1 | C1 | +----+----+----+ | A2 | B2 | C2 | +----+----+----+ | A3 | B3 | C3 | +----+----+----+ | A4 | B4 | C4 | +----+----+----+ | A5 | B5 | C5 | +----+----+----+ 所需的结果是VBA字符串: A1,B1,C1@$A$2,$B$2,$C$2@A3,B3,C3@A4,B4,C4@A5,B5,C5@ 为了便于阅读,我将显示为: A1,B1,C1@ A2,B2,C2@ A3,B3,C3@ A4,B4,C4@ A5,B5,C5@ 作为定界符我所选择的列, (逗号),并作为行分隔符@符号。 当然,这些可以是\r\n类的任何字符。 我之所以要快速烹调范围内的字符串,是因为我想通过ADO连接将其发送到SQL Server。 到目前为止,我已经测试过,这是即时传输大量数据的最快方法。 双重问题是如何在SQL
  • 如何使用 VBA 忽略范围内的绿色三角形错误而无需逐个单元格循环?(How can I use VBA to ignore green triangle error in range without looping cell by cell?)
    问题 我有一些我正在自动化和分发的大型数据集。 我想消除警告用户有关以文本形式存储的数字的绿色小三角形。 我使用了以下代码,但在大量工作表上速度非常慢。 Range(Cells(1, 1), Cells(lastrow, lColumn)).Select 'kill those dang green cell triagles Dim rngCell As Range, bError As Byte For Each rngCell In Selection.Cells For bError = 3 To 3 Step 1 With rngCell If .Errors(bError).Value Then .Errors(bError).Ignore = True End If End With Next bError Next rngCell 正如你所看到的,我已经将它减少到 1/7 的时间,因为我没有遍历每个错误,只是我试图阻止的错误,但它仍然很慢。 我也已经知道了 Application.ErrorCheckingOptions.NumberAsText = False 但我不想使用它,因为我不想更改用户系统设置。 我想要循环的效果而不循环遍历所有单元格。 我可以告诉 Excel 在不逐个单元格循环的情况下停止检查整个范围吗? 任何有效且快速的方法都会非常有帮助。 先感谢您
  • 如何在Excel中根据IP地址查找位置(How to find location based on IP address in Excel)
    问题 我有一个包含与 IP 相关联的大约 5000 个用户事件的电子表格,我正在尝试使用 IP 仅使用 Excel 公式来确定位置。 我的日志中的 IP 结构为“点四边形”(十进制表示法)。 我认为 VLOOKUP 是通往这里的方式,所以我下载了 WEBNet77 的 IPV4 IpToCountry 数据库,这似乎是一个全面且最新的资源(是否有更好的资源用于此目的?)。 该数据库包含大约 140K 行 IP 范围,表格结构如下: 列标签 A - G 分别是:IP FROM、IP TO、REGISTRY、ASSIGNED、CTRY、CNTRY、COUNTRY。 请注意,一个问题:A 到 B 列代表一系列 IP,但它们采用“长格式”(我起初没有意识到这一点)。 所以,在使用这些值作为参考之前,我必须转换我的虚线四边形。 然后,我想为日志中的每个 IP 返回 Country(G 列)。 这里有什么帮助吗? 如果您认为有更好的方法在 Excel 中查找 IP > Country(可能使用网络,即http://api.hostip.info/flag.php?ip=xxx.xxx.xxx.xxx ),请让我知道。 回答1 您可以使用此功能将四核 IP 转换为数字 Function GetNumericIP(quadIP As String) As Long Dim sections On
  • VBA 将范围转换为数组并格式化日期(VBA convert range to array and format date)
    问题 I am struggling with a conversion to array in VBA : Dim list As Range Set list = Range(series, series.End(xlDown)) list.Select Dim table() As Variant Set table = list.value My understanding is that value returns an array right ? I don't get why VBA tells me that I "can't assign to array". My list range looks like that in Excel at the Select, and i aim at having that as an array so that I can format my dates using something like Format(table.Rows(i).Columns(1).value, "yyyy-mm-dd"), looping on my table. 02-Sep-09 1.00 18-Sep-09 1.00 16-Oct-09 1.00 20-Nov-09 1.00 18-Dec-09 1.00 19-Mar-10 1.00
  • 使用vba中的列号创建excel范围?(Create excel ranges using column numbers in vba?)
    问题 如何使用列号而不是字母在 vba 中创建范围? 回答1 以下是选择范围 A1 的两种解决方案。 Cells(1,1).Select '(row 1, column 1) Range("A1").Select 另请查看此链接; http://www.excel-vba.com/vba-code-2-6-cells-ranges.htm 我们强烈建议您使用 Range 而不是 Cells 来处理单元格和单元格组。 它使您的句子更加清晰,并且您不必记住列 AE 是第 31 列。 只有当您想要选择工作表的所有单元格时,才会使用单元格。 例如: Cells.Select 要选择所有单元格,然后清空您将使用的值或公式的所有单元格: Cells.ClearContents —— “单元格”在动态设置范围和使用计数器循环范围时特别有用。 使用字母作为列号定义范围在短期内可能更透明,但它也会使您的应用程序更加严格,因为它们是“硬编码”表示 - 不是动态的。 感谢金吉森 回答2 要引用单元格范围,您可以使用 Range(Cell1,Cell2),示例: Sub RangeTest() Dim testRange As Range Dim targetWorksheet As Worksheet Set targetWorksheet = Worksheets("MySheetName")
  • 如何调用未出现在列表中的宏,将重音字符转换为常规字符?(How to call a macro, to Convert Accented Characters to Regular, that does not appear in the list?)
    问题 我正在尝试用常规字符替换重音字符。 当我尝试运行宏时,它没有出现在列表中。 Option Explicit '-- Add more chars to these 2 string as you want '-- You may have problem with unicode chars that has code > 255 '-- such as some Vietnamese characters that are outside of ASCII code (0-255) Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ" Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy" Sub StripAccent(aRange As Range) '-- Usage: StripAccent Sheet1.Range("A1:C20") Dim A As String * 1 Dim B As String * 1 Dim i As Integer For i = 1 To Len(AccChars) A = Mid(AccChars, i, 1) B =
  • 将整个范围转换为大写而不循环遍历所有单元格(Convert an entire range to uppercase without looping through all the cells)
    问题 现在,我正在使用以下代码将股票代码的列表从小写字母转换为大写字母: Dim Tickers As String Dim n As Integer For n = 2 To Last Tickers = UCase(W.Cells(n, 1).Value) W.Cells(n, 1).Value = Tickers Next n 有没有一种方法可以将整个范围转换为一行? 就像是: Range("A1:A20").convertouppercasesomehow 回答1 有没有一种方法可以将整个范围转换为一行? 是的,您可以转换而无需循环。 尝试这个 Sub Sample() [A1:A20] = [INDEX(UPPER(A1:A20),)] End Sub 或者,使用可变范围,请尝试以下操作: Sub Sample() dim rng as Range dim sAddr as string set rng = Range("A1:A20") sAddr = rng.Address rng = Evaluate("index(upper(" & sAddr & "),)") End Sub 根据你的例子 W.Range("A1:A20") = [index(upper(A1:A20),)] 解释 [A1:A20] = [INDEX(UPPER(A1:A20),)]有两个部分
  • 如何将字符串转换为范围对象(How to convert a String to a Range Object)
    问题 反正有没有将字符串值转换为 Range 对象? 我有一个函数,它接受一个 Range 对象作为参数,并且需要向它传递一个字符串参数 谢谢你 回答1 带有单元格地址的字符串? 如果是这样的话: Dim r As Range: Set r = Range("B3") MsgBox r.ColumnWidth 回答2 我有点不喜欢这个,但是如果您不能更改需要范围的函数,则可以创建一个将字符串转换为范围的函数。 您希望确保第一个函数唯一关心的是 Value 或 Text 属性。 Function FuncThatTakesRange(rng As Range) FuncThatTakesRange = rng.Value End Function Function ConvertStringToRange(sInput As String) As Range Dim ws As Worksheet Set ws = Workbooks.Add.Sheets(1) ws.Range("A1").Value = sInput Set ConvertStringToRange = ws.Range("A1") Application.OnTime Now + TimeSerial(0, 0, 1), "'CloseWB """ & ws.Parent.Name & """'" End
  • 从VBA中的范围创建阵列(Creating an Array from a Range in VBA)
    问题 我遇到了一个看似基本的问题,但找不到解决该问题的任何资源。 简而言之,我只想将一个单元格范围(全部为一列)的内容加载到一个数组中。 我能够通过 DirArray = Array(Range("A1"), Range("A2")) 但是由于某种原因,我无法以这种方式创建数组: DirArray = Array(Range("A1:A2")) 我的实际Range更长(并且长度可能会有所不同),因此我不想以这种方式单独枚举单元格。 谁能告诉我如何正确地将整个范围加载到数组中? 使用后面的代码: MsgBox UBound(DirArray, 1) 和 MsgBox UBound(DirArray) 返回0,而使用前者则返回1。 回答1 只需将变量定义为变量,并使它们相等即可: Dim DirArray As Variant DirArray = Range("a1:a5").Value 不需要Array命令。 回答2 如果我们这样做的话: Dim myArr as Variant myArr = Range("A1:A10") 新数组将具有两个维度。 使用它并不总是那么舒服: 为了摆脱这两个维度,当将单个列放入数组时,我们可以使用内置的Excel函数“ Transpose”。 有了它,数据就成为一维的: 如果我们连续有数据,则单个转置将无法完成任务。 我们需要两次使用移调功能:
  • 将列号转换为字母的功能?(Function to convert column number to letter?)
    问题 是否有人拥有可以从数字中返回列字母的Excel VBA函数? 例如,输入100应该返回CV 。 回答1 此函数返回给定列号的列字母。 Function Col_Letter(lngCol As Long) As String Dim vArr vArr = Split(Cells(1, lngCol).Address(True, False), "$") Col_Letter = vArr(0) End Function 列100的测试代码 Sub Test() MsgBox Col_Letter(100) End Sub 回答2 如果您不想使用范围对象: Function ColumnLetter(ColumnNumber As Long) As String Dim n As Long Dim c As Byte Dim s As String n = ColumnNumber Do c = ((n - 1) Mod 26) s = Chr(c + 65) & s n = (n - c) \ 26 Loop While n > 0 ColumnLetter = s End Function 回答3 对我有用的是: Cells(Row,Column).Address 这将为您返回$ AE $ 1格式参考。 回答4 例如: MsgBox Columns( 9347 )
  • 是否可以在 VBA 中将 Excel 表转换为 json(Is it possible in VBA convert Excel table to json)
    问题 我需要将大约 20 列和许多行的 excel 表中的数据转换为 json。 我没有在 vba 中找到用于此目的的简短代码示例。 我找到了这个 https://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas ,但它非常大。 可能是一个较短的例子? 回答1 我会使用这个的修改版本:http://www.excelvbamacros.in/2015/01/export-range-in-jason-format.html 如果你想把它写到文件有一个代码: Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim Fileout As Object Set Fileout = fso.CreateTextFile("C:\some_dir\mydata.json", True, True) Fileout.Write jsonStringFromConvertFunction Fileout.Close 回答2 所以我会将范围传递给一个 JavaScript 函数,让它遍历 Excel 对象模型并在 JavaScript 中构建数组。 然后调用 JavaScript 库将数组转换为字符串(帽子提示 Douglas
  • 使用VBA将一定范围的列从文本转换为数字格式(Converting a certain range of columns from text to number format with VBA [duplicate])
    问题 这个问题已经在这里有了答案: VBA:将文本转换为数字(8个答案) 3年前关闭。 我每周都会收到一个电子表格,由于种种原因,超出了我的控制范围,一些列作为文本存储为数字而不是数字。 我需要将它们转换为数字,以便以后在代码中发生的事情。 我现在正在通过执行以下操作将它们转换为数字: Dim rng As Range For Each rng In Range("A:D").Columns rng.TextToColumns Next rng 是否有更好(即更有效)的方法来做到这一点? 我玩过NumberFormat,但似乎没有用。 在此先感谢您(如果我在这里错过了解决方案,我深表歉意-我进行了搜索但没有找到它)。 回答1 Excel : 复制一个空单元格选择您需要更改格式的范围选择PasteSpecial ,然后在“ Operation下选择“ Add VBA (相应地更改Sheet1 ,假设A100000为空): Sheet1.Range("A100000").Copy Sheet1.UsedRange.PasteSpecial , xlPasteSpecialOperationAdd 如果将以上内容放入Workbook_Open事件,则每次打开工作簿时,它将自动执行转换。 使用此方法,可以保留公式。 希望对您有所帮助! 回答2 从这个网站http://www.access
  • Excel Interop-效率和性能(Excel Interop - Efficiency and performance)
    问题 我想知道如何才能提高Excel自动化的性能,因为如果工作表中有很多事情要做的话,这可能会很慢。 这是我发现的一些问题: ExcelApp.ScreenUpdating = false关闭屏幕重绘 ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual关闭计算引擎,以便当单元格值更改时Excel不会自动重新计算(完成后将其重新打开) 减少对Worksheet.Cells.Item(row, col)和Worksheet.Range调用-我不得不轮询数百个单元格以查找所需的单元格。 实现单元位置的某些缓存,将执行时间从〜40秒减少到〜5秒。 哪种互操作电话会严重影响性能,应该避免使用? 您还可以做什么以避免不必要的处理? 回答1 当使用C#或VB.Net获取或设置范围时,找出范围的总大小是多少,然后获得一个大的二维对象数组... //get values object[,] objectArray = shtName.get_Range("A1:Z100").Value2; iFace = Convert.ToInt32(objectArray[1,1]); //set values object[,] objectArray = new object[3,1] {{"A"}{"B"}{"C"}}
  • 如何将 Excel 范围转换为列表 ?(How to convert an Excel range to a List<String>?)
    问题 我想从 Excel 范围中获取字符串列表,其中数据可以是混合类型(字符串、双精度等)。 我尝试使用这个: List<string> rangeToList(Excel.Range inputRng) { object[,] cellValues = (object[,])inputRng.Value2; List<string> lst = cellValues.Cast<string>().ToList(); return lst; } 但是带有Cast<string>返回此错误: Unable to cast object of type 'System.Double' to type 'System.String' 如何将此对象数组转换为我想要的列表? 回答1 Cast不会将数字隐式转换为字符串,但您可以在每个对象上调用ToString : List<string> lst = cellValues.Cast<object>() .Select(o => o.ToString()) .ToList(); 回答2 首先,您应该转换为object以制作object列表,然后您应该使用ConvertAll (msdn) 将object转换为string 。 List<string> rangeToList(Microsoft.Office.Interop.Excel
  • Excel:将范围转换为数字(Excel: Convert Range to Numbers)
    问题 我是 Excel VBA 编码的新手。 我的数据看起来像这样12,14,18,20-25,27,30但我想设为12,14,18,20,21,22,23,24,25,27,30 。 简单来说就是将范围20-25更改为20,21,22,23,24,25 。 excel中有没有办法做到这一点? 提前致谢 回答1 考虑到您在字符串中有值: Sub asdadas() MsgBox SplitStr("12,14,18,20-25,27,30,34-47") End Sub Function SplitStr(xx As String) As String valu = Split(xx, ",") Stri = "" For Each nn In valu If InStr(1, nn, "-") > 0 Then For i = Left(nn, InStr(1, nn, "-") - 1) To Right(nn, Len(nn) - InStr(1, nn, "-")) If Stri <> "" Then Stri = Stri & "," & i Else Stri = i End If Next Else If Stri <> "" Then Stri = Stri & "," & Trim(nn) Else Stri = Trim(nn) End If End If
  • 如何将列号(例如127)转换为Excel列(例如AA)(How to convert a column number (e.g. 127) into an Excel column (e.g. AA))
    问题 如何在不使用自动化直接从Excel获取值的情况下,将数字转换为C#中的Excel列名称。 Excel 2007的可能范围是1到16384,这是它支持的列数。 结果值应采用excel列名的形式,例如A,AA,AAA等。 回答1 这是我的方法: private string GetExcelColumnName(int columnNumber) { int dividend = columnNumber; string columnName = String.Empty; int modulo; while (dividend > 0) { modulo = (dividend - 1) % 26; columnName = Convert.ToChar(65 + modulo).ToString() + columnName; dividend = (int)((dividend - modulo) / 26); } return columnName; } 回答2 如果有人需要在没有VBA的Excel中执行此操作,则可以采用以下方法: =SUBSTITUTE(ADDRESS(1;colNum;4);"1";"") 其中colNum是列号 在VBA中: Function GetColumnName(colNum As Integer) As String Dim d As