- 締切済み
エクセル セルの表示形式「文字列」だけを抽出したい
エクセル2007を使用しています。 A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 この「文字列」のセルだけを抽出したいのです。 例えば、関数などを利用して、B列に表示するなど。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Prome_Lin
- ベストアンサー率42% (201/470)
質問者の主旨とは異なるので、無視していただいて結構です。 「VBScript」による回答ですので、「Windows限定」です。 このプログラムの特徴は、プログラムファイルに目的のエクセルファイル(「xlsx」ファイル)を1つだけ、ドラッグ&ドロップすると、列「A」に関して、「文字列」に設定されていれば、セルの背景色を「赤」、「数値」に設定されていれば、セルの背景色を「黄」に設定して、上書き保存します。 以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存します。 「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。 できたプログラムファイル(「~.vbs」ファイル)に、これから処理したいエクセルファイル(必ず拡張子が「xlsx」ファイル)、1つだけ、ドロップ&ドロップすると、結果が出ています。 最後に「Finished!」と表示しますので、「OK」を押して、終了してください。 Option Explicit Dim bk, ex, i, sh, so, wa Set so = CreateObject("Scripting.FileSystemObject") Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "xlsx" Then MsgBox("ドラッグ&ドロップできるのは、xlsxファイル1つだけです") WScript.Arguments End If Set ex = CreateObject("Excel.Application") ex.Application.DisplayAlerts = False ex.Visible = False Set bk = ex.Workbooks.Open(wa(0)) Set sh = bk.Worksheets(1) For i = 1 to sh.Cells(sh.Rows.Count, 1).End(-4162).Row If sh.Cells(i, 1).NumberFormatLocal = "@" Then sh.Cells(i, 1).Interior.ColorIndex = 3 End If If sh.Cells(i, 1).NumberFormatLocal = "0_ " Then sh.Cells(i, 1).Interior.ColorIndex = 6 End If Next bk.Save bk.Close ex.Quit Set sh = Nothing Set bk = Nothing Set ex = Nothing Set wa = Nothing Set so = Nothing MsgBox("Finished!") 簡単な説明です。 Option Explicit 「厳密に」というような意味ですが、気にしないでください。 Set so = CreateObject("Scripting.FileSystemObject") ファイルやフォルダを扱えるようにしています。 Set wa = WScript.Arguments If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "xlsx" Then MsgBox("ドラッグ&ドロップできるのは、xlsxファイル1つだけです") WScript.Arguments End If ファイルがドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされれば、それが、複数ではないか、拡張子が「xlsx」以外ではないか調べ、異なれば、メッセージを表示してプログラムそのものを終了してしまいます。 Set ex = CreateObject("Excel.Application") エクセルを扱えるようにしています。 ex.Application.DisplayAlerts = False ex.Visible = False 「上書きしますか」などと聞いてこないようにし、また、エクセルそのものを表示しません。 Set bk = ex.Workbooks.Open(wa(0)) Set sh = bk.Worksheets(1) ドラッグ&ドロップされたファイルを開いて、一番左端のシートを「sh」にセット。 For i = 1 to sh.Cells(sh.Rows.Count, 1).End(-4162).Row 列「A」について、最終行まで処理。 If sh.Cells(i, 1).NumberFormatLocal = "@" Then sh.Cells(i, 1).Interior.ColorIndex = 3 End If 「文字列」の設定なら、そのセルの背景色を「赤」にします。 If sh.Cells(i, 1).NumberFormatLocal = "0_ " Then sh.Cells(i, 1).Interior.ColorIndex = 6 End If 「数値」の設定なら、そのセルの背景色を「黄」にします。 Next を、繰り返しています。 bk.Save bk.Close ex.Quit 上書き保存し、ファイルを閉じ、エクセルそのものを終了しています。 Set sh = Nothing Set bk = Nothing Set ex = Nothing Set wa = Nothing Set so = Nothing MsgBox("Finished!") あとは、終了処理で、最後に「Finished!」と表示しています。
- imogasi
- ベストアンサー率27% (4737/17069)
質問者は#1のご回答に対し、CELL関数というものを認識したことがあるのか? 無くて反応しているようにみうけるが。間違いか? ーーー 面倒な分野で、小生の知識経験も中途半端だが、 VBAだが、標準モジュールに Sub test01() For i = 1 To 10 Cells(i, 2) = Cells(i, 1).NumberFormatLocal Next i End Sub を実行すると A列のデータの表示形式に対し 1 0;"▲ "0 2,345 ##,### ¥,2,345,678 ¥,##,##0 12 G/標準 asd G/標準 123 G/標準 1903/5/18 yyyy/m/d 1.E+01 0.00E+00 xsd分類 @"分""類" (空白で未設定) G/標準 のような内容がB列に返ってくる。 ーー 文字列の表示形式の注釈にも注意。(文字列は数値も文字列として扱い・・・) この中で、質問者が、文字列といっているものは、どれなのかを 考えてみることになろう。 知らないからこういう安易な要求が出るのだろうが、非常に複雑 で、この部分に精通してないと答えられないように思う。後シコシコとはんつき判別のプログラムを組めるかどうか。 データタイプというものがセルごとにVBAで捉まえられるので、それを使えるかな??。 ーー なおエクセルの表示形式は、NumberFormatといい、 Numberが入っているように、ほとんど 数に対しての見てくれの表現のバリエーションのようだ。 文字列の表示形式のバリエーションはないに等しい。文字列を挟み込むとか 追加しかない。
お礼
ご回答ありがとうございます。
- bunjii
- ベストアンサー率43% (3589/8249)
>A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 >この「文字列」のセルだけを抽出したいのです。 >例えば、関数などを利用して、B列に表示するなど。 組み込み関数のCELLでは「標準」と「文字列」を区別できません。 「数値」と「文字列」または「標準」を区別することができます。 =CELL("format",A1) 「標準」と「文字列」は"G"が返ります。 「数値」や「通貨」、「会計」等は"F0-"が返ります。 マクロで処理すれば可能と思いますが私はマクロが不得手なので他の回答者から投稿が有れば参考にされると良いでしょう。
お礼
度々のご回答ありがとうございます。
- msMike
- ベストアンサー率20% (364/1804)
=IF(CELL("type",A1)="L",A1,"")
お礼
表示形式が「文字列」のセルだけを抽出したいのです。 セルに入力された文字を抽出するのではないのです。 つまり、セルの表示形式が「標準」「数値」の場合は抽出しないのです。 よろしくお願いします。
お礼
ご回答ありがとうございます。