- ベストアンサー
Lotus1-2-3のマクロ(スクリプト?)について教えて下さい
最近やっとLotus1-2-3で簡単な表を作ることが出来るようになりました。 その1つとして見積用の明細表を作成しており、先にいくつか明細欄があって数量を入れれば金額を表示する形の表としています。 明細1 1個 300 300 明細2 3個 500 1500 明細3 0個 400 0 ※ 明細4 1個 100 100 明細5 ... その中で数量の無い金額0の項目※の行を非表示にしたいと考えているのですが、どうしても上手く出来ません。 現在は1行1行を選択して、非表示にしているのですが行数が結構多く手間がかかって効率が悪く、この作業をマクロ化したいと考えているのですが、やり方がわかりません。 書店に行ってもLotusに関する書籍が極端に少なく、求める資料が無いのが現状です。 考え方だけでも結構ですので、どうかご教授をお願い致します。何卒よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 失礼しました。行の内容でなく、行そのもの非表示という事ですね。 この場合は、excelやopenofiiceでもマクロあるいはスクリプトが 必要ですね。 123の場合は、マクロですと HIDE-COLUMNS と HIDE-SHEETS は あるのですが、HIDE-ROWS というのがないので、スクリプトで やるしかないようです。 osakanamedakaさんの考えで良いと思います。 osakanamedakaさん、はるか昔マクロは組んだことがあるのですが、 123のスクリプトは組んだ事がなくて、参考になりました。 一応、数値でセルの内容を比較して、その行を非表示にする スクリプトに変えてみました。 ================= 隠す場合 ================================ Sub kakusu Dim NowCell ,ARowRange As Range Dim i As Long For i = 1 To 20 ' 20はデータのある行、以下のCはゼロか判定する列 Set NowCell = CurrentDocument.Ranges( "C"+Cstr(i)) Set ARowRange =CurrentDocument.Ranges("A:A"+Cstr(i)+"..A:IV"+Cstr(i)) If (NowCell.CellValue = 0) Then ARowRange.HideRows Next End Sub ================= 戻す場合 ================================ Sub modosu Dim ARowRange As Range Dim i As Long For i = 1 To 20 ' 20はデータのある行、以下のCはゼロか判定する列 Set ARowRange =CurrentDocument.Ranges("A:A"+Cstr(i)+"..A:IV"+Cstr(i)) ARowRange.UnhideRows Next End Sub ==========================================================
その他の回答 (3)
編集 スクリプト記録開始 行を非表示えらぶ。 停止ボタンを押す。 これで、 行を消す コマンド名がわかります。 これを応用すれば、 まとめて非表示というのはできるとおもいます。 イベントで消すと、見たいときにこまるでしょうから ボタンで 表示・非表示にできるようにするといいかもしれないですね。 ボタン押す 再計算関数を呼ぶ → forループ → 0 を探す → あれば消す。 でいいかなぁ とおもったりします。 ・使いにくいし ・バージョンアップもないし ・付属のヘルプは まとまりがなくわからないし とかいろいろで excelやopenofficeのほうがいいかなぁと思いますよ ↓↓↓を試すのは新規シートでコード変更してくださいね。 既存のがぐちゃぐちゃになると困るでしょうから Sub a Dim NowCellRange ,ARowRange As Range Dim i As Long For i = 1 To 700 ' 6554行まで? 65535には Set NowCellRange = CurrentDocument.Ranges( "A"+Cstr(i)+"1..A"+Cstr(i)) Set ARowRange =CurrentDocument.Ranges("A:A"+Cstr(i)+"..A:IV"+Cstr(i)) ' 計算結果で比較、 空白行をどうするかでかわるので 細かい処理が必要 ' If (Strcompare(NowCellRange .CellValue , "0")=0) Then ARowRange.HideRows ' 文字列として比較で 隠すとき If (Strcompare(NowCellRange .Contents , "0")=0) Then ARowRange.HideRows ' 元に戻すとき ' If (Strcompare(NowCellRange .Contents , "0")=0) Then ARowRange. UnhideRows Next End Sub
お礼
返事が遅くなりまして大変申し訳ありませんでした。 早速試させていただきました。 まさに求めていた処理が出来ました。 本当に有難うございました。
- 245689731
- ベストアンサー率22% (76/341)
んー 一応DOS時代からの123愛用者です。現2000 バージョンが判りませんが行の非表示が出来るというので97程度以後ですかねー?R5Jは出来ないので,,,, で操作ですが、個人的には、DOS版の互換メニューでする方が好きなので。以下を参照 __A_____B___C_____D 1_明細____個数__単価____小計 2_明細1___1個__300___300 といったふうに列に名前を付けます。_は文字がくっつくので分離記号のつもりです。 A列1行目から順番に入っていることが前提に書きます。 A1からD1をコピーします。 AA1に貼り付け次にAA5に同様貼り付け 以下のキー操作をしてください。それで0個が入っていない行が抽出されます。 AB2に「+B2<>"0個"」を入力、そのままでは「1」と表示されますが気にせずに於いて下さい。 次のキー操作は、/DQIA1..D1000エンター(1000行あるとして)適宜自分のデータ範囲に合わせてください。 CAA1..AD2エンター 0「オー」AA5..AD1005(1000行あるとして)エンターE でAA6からAD1005までに0個以外の該当行が抽出されますので楽かと思います。 R5Jぐらいまでのマクロなら何とかなってたんですがスクリプトになってからはお手上げ状態です。 お望みの方法ではないでしょうがお役に立てれば嬉しいです
お礼
早速のご回答、本当に有難うございました。 質問の内容が悪く、返答にお困りになられただろう事、反省しております。 ちなみに、バージョンは2001です。 処理用に別セルを利用するという事ですね。 これからの表作りにこの考え方を生かしたいと思います。 改めて有難うございました。
- fire--
- ベストアンサー率49% (146/293)
123は軽くて良いのですが、基本的な考え方として、 文書として整える機能はあまり持たないように なっているようです。例えばセル内の改行ができません。 0だと表示しないというのは、excelだとユーザー定義書式でできるの ですが、123にはその考えはありません。 ですから、もしどうしてもやるのなら、データを入力するシートの 他に表示用のシートを作って、そこに@if関数でコピーするように するしかないと思います。 @if(a1=0;"";a1)というような感じです。 @if(条件;条件成立の場合;条件不成立の場合) 123とは違ったexcel代替品を使うというのも手です。 以下openofficeは、完全に同じではないですが、 123よりはずっとexcelに近く、無料です。 http://ja.openoffice.org/
お礼
ご回答に加え、ソフトのご紹介も頂き有難うございました。 ご紹介頂いたopenofficeを少し試用させて頂きましたが、結構使いやすそうで、ただ今いろいろと格闘中です。有難うございました。 ただ、今回Lotusでの質問の仕方が悪く再度補足させて下さい。 明細 個数 単価 金額 明細1 1個 300 300 明細2 3個 500 1500 明細3 0個 400 0 ※ 明細4 1個 100 100 明細5 ... ↓ 明細 個数 単価 金額 明細1 1個 300 300 明細2 3個 500 1500 明細4 1個 100 100 明細5 ... という風に、個数の無いデータを行丸ごとを非表示にしたいと思い、何とか自動化できないものかと思案しております。 もし、他に手法をご存知でしたら何卒ご教授をお願い致します。
お礼
再度のご教授本当に有難うございました。 非表示・表示のいずれも問題なく動作しました。 求めていた処理が可能となり、その他の表作りの応用にも利用できそうです。大変勉強になりました。 また、この場をお借りしましてご教授を頂きました皆様方に心より感謝申し上げます。 本当に有難うございました。