空白セルを検索する †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | しばた |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2006-12-18 14:09:21 (月) |
OS | All |
依存するページ | faq/3/19 Issue |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
faq/3/19を参考に^$で検索しても、空白セルがヒットしません。
正規表現にはチェックが入っています。
calcのヘルプに「^$ 空の段落が検索されます。」と書かれているので、
Writerと同様に検索できるかと思ったのです。
なお、Writerでは^$で空白行がヒットすることを確認しました。
あまり詳しくはないので †
M.Kamataki (2006-12-18 14:22:16 (月))
過去の質問や検索結果などの情報です。
faq/1/182
「SUMIF関数で空白セルを抽出」
faq/3/23
「オートフィルタの選択リストに自動的に「空白」を表示してほしい」
Issuesでは以下のようなものが...
「VLOOKUP and 0 value」
http://ja.openoffice.org/issues/show_bug.cgi?id=8088
「EmptyCell return for functions, like LOOKUP()」
http://ja.openoffice.org/issues/show_bug.cgi?id=32340
また、Excelにはこんな機能
「空白セルに一気に斜線を引く」
http://hamachan.fun.cx/excel/syasen.html
もあるようですね。
Calcは空白セルの扱いは苦手なようです。
なお、「段落」はセルには当てはまらない概念ですので、もともと「^$」では検索できません。
MLの情報 †
M.Kamataki (2006-12-18 16:52:11 (月))
Calcの空白セルに関する議論が過去メーリングリストで行われていました。こちらのリンクも書いておきます。
「OOoに欲しい機能」
http://search.luky.org/oo/ja-discuss.2003/msg04110.html
ページ下の「Follow-Ups:」のリンクをたどって読むと良いと思います。
ちなみにこの議論の中、Calcチームの皆さんのご尊顔を拝見できるCalcの隠しコマンド「=STARCALCTEAM()」の紹介があります。今も開発しているのはこの5人だけなのかしら。
Basicを利用した話題 †
M.Kamataki (2006-12-18 16:52:58 (月))
こんなのもあります。
「何も入力されていないセルの検索」
http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOobbs%2F101
ISBLANK関数 †
catch (2006-12-20 08:53:27 (水))
どのような使い方をしたいのか、よくわからないのですが。
セルが空白か判断するISBLANK関数というのも、ありましたよね。
Calcの場合、ほとんどが空白セルな訳で、それを検索すると大変なことになりそうな気がしなくもない。
やりたいこと †
しばた (2006-12-20 15:48:06 (水))
次のような表組みの空白に「―」を入力したいと思い、
その機能をヘルプで見つけたのですが、機能しなかったため質問しました。
ABC 100 DEF
GHI 0
ISBLANK関数を試してみたら空白セルでTRUEを返したので、
マクロを使えば実現できそうですが、
自分はマクロの組み方がわかりませんので、簡単にはできません。
??? †
きもとまさや (2006-12-20 16:19:30 (水))
タイトルは「空白セルを検索する」なので、つまり巨大な表組みがあって、面倒だから「空白」を「―」を一括置換されたいということでしょうか?#大した数でなければもう手作業でやった方が早いですし。
catchさんが書かれているISBLANK()を使うのでしたら、
ABC 100 DEF
CHI 0 の2列目はどこかのセルを参照してきているようなものでないと意味がありません。
実際はセルの内容が
ABC =A1 DEF =A2 CHI =A3 で(A2は空セル)あれば、
ABC =IF(ISBLANK(A1);"―";A1) DEF =IF(ISBLANK(A2);"―";A2) CHI =IF(ISBLANK(A3);"―";A3) とかすれば所望の結果になると思いますが、こうではないんですよねぇ?
大きな表組みのいろんな場所にある空白を置換したい †
しばた (2006-12-20 16:48:33 (水))
きもとまさやさん
そうです、いろんな場所に穴があいている巨大な表組みの空白セルを、
一括して―(あるいは何かの文字)に置き換えるという作業をしたいのです。
1列だったらISBLANKでわりと簡単にできそうですね。勉強になりました。
仮に
ABC 100 =IF(ISBLANK(B1);"―";B1) DEF =IF(ISBLANK(B2);"―";B2) CHI 0 =IF(ISBLANK(B3);"―";B3) としといてC列の値をコピーして貼ればいいですか?
ただ、
^$で空白セルがヒットしないのか? というのが今回の根本的な疑問です。
^$が使えれば今後もいろいろと応用できそうなので覚えたかったのです。
妙案。 †
きもとまさや (2006-12-20 17:18:10 (水))
オリジナルのシートがあるとします(シート名:Original)。
仮にシート・OriginalのA1からZ700が表組みの範囲とします(値は入力済み、空白セル多数)。
目的の表組みを完成させる為のシート・Sheet2を用意します。
Sheet2のA1〜Z700までを選択します。
その状態で、=IF(ISBLANK(Original.A1);"-";Original.A1)と入力してAlt+Enterで確定させます。
で、Sheet2のA1〜Z700までをまた別のシート(例えばSheet3)に形式を選択して貼り付け(数式のチェックをオフ)で実データが貼り付いて完成。
どうでしょ?(面倒ですが)
サンプルを添付しました(faq4-154sample.odsというヤツです)。
まぁ… †
きもとまさや (2006-12-20 17:20:00 (水))
ただ、 ^$で空白セルがヒットしないのか? というのが今回の根本的な疑問です。 ^$が使えれば今後もいろいろと応用できそうなので覚えたかったのです。
ですよねぇ。根本的には解決していませんが。はてさて。
空白セルを検索するのは †
catch (2006-12-20 17:22:04 (水))
空白セルを検索するのは、65000行全部を探し出すということになり、
表計算の使い方からは、はずれているような気がしなくもないですけど、どうなんでしょう(^o^
ISBLANK関数で数式を作り、その式をオートフィル(数式の入っているセルを選択して、右下の四角をダブルクリック)でコピーするのが、結果を得るための早道のように感じました。
当ページのご質問の関するIssue †
M.Kamataki (2006-12-29 15:58:15 (金))
以下のものがそのものずばりのIssueだと思います。
「Searching with regular expression ^$ does not find empty cells」
http://ja.openoffice.org/issues/show_bug.cgi?id=44688
開発陣の正式なコメントとしては、「空白セルの検索はパフォーマンスに影響」する。でも「いずれ修正したい」ということでしょうか。
マクロを利用した方法その1 †
M.Kamataki (2006-12-29 16:24:58 (金))
OOoBasic Wikiの情報を元に作成してみました。
マクロ名:EmptyCellDemo1
参照:http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOoBasic/Calc/contenttypeSub EmptyCellDemo1 Dim oDoc As Object, oSheet As Object, oCell As Object Dim nType As Long, nColumn AS Long, nRow AS Long oDoc = ThisComponent oSheet = oDoc.Sheets(0) For nColumn = 0 to 1 For nRow = 0 to 2 oCell = oSheet.getCellByPosition( nColumn, nRow ) nType = oCell.getType() If nType = com.sun.star.table.CellContentType.EMPTY Then With oCell .HoriJustify = com.sun.star.table.CellHoriJustify.RIGHT .String = "―" END With End If NEXT nRow NEXT nColumn End Subこのマクロ「EmptyCellDemo1」を実行すると、A1セルから入力された上記のデータは
ABC 100 DEF ― CHI 0 になります。
ちなみにFor nColumn = 0 to 1 For nRow = 0 to 2の部分を
For nColumn = 0 to 255 For nRow = 0 to 65535とすると、シート全体を指定したことになりますが、恐ろしく時間がかかります。それぞれを100にすると、わたしのPC(CPU 2.66GHz、メモリ 1GB)では1分くらいで処理できます。
見よう見まねで作成しているので、Basicに関するご質問はOOoBasicへお願いします。
マクロを利用した方法その2 †
M.Kamataki (2006-12-29 16:56:47 (金))
上記でわたしが「Basicを利用した話題」で書いたOOoBasic WikiのOOobbs/101の方法も試してみました。こちらの処理は早いのですが、セルに「―」を挿入する方法がわかりませんでした。一応作成したBasicは以下のようなものです。こちらは空白のセルの背景をグレイで描画します。
マクロ名:EmptyCellDemo2
参照:http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOobbs%2F101'--未入力&空白文字のセルを集めて返す Sub collectBlancRanges (oRanges) '-- (1) 空白文字以外の文字が入力されたセルを取得する oSearchDesc = oRanges.createSearchDescriptor oSearchDesc.SearchRegularExpression = true oSearchDesc.SearchString = "[^ \t\x000d\x000a\x3000]+" '-- スペース・タブ・CR・LF・全角スペース以外 oCharacterRanges = oRanges.findAll(oSearchDesc) If IsNull (oCharacterRanges) Then Exit Sub Endif '-- (2) (1)の反転領域を得る oRanges.removeRangeAddresses (oCharacterRanges.getRangeAddresses) End Sub '-- セル領域のコレクションを取得 Function getCellRangesByPosition (oSheet, startcol, startrow, endcol, endrow) As Object Dim oAddress As New com.sun.star.table.CellRangeAddress oAddress.Sheet = oSheet.getRangeAddress.Sheet oAddress.StartColumn = startcol oAddress.StartRow = startrow oAddress.EndColumn = endcol oAddress.EndRow = endrow '-- 重なった領域を得る getCellRangesByPosition = oSheet.queryIntersection (oAddress) End Function Sub EmptyCellDemo2 oSheet = ThisComponent.Sheets.getByName("表1") '-- セル領域のコレクションを取得 oRanges = getCellRangesByPosition (oSheet, 0, 0, 255, 65535) '-- セル領域の絞り込み 条件:空白セル collectBlancRanges (oRanges) '-- セル領域が得られなかったら終了 If oRanges.Count = 0 Then Exit Sub Endif '-- セル背景色を灰色に oRanges.CellBackColor = &HCCCCCC Exit Sub End Sub上記のBasicで
oRanges.CellBackColor = &HCCCCCCを
oRanges.String = "―"などとしてもエラーになります。
こちらも見よう見まねで作成している(こちらはセル領域を変更しただけ)ので、Basicに関するご質問はOOoBasicへお願いします。
なお、上記2つのBaiscを保存したサンプルを用意しました。
faq4_154_01.ods
3.4で修正予定に †
M.Kamataki (2010-09-07 17:47:02 (火))
上記で紹介したIssue #44688が以下と重複となっていました。さらにいかのIssueは3.4で修正予定となっています。「依存するページ」の情報を更新しておきます。
enable find and replace buttons when 'Search For' box is empty
http://ja.openoffice.org/issues/show_bug.cgi?id=49380