View Full Version : VBA: Input cell data outout in three ways
jadgon
10-12-2019, 12:45 AM
I have input data in sheet 1 as it appears below and need to get the results in below three ways in separate sheets. Header not included.
Sheet1: Input Data
asdfg1
asdfg1, asdfg1%, asdfg1, asdfg1%
asdfg2
asdfg1#, asdfg1
asdfg3
wxy1#, b-r-a-d-e-1
Sheet R1: Result 1
asdfg1
asdfg1
asdfg1%
asdfg1
asdfg1%
asdfg2
asdfg1#
asdfg1
asdfg3
wxy1#
b-r-a-d-e-1
Sheet R2: Result 2
asdfg1
asdfg1
asdfg1
asdfg1%
asdfg1
asdfg1
asdfg1
asdfg1%
asdfg2
asdfg1#
asdfg2
asdfg1
asdfg3
wxy1#
asdfg3
b-r-a-d-e-1
Sheet R3: Result 3
asdfg1
asdfg1, asdfg1%, asdfg1, asdfg1%
asdfg2
asdfg1#, asdfg1
asdfg3
wxy1#, b-r-a-d-e-1
Artik
10-12-2019, 06:05 PM
Sub SplitIntoSheets()
Dim wksActv As Worksheet
Dim WksT As Worksheet
Dim lLrow As Long
Dim Rng As Range
Dim LRow As Long
Dim varArr As Variant
Set wksActv = ActiveSheet
lLrow = wksActv.Cells(Rows.Count, "A").End(xlUp).Row
'To Sheet R1
Set WksT = Worksheets("Sheet R1")
LRow = 1
For Each Rng In wksActv.Range("A1:A" & lLrow).Cells
varArr = Empty
If Not IsEmpty(Rng.Value) Then
WksT.Cells(LRow, "A").Value = Rng.Value
varArr = Split(Rng.Offset(, 1).Value, ",")
If UBound(varArr) > -1 Then
varArr = TransposeIt(varArr)
WksT.Cells(LRow, "B").Resize(UBound(varArr) + 1).Value = varArr
LRow = LRow + UBound(varArr)
End If
LRow = LRow + 1
End If
Next Rng
'To Sheet R2
Set WksT = Worksheets("Sheet R2")
LRow = 1
For Each Rng In wksActv.Range("A1:A" & lLrow).Cells
varArr = Empty
If Not IsEmpty(Rng.Value) Then
WksT.Cells(LRow, "A").Value = Rng.Value
varArr = Split(Rng.Offset(, 1).Value, ",")
If UBound(varArr) > -1 Then
varArr = TransposeIt(varArr)
WksT.Cells(LRow, "B").Resize(UBound(varArr) + 1).Value = varArr
WksT.Cells(LRow, "A").Resize(UBound(varArr) + 1).Value = Rng.Value
LRow = LRow + UBound(varArr)
End If
LRow = LRow + 1
End If
Next Rng
'To Sheet R3
Set WksT = Worksheets("Sheet R3")
LRow = 1
For Each Rng In wksActv.Range("A1:A" & lLrow).Cells
If Not IsEmpty(Rng.Value) Then
WksT.Cells(LRow, "A").Resize(, 2).Value = Rng.Resize(, 2).Value
LRow = LRow + 1
End If
Next Rng
End Sub
Function TransposeIt(vData)
Dim LBound2 As Long
LBound2 = -1
If IsArray(vData) Then
' test for 1D array
On Error Resume Next
LBound2 = UBound(vData, 2)
On Error GoTo 0
With CreateObject("New:{8BD21D20-EC42-11CE-9E0D-00AA006002F3}")
.Column = vData
If LBound2 = -1 Then
' for 1D, returning the Column will transpose and return 2D array
TransposeIt = .Column
Else
' for 2D array just return the List
TransposeIt = .List
End If
End With
End If
End Function
Artik
jadgon
10-13-2019, 01:05 PM
Not working !
Artik
10-13-2019, 04:07 PM
What do you think my mechanic will answer if I tell him that my car is "not working"?
Artik
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.