宋太平興國七年(982)建火山軍,治平四年(1067)置火山縣,故治在今城關東南35千米舊縣鎮。熙寧四年(1071)廢火山縣。金貞元元年(1153)置河曲縣。取“河千里一曲”之義名縣。據《讀史方輿紀要》,縣城西瀕黃河,恰當河之彎曲處,因名河曲。
金大定二十二年(1182)升火山軍為火山州,縣屬之。大定末年改火山州為睲州,隸河東北路。蒙古至元二年(1265)廢河曲縣及睲州。明洪武二年(1369)復置河曲縣,六年廢,十三年再置,屬太原府。清雍正二年(1724)改屬保德州。乾隆二十七年(1762)縣徙今治。民國初年屬雁門道,道廢后直屬省。
1949年屬興縣專區。1952年屬忻縣專區。1958年偏關縣及保德縣之一部并入,屬晉北專區。1960年偏關、保德2縣析出。1961年復屬忻縣專區。1967年屬忻縣地區。1983年屬忻州地區。2000年屬地級忻州市。
1997年,河曲縣轄城關鎮、樓子營鎮、劉家塔鎮、巡鎮鎮、樹兒梁鄉、南墕鄉、寺墕鄉、五花城鄉、鹿固鄉、新窯鄉、舊縣鄉、葛真龍鄉、沙坪鄉、社梁鄉、紅崖峁鄉、土溝鄉、單寨鄉、前川鄉、陰塔鄉、沙泉鄉、趙家溝鄉。縣政府駐城關鎮。
2000年第五次人口普查,河曲縣總人口138811人,其中:城關鎮39052人,樓子營鎮9605人,劉家塔鎮7806人,巡鎮鎮14089人,樹兒粱鄉5613人,五花城鄉4067人,鹿固鄉4160人,寺也鄉4131人,南也鄉2865人,單寨鄉3287人,土溝鄉4078人,前川鄉3423人,紅崖峁鄉2336人,舊縣鄉8133人,抄坪鄉3712人,新窯鄉4973人,社梁鄉2489人,葛真龍鄉2747人,沙泉鄉5541人,陰塔鄉4128人,趙家溝鄉2576人。
2001年區劃調整后,全縣轄4個鎮、9個鄉:文筆鎮、樓子營鎮、劉家塔鎮、巡鎮、鹿固鄉、前川鄉、單寨鄉、土溝鄉、舊縣鄉、沙坪鄉、社梁鄉、沙泉鄉、趙家溝鄉。縣政府駐文筆鎮。