[英]Select a part of Excel Cell (Not Complete Cell) and convert it to Uppercase by running a macro
[英]Select a part of Excel Cell (Not Complete Cell) and compare it to other cells
我有一部分代碼可供VBA運行,並在我的數據中發現非順序數字后添加空白行。 但是我的數據包含字母,並且代碼編寫方式僅比較整數序列。 有沒有一種方法可以操縱代碼以僅選擇單元格的一部分並比較該部分?
例如,我有以下順序:
100-CG-000-10008
100-CG-000-10009
100-CG-000-10011
100-CG-000-10012
想法是讓VBA在100-CG-000-10009之后插入一個空白行,因為在此之后它不再按順序排列。 我正在使用的代碼是:
Sub InsertNullBetween()
'Update 20130829
Dim WorkRng As Range
Dim Rng As Range
Dim outArr As Variant
Dim dic As Variant
Set dic = CreateObject("Scripting.Dictionary")
'On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
num1 = WorkRng.Range("A1").Value
num2 = WorkRng.Range("A" & WorkRng.Rows.Count).Value
interval = num2 - num1
ReDim outArr(1 To interval + 1, 1 To 2)
For Each Rng In WorkRng
dic(Rng.Value) = Rng.Offset(0, 1).Value
Next
For i = 0 To interval
If dic.Exists(i + num1) Then
outArr(i + 1, 1) = i + num1
outArr(i + 1, 2) = dic(i + num1)
Else
outArr(i + 1, 1) = ""
outArr(i + 1, 2) = ""
End If
Next
With WorkRng.Range("A1").Resize(UBound(outArr, 1), UBound(outArr, 2))
.Value = outArr
.Select
End With
End Sub
有什么辦法可以更改代碼,使其僅查看包含第三個“-”之后的整數的單元格的最后一部分?
您的代碼看起來太復雜了。 在這里,我將只為您提供從單元格中提取最后一個“-”之后的最后一個數字的方法:
Function ExtractNumber(r As Range) As Long
ExtractNumber = Mid(r.Value, 1 + InStrRev(r.Value, "-"))
End Function
如果這些單元格中有純數字,那么假設您當前的代碼運行良好,則可以使用此功能對其進行自定義。 例如:
num1= ExtractNumber(WorkRng.Range("A1"))
num2 = ExtractNumber(WorkRng.Range("A" & WorkRng.Rows.Count))
...
dic(ExtractNumber(Rng)) = Rng.Offset(0, 1).Value
等等..
使用代碼進行編輯 ,僅插入行並處理任何間隙
你可以用這個
Option Explicit
Sub InsertNullBetween()
Dim i As Long, gap As Long
With Range("A1", Cells(Rows.count, 1).End(xlUp))
For i = .Rows.count To 2 Step -1
gap = Right(.Cells(i), 5) - Right(.Cells(i - 1), 5)
If gap > 1 Then .Cells(i).Resize(gap - 1).Insert xlDown
Next
End With
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.