We help IT Professionals succeed at work.

Excel: Copy Column to another macro

I have a long macro I'm running for a user here at work. I'm wanting to insert in the middle of it a macro, a part that copies the entire column of D over to Q.

Essentially I just want D to = Q.

Problem is with a simple formula such as =D2 leaves zero's if there is nothing there in D that goes on forever.

So I see a macro as a better solution, also because the user can just hit run on the macro and change it all over all at once besides running the macro, then making sure the formulas work.

Just so you an see my already made macro I'll attach it. It's current functions have nothing to do with this one. If I can just insert it in there, that would be great rather than worry about two macros.
Watch Question

Analyst Assistant
If it's as simple as that.
Range("D:D").Copy Range("Q:Q")

Open in new window

By the way, you could seriously shorten the Select Case in the code by grouping values.


Worked great! Thank you so much.

-I know there probably a better way, I've been Frankenstein'ing it with pieces I've been gathering pretty much entirely by the help by the expert exchange community. (Thank god for expert exchange) I have no idea how any of this works, I'm trying to learn however, specially after building this, I've been looking at each piece and trying to learn it.

I'm actually just a network guy, trying to learn this for a user, since I'm the only IT guy up here, it lands on me haha.
NorieAnalyst Assistant
Do you mean a better way to do the copying or the Select Case thing?

If it's the copying the only thing I can think of would be to restrict the no of rows so you only copy the data.

If it's the Select case thing I was thinking of something like this where you group all the old values that 'share' the same new value together.
        Select Case c.Value
            Case "B", "BAP", "BBA", "BBR", "BC", "BCP", "BI", "BNH", "BNP", "BS", _
                 "C", "CB", "CBR", "CC", "CCP", "CCX", "CIC", "CNP", _
                 "DA", "DB", "DBA", "DBD", "DBE", "DBF", "DBG", "DBI", "DBJ", "DBK", _
                 "DBL", "DBM", "DBN", "DBQ", "DBV", "DBW", "DBX"    '...add rest of old values

                c.Value = 3         'New value

            Case "BC1", "E9", "E91", "EB9"             'Old values...
                c.Value = 2     'New value

            Case "HSP"              'Old value
                c.Value = 7         'New value

            Case "M", "M1", "MB", "MB1"                'Old value
                c.Value = 1     'New value

            Case "P", "PBR                'Old value"
                c.Value = 6         'New value

            Case "W", "WB", "WBR"                'Old value
                c.Value = 5     'New value

            Case "X", "XB", "XBB"    'Old value
                c.Value = 4         'New value

            Case Else               'Do nothing
        End Select

Open in new window

I kind of got sore fingers so this isn't finished, hopefully it shows what I mean.


Yeh I was talking about the Select case thing, (the copy worked great)

I see what your doing, I'll give it a try when I get a moment, thanks for the tip!
NorieAnalyst Assistant

Do you have a list of all these old values and their new values?

If you did, or could create/get one, then you could get rid of the Select Case altogether.

What you would use in it's place would be a VLOOKUP which you can use in the code via Application.WorksheetFunction.


Yeh I was given copy of 6 pages of medical codes along with the numbers associated with each one. What I did was, as you can see,  was I just typed in each one for each column.

Essentially they have a program that spits out the raw data onto excel, but we recently merged with another company and they require it to be in a completely different format. (There's no way to change the initial raw format.) Hence why I have to do all these changes via macros.
As for that giant Select Case block, "better ways" could include matched-index arrays with one having the original values and the other matching target values for each, a collection of structs doing pretty much the same thing (though you could save on memory there by having objects in the collection contain more than one value for the same target), or reading directly from a worksheet or other data source. You'd then loop over stuff or choose by index or whatever suits the types you're using.

Whether those are actually "better", though, depends entirely on the goal and the context. Looping through a collection could be much slower, especially if you end up nesting loop within loop and not having any way to exit once you've found a match. However, they also allow much more flexibility in the matching parameters, up to and possibly including (depending on how you go about it) regular expressions.


Thanks for the help!

Explore More ContentExplore courses, solutions, and other research materials related to this topic.