diff --git a/Framework/API/src/MatrixWorkspace.cpp b/Framework/API/src/MatrixWorkspace.cpp
index f8982f0e92de66a78cb177ba73f1b6b5983a364f..b4523dfeeed4f810d77a9f83d536ac11bdee5ff3 100644
--- a/Framework/API/src/MatrixWorkspace.cpp
+++ b/Framework/API/src/MatrixWorkspace.cpp
@@ -1936,13 +1936,26 @@ MatrixWorkspace::findY(double value,
                        const std::pair<int64_t, int64_t> &idx) const {
   std::pair<int64_t, int64_t> out(-1, -1);
   const int64_t numHists = static_cast<int64_t>(this->getNumberHistograms());
-  for (int64_t i = idx.first; i < numHists; ++i) {
-    const auto &Y = this->y(i);
-    // cppcheck-suppress syntaxError
-    if (auto it = std::find(std::next(Y.begin(), idx.second), Y.end(), value);
-        it != Y.end()) {
-      out = {i, std::distance(Y.begin(), it)};
-      break;
+  if (std::isnan(value)) {
+    for (int64_t i = idx.first; i < numHists; ++i) {
+      const auto &Y = this->y(i);
+      // cppcheck-suppress syntaxError
+      if (auto it = std::find_if(std::next(Y.begin(), idx.second), Y.end(),
+                                 [](double v) { return std::isnan(v); });
+          it != Y.end()) {
+        out = {i, std::distance(Y.begin(), it)};
+        break;
+      }
+    }
+  } else {
+    for (int64_t i = idx.first; i < numHists; ++i) {
+      const auto &Y = this->y(i);
+      // cppcheck-suppress syntaxError
+      if (auto it = std::find(std::next(Y.begin(), idx.second), Y.end(), value);
+          it != Y.end()) {
+        out = {i, std::distance(Y.begin(), it)};
+        break;
+      }
     }
   }
   return out;
diff --git a/Framework/API/test/MatrixWorkspaceTest.h b/Framework/API/test/MatrixWorkspaceTest.h
index 73e0c895f621b8c9afba82ed2614c64a86ead2f2..f616f06788668414ece903fb53449167f9606d97 100644
--- a/Framework/API/test/MatrixWorkspaceTest.h
+++ b/Framework/API/test/MatrixWorkspaceTest.h
@@ -2059,6 +2059,10 @@ public:
     idx = ws->findY(2., {1, 1});
     TS_ASSERT_EQUALS(idx.first, 1);
     TS_ASSERT_EQUALS(idx.second, 1);
+    ws->mutableY(1) = NAN;
+    idx = ws->findY(NAN, {0, 0});
+    TS_ASSERT_EQUALS(idx.first,1);
+    TS_ASSERT_EQUALS(idx.second,0);
   }
 
 private: