C#でExcelを使っていると、特定の文字列を検索したくなることありますよね。
今回書いたのは、Excelファイルと文字列を引数で渡すとセルのアドレスを文字列で返してくれる関数です。
ちなみにワークブックの中の1枚目のワークシートしか検索しません。(^-^;
でもなかなか便利。


using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

        public static string findCell(string fileName, string searchStr)
        {
            Application xlApp = null;
            Workbook wb = null;
            Worksheet ws = null;
            Range aRange = null;
            Range firstFind = null;
            string str = null;

            try
            {
                try
                {
                    xlApp = new Application();
                }
                catch
                {
                    throw new Exception(Properties.Resources.ExcelNeeded);
                }

                if (xlApp != null)
                {
                    //xlApp.Visible = true; //This code will show you Excel window.
                    wb = xlApp.Workbooks.Open(
                        fileName,  // オープンするExcelファイル名
                        Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
                        Type.Missing, // (省略可能)ReadOnly (True / False )
                        Type.Missing, // (省略可能)Format
                        // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
                        // 5:なし / 6:引数 Delimiterで指定された文字
                        Type.Missing, // (省略可能)Password
                        Type.Missing, // (省略可能)WriteResPassword
                        Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
                        Type.Missing, // (省略可能)Origin
                        Type.Missing, // (省略可能)Delimiter
                        Type.Missing, // (省略可能)Editable
                        Type.Missing, // (省略可能)Notify
                        Type.Missing, // (省略可能)Converter
                        Type.Missing, // (省略可能)AddToMru
                        Type.Missing, // (省略可能)Local
                        Type.Missing  // (省略可能)CorruptLoad
                        );
                    ws = (Worksheet)wb.Sheets[1];
                    aRange = ws.UsedRange;
                    firstFind = aRange.Find(searchStr,
                       Type.Missing, XlFindLookIn.xlValues, XlLookAt.xlPart,
                       XlSearchOrder.xlByRows, XlSearchDirection.xlNext, false,
                       Type.Missing, Type.Missing);
                    str = firstFind.get_Address(Type.Missing, Type.Missing,
                       XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (aRange != null)
                {
                    Marshal.ReleaseComObject(aRange);
                    aRange = null;
                }

                if (firstFind != null)
                {
                    Marshal.ReleaseComObject(firstFind);
                    firstFind = null;
                }

                if (ws != null)
                {
                    Marshal.ReleaseComObject(ws);
                    ws = null;
                }
                
                if (wb != null)
                {
                    wb.Close(true, Type.Missing, Type.Missing);
                    Marshal.ReleaseComObject(wb);
                    wb = null;
                }

                if (xlApp != null)
                {
                    xlApp.Quit();
                    Marshal.ReleaseComObject(xlApp);
                    xlApp = null;
                }

                System.GC.Collect();
            }
            return str;
        }

ちなみにExcelがないと動きません。
なお、作成にあたってたくさんのサイト様を参考にさせていただきました。