使用Excel VBA的子串

时间:2017-10-12 12:05:59

标签: vba excel-vba excel

我一直在使用此代码作为起点:https://danwagner.co/how-to-transpose-horizontal-data-to-vertical-data-for-easy-pivot-tables/

我的一个单元格Ax(x指的是数字),内容是ABCDEFGHI,我想每2个字符对单元格进行子串,最后一个是3个字符。最终结果如下:

AB CD EF GHI

在第44行,使用变量

varDetails = .Range(.Cells(lngIdx, 1), .Cells(lngIdx, 4)) 

并认为这是我需要修改代码的地方。我对VBA不够流利,需要一些帮助。

1 个答案:

答案 0 :(得分:1)

要从字符串中拆分数据,您可以使用以下代码

def get_input(variable_name, min_size, max_size, begin, end):                 
    data = input("What is your {}? ".format(variable_name))                   
    if len(data) < min_size:                                                  
        raise ValueError('{} is too small'.format(variable_name.capitalize()))
    elif len(data) > max_size:                                                
        raise ValueError('{} is too big'.format(variable_name.capitalize()))  
    return data[begin:end]                                                    

name_index = get_input("name", 3, 10, 0, 2)                                   
food_index = get_input("food", 3, 10, 2, 100)                                 
birth_index = get_input("date of birth (mmddyyyy)", 3, 10, 0, 3)              
passcode = name_index + food_index + birth_index                              

print("Your passcode is", passcode)                                                                  

您需要更改的内容

在这里,我已将字符串设置为Sub SplitStringEveryTwoCharacters() Dim arrayWithValuesByTwo() As String Dim myString As String 'Just replace with your data myString = "ABCDEFGHIJKLM" 'Resize ReDim arrayWithValuesByTwo(Len(myString) - 1) 'For each 2 character in string For i = 1 To Len(myString) Step 2 'Add in array If (i <= Len(myString) - 1) Then arrayWithValuesByTwo(i - 1) = Mid$(myString, i, 2) End If If (i = Len(myString)) Then arrayWithValuesByTwo(i - 1) = Mid$(myString, i, 1) End If Next End Sub 的变量,但您可以轻松更改此字符串并直接从类似myString = "ABCDEFGHIJKLM"的单元格中获取。

例如,您可以使用myString = Range("A5")访问您的数据。只需遍历它即可获得所有值。