「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:4219
現在:5


空白セルを検索する

ページOpenOffice.org FAQの登録ページ
投稿者しばた
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2006-12-18 14:09:21 (月)
OSAll
依存するページfaq/3/19 Issue #44688 #49380 3.4で修正予定
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

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 (水))

次のような表組みの空白に「―」を入力したいと思い、
その機能をヘルプで見つけたのですが、機能しなかったため質問しました。

ABC100
DEF
GHI0


ISBLANK関数を試してみたら空白セルでTRUEを返したので、
マクロを使えば実現できそうですが、
自分はマクロの組み方がわかりませんので、簡単にはできません。

???

きもとまさや (2006-12-20 16:19:30 (水))

タイトルは「空白セルを検索する」なので、つまり巨大な表組みがあって、面倒だから「空白」を「―」を一括置換されたいということでしょうか?

#大した数でなければもう手作業でやった方が早いですし。

catchさんが書かれているISBLANK()を使うのでしたら、

ABC100
DEF
CHI0

の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でわりと簡単にできそうですね。勉強になりました。
仮に

ABC100=IF(ISBLANK(B1);"―";B1)
DEF=IF(ISBLANK(B2);"―";B2)
CHI0=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/contenttype

Sub 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セルから入力された上記のデータは

ABC100
DEF
CHI0

になります。

ちなみに

  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 WikiOOobbs/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を保存したサンプルを用意しました。
filefaq4_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

お名前:
題名:


添付ファイル: filefaq4_154_01.ods 1518件 [詳細] filefaq4-154sample.ods 744件 [詳細]