Update 1:
Because my question is not clear, so I post second example

Because row
Assuming that you want a solution with more than 3 columns, this formula will return you the right header.
I assume that you data starts in row 2, column B - and row 1 contains the column headers.
Use this formula in B1 and copy it down:
=IF(COUNTA($B2:$D2)=0,"",INDEX($B$1:$D$1,MATCH(FALSE,INDEX(ISBLANK($B2:$D2),0),0)))
If your data extends further than column D, simply change this in the formula.
I posted a formula in the comments above, you may not have seen it. This is it:
=IF(COUNTA($B2:$D2)=0,"",INDEX($B$1:$D$1,MATCH(TRUE,INDEX($B2:$D2<>"",0),0)))
that will get the header for the first instance of a populated cell - if you have numeric values and want to ignore zeroes change to
=IF(COUNTA($B2:$D2)=0,"",INDEX($B$1:$D$1,MATCH(TRUE,INDEX($B2:$D2>0,0),0)))
Either way the formula can be extended to as large a range as you need
.....and if you have 500 columns you could use IFERROR to shorten a little
=IFERROR(INDEX($B$1:$D$1,MATCH(TRUE,INDEX($B2:$D2>0,0),0)),"")
for a particular table which is relative small table with countable number of columns (i.e 3) try this
=IF(COUNTA(G8)>0,"Column 1",IF(COUNTA(H8)>0,"Column 2",IF(COUNTA(I8)>0,"Column 3",""))).
my question is what if you have table contain 20 or 100 columns?
I assume that when you say "column header" you really mean "row header".
Considering that the first cell (containing the text "Column Header") is at A1 this is the formula you have to introduce in cell A2:
=IF(B2>0, $B$1, IF(C2>0, $C$1, IF(D2>0, $D$1, "")))
Drag this formula down on as many rows as you need and it'll (hopefully) achieve what you want.