ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Deleting evey nth column (https://www.excelbanter.com/excel-programming/361184-deleting-evey-nth-column.html)

Darin Kramer

Deleting evey nth column
 
HI there,

A tough one I think...

I would like to keep column A,B,C.
Then delete Column D,E,F, keep column G
Then delete column h,i,j keep column K
Then delete column l,m,n keep column O, etc etc till I run out of
columns.

I was previously helped with a SIMILAR problem (the movement of the
number of columns was different and the VB below worked for me, however
I dont know how to change it to achieve what I want to achieve above.
Any ideas????

Sub go_delete()
Dim tmp As Integer
Dim tmp2 As Integer
Dim tmp_address As String, row_count As Single

With ActiveSheet.UsedRange
tmp = Fix((.Columns.Count - 5) / 4)
If (.Columns.Count - 5) Mod 4 0 Then
tmp = tmp + 1
End If
tmp_address = .Address(False, False)
row_count = .Rows.Count
End With
With ActiveSheet.Range(tmp_address)
With .Offset(0, 5).Resize(row_count, .Columns.Count - 5)
For tmp2 = tmp To 1 Step -1
With .Columns(4 * tmp2 - 3)
.Resize(row_count, 2).EntireColumn.Delete
End With
Next
End With
End With
End Sub




*** Sent via Developersdex http://www.developersdex.com ***

Bob Phillips[_14_]

Deleting evey nth column
 
Sub go_delete()
Dim tmp As Range
Dim i As Long

With ActiveSheet
Set tmp = .Range("D1:F1")
For i = 8 To .Columns.Count - 2
Set tmp = Union(.Cells(1, i).Resize(, 2), tmp)
Next i
End With

tmp.EntireColumn.Delete

End Sub



--
HTH

Bob Phillips

(remove xxx from email address if mailing direct)

"Darin Kramer" wrote in message
...
HI there,

A tough one I think...

I would like to keep column A,B,C.
Then delete Column D,E,F, keep column G
Then delete column h,i,j keep column K
Then delete column l,m,n keep column O, etc etc till I run out of
columns.

I was previously helped with a SIMILAR problem (the movement of the
number of columns was different and the VB below worked for me, however
I dont know how to change it to achieve what I want to achieve above.
Any ideas????

Sub go_delete()
Dim tmp As Integer
Dim tmp2 As Integer
Dim tmp_address As String, row_count As Single

With ActiveSheet.UsedRange
tmp = Fix((.Columns.Count - 5) / 4)
If (.Columns.Count - 5) Mod 4 0 Then
tmp = tmp + 1
End If
tmp_address = .Address(False, False)
row_count = .Rows.Count
End With
With ActiveSheet.Range(tmp_address)
With .Offset(0, 5).Resize(row_count, .Columns.Count - 5)
For tmp2 = tmp To 1 Step -1
With .Columns(4 * tmp2 - 3)
.Resize(row_count, 2).EntireColumn.Delete
End With
Next
End With
End With
End Sub




*** Sent via Developersdex http://www.developersdex.com ***




Darin Kramer

Deleting evey nth column
 
Thanks Bob - unfortunately it doesnt work...
I changed my range from d1:f1 to say d1:ax1, but all it did was delete
everything except for column a,b, and c... am I doing something wrong?
do I need to change the i...?

Regards

D



*** Sent via Developersdex http://www.developersdex.com ***

Bob Phillips[_14_]

Deleting evey nth column
 
The D1:F1 was just to initialise the tmp range.

You should use

Sub go_delete()
Dim tmp As Range
Dim i As Long

With ActiveSheet
Set tmp = .Range("D1:F1")
For i = 8 To .Range("AX1").Column - 2
Set tmp = Union(.Cells(1, i).Resize(, 2), tmp)
Next i
End With

tmp.EntireColumn.Delete

End Sub



--
HTH

Bob Phillips

(remove xxx from email address if mailing direct)

"Darin Kramer" wrote in message
...
Thanks Bob - unfortunately it doesnt work...
I changed my range from d1:f1 to say d1:ax1, but all it did was delete
everything except for column a,b, and c... am I doing something wrong?
do I need to change the i...?

Regards

D



*** Sent via Developersdex http://www.developersdex.com ***




Ikaabod[_44_]

Deleting evey nth column
 

If it's always those columns this should work
Sub go_delete(
Range("A1").Selec
Dim iColumn As Intege
iColumn =
D
Range(Cells(1, iColumn), Cells(1, iColumn
2).Address).EntireColumn.Delet
iColumn = iColumn +
Loop Until iColumn = 25
End Su

-Thanks Bob - unfortunately it doesnt work..
I changed my range from d1:f1 to say d1:ax1, but all it did was delet
everything except for column a,b, and c... am I doing something wrong
do I need to change the i...

Regard





--
Ikaabo
-----------------------------------------------------------------------
Ikaabod's Profile: http://www.excelforum.com/member.php...fo&userid=3337
View this thread: http://www.excelforum.com/showthread.php?threadid=54106


Darin Kramer

Deleting evey nth column
 
Bob I guess my explanation of the problem wasnt clear enought, because I
know you would easily be able to solve it :) (and have done so in the
past!)

Basically Macro is still not working it works for the first instance, ie
it correctly deletes columns D,E and F (and now G is next to C), but
thats all it does, from H to AI nothing happens. (Does it matter that
H,L,P, etc are blank..?)
I need to delete H,I,J
Keep K
Delete L,M,N
Keep O
Delete P,Q,r
Keep S
etc

Appreciate your time and effort


*** Sent via Developersdex http://www.developersdex.com ***

Barry-Jon

Deleting evey nth column
 
Try this and let me know how you get on. It's flexible in that you can
alter the number of columns to delete and the number of columns to
skip. There is some redundancy in looping till 256 but it's still
quick and I am sure you could easily optimise it.

Sub Test()

DeleteNthColumns ThisWorkbook.Worksheets(1), 4, 3, 1

End Sub

Sub DeleteNthColumns(sht As Excel.Worksheet, lngFirstColumnToDelete As
Long, lngColumnsToDelete As Long, lngColumnsToKeep As Long)

Dim lngColCurrent As Long
Dim lngDeleteCounter As Long

'starting on the first column to delete
lngColCurrent = lngFirstColumnToDelete

Do

For lngDeleteCounter = 1 To lngColumnsToDelete

'delete as many columns as specified
sht.Columns(lngColCurrent).Delete

Next lngDeleteCounter

'then skip as many columns as specified
lngColCurrent = lngColCurrent + lngColumnsToKeep

Loop While lngColCurrent <= 256 'only 256 columns in an excel sheet

End Sub


Bob Phillips[_14_]

Deleting evey nth column
 
No, my bad, you explained it fine

Try this alternative

Sub go_delete()
Dim tmp As Range
Dim i As Long

With ActiveSheet
Set tmp = .Range("D1:F1")
For i = 8 To .Range("AX1").Column - 2 Step 4
Set tmp = Union(.Cells(1, i).Resize(, 3), tmp)
Next i
End With

tmp.EntireColumn.Delete

End Sub



--
HTH

Bob Phillips

(remove xxx from email address if mailing direct)

"Darin Kramer" wrote in message
...
Bob I guess my explanation of the problem wasnt clear enought, because I
know you would easily be able to solve it :) (and have done so in the
past!)

Basically Macro is still not working it works for the first instance, ie
it correctly deletes columns D,E and F (and now G is next to C), but
thats all it does, from H to AI nothing happens. (Does it matter that
H,L,P, etc are blank..?)
I need to delete H,I,J
Keep K
Delete L,M,N
Keep O
Delete P,Q,r
Keep S
etc

Appreciate your time and effort


*** Sent via Developersdex http://www.developersdex.com ***




Darin Kramer

Deleting evey nth column
 

Thanks Barry-Jon,

Are there parts that I need to get to customise to get it to run
currently, or should it just run? (after inserting it, and running it,
Excel thought for a long while, but to be honest, I cant see the
result... :) )


*** Sent via Developersdex http://www.developersdex.com ***

Darin Kramer

Deleting evey nth column
 


Thanks! This one works!!!

*** Sent via Developersdex http://www.developersdex.com ***

Barry-Jon

Deleting evey nth column
 
Have you got it working then? It should just work

I created a sub "DeleteNthColumns" that takes in paremeters of the
worksheet you want to perform the action on, the first column number to
delete (D=4), the number of columns to delete and the number of columns
to keep. The "Test" sub calls that procedure on the first worksheet
starting at column d, deleting three columns and keeping one.



All times are GMT +1. The time now is 11:58 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com