汉代称宁县,唐属文德县,金、元属宣平县,明洪武二十六年(1393年)置万全左、右卫。清康熙三十二年(1693年)改万全右卫为万全县。据传,因这里“地势险要,屯兵甚多,防备周全,万无一失”而得名。
1937年8月,日军侵占张家口,9月4日成立日伪察南自治政府,辖察南10县,万全县属之。
1938年1月,日伪万全县公署在张家口成立。
1939年9月3日因与日伪蒙疆联合自治政府同治于张家口,万全县治所遂迁回万全城。
1941年4月1日万全与怀安县合并,称万安县,治所柴沟堡,隶属于蒙疆联合自治政府察南政厅。
1958年同怀安县合并,1961年复置万全县。
1983年,万全县政府驻地由万全城迁至孔家庄镇(1983年5月24日河北省人民政府批准,7月1日开设办公)。
1993年,万全县划归张家口市管辖。
1997年,万全县面积1161.5平方千米,人口20.9万,辖4个镇、7个乡:孔家庄镇、万全镇、洗马林镇、郭磊庄镇、宣平堡乡、北沙城乡、旧堡乡、安家堡乡、高庙堡乡、新河口乡、膳房堡乡。县政府驻孔家庄镇。
2000年,根据第五次人口普查数据,全县总人口207403人,其中:孔家庄镇59453人、万全镇17930人、洗马林镇10497人、郭磊庄镇23662人、膳房堡乡10996人、新河口乡8335人、宣平堡乡10365人、高庙堡乡13215人、旧堡乡11393人、安家堡乡23191人、北沙城乡18366人。
2002年底,万全县面积1161.5平方千米,人口20.36万。辖4个镇、7个乡,7个社区、172个行政村。县政府驻孔家庄镇。
2016年1月,国务院同意河北省张家口市撤销万全县,设立张家口市万全区。