Here you go. I have defined a new command \bccbar which takes an additional argument
\bccbar[text = B]{<end value>}{<Starting value>}
Code:
\documentclass{article}
\usepackage{bchart}
%-------------------------------------------
% Bars:
\newcommand{\bccbar}[3][]{
% Set defaults:
\renewcommand{\bcbarcolor}{blue!20}
\renewcommand{\bcbartext}{}
\renewcommand{\bcbarlabel}{}
\renewcommand{\bcbarvalue}{#2\bcunit}
\renewcommand{\bcplainbar}{false}
% Read parameters:
\setkeys{bcbar}{#1}
% Draw bar:
\fill[color=\bcbarcolor,fill,draw] ([xshift=#3*(\bcwidth/\bcrange)]0,\bcpos) rectangle ([xshift=#3*(\bcwidth/\bcrange)]$#2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-5mm)$);
\draw ([xshift=#3*(\bcwidth/\bcrange)]0,\bcpos) rectangle ([xshift=#3*(\bcwidth/\bcrange)]$#2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-5mm)$);
\ifthenelse{\equal{\bcplainbar}{true}}{}{
% Write value:
\node[anchor=west] at ([xshift=#3*(\bcwidth/\bcrange)]$#2-\bcmin*(\bcwidth/\bcrange,0) + (0,\bcpos-2.5mm)$) {\bcfontstyle\bcbarvalue};
}
% Write text:
\node[anchor=west] at ([xshift=#3*(\bcwidth/\bcrange)]0,\bcpos-2.5mm) {\bcfontstyle\bcbartext};
% Write label:
\node[anchor=east] at ([xshift=#3*(\bcwidth/\bcrange)]0,\bcpos-2.5mm) {\bcfontstyle\bcbarlabel};
% Move vertical position downward:
\addtolength{\bcpos}{-5mm}
}%
%-------------------------------------------
\begin{document}
\begin{bchart}[max = 100, step = 10]
\bccbar[text = A]{45}{20}
\smallskip
\bccbar[text = B]{26}{40}
\smallskip
\bccbar[text = C]{31}{0}
\smallskip
\bcbar[text = D]{31}
\end{bchart}
\end{document}

bchartthey always start fromx=0unless you redefinebchartenvironment. Are you interested inpgfplotssolution? – Apr 11 '15 at 00:34