设函数 $f(x)=\left\{\begin{array}{ll}a-3^{x}, & x \leq 0 \\ 2 x+1, & x>0\end{array}\right.$, 若函数 $f(x)$ 有最小值, 则实数 $a$ 的取值范围是 ( )
D

【详解】

当 $x>0$ 时, $f(x)=2 x+1$ 在 $(0,+\infty)$ 上单调递增, 则值域为 $(1,+\infty)$;

当 $x \leq 0$ 时, $f(x)=a-3^{x}$ 在 $(-\infty, 0)$ 上单调递减, 则值域为 $[a-1, a)$;

因为函数 $f(x)=\left\{\begin{array}{ll}a-3^{x}, & x \leq 0 \\ 2 x+1, & x>0\end{array}\right.$,

所以函数 $f(x)$ 有最小值时, 需满足 $a-1 \leq 1$, 即 $a \leq 2$,

所以实数 $a$ 的取值范围是 $(-\infty, 2]$,

故选: D

【点睛】

该题考查的是有关函数的问题, 涉及到的知识点有指数函数的值域, 以及根据分段函数有最值求参数的取值范围，属于简单题目.