出産前後の痔にはご注意!

エクセルファイルが5メガのデータ容量となり、数字を入力するたびに数十秒待たされます。
データはエクセル関数を使った売値とか仕入れ値とかの計算表です。

何故か、商品数が何十倍もある別のファイルの方が軽快に動きますし、軽いです。
2007バージョン、ファイル形式はxlsxです。

軽量化するのに効果がある方法ないでしょうか?
よろしくお願いいたします。

質問者からの補足コメント

  • うーん・・・

    難しい計算式は使ってません。例えば、縦列に=SUM(A1:A10)とか 
    横列ごとに=I10*$J$1とか=K5-J5-K5*0.1-M5とか混合して使ってます。

    あと、空白をクリックしたり、列幅を触っただけで数十秒待たされます。

    形式は既に書いてますが、2007バージョン、ファイル形式はxlsxです。

      補足日時:2017/04/21 16:01
  • うれしい

    みなさんアドバイスありがとうございます!分かる範囲でやりました。
    横列をコピーして新規シートにペーストしていき、元のシートを削除しました。これでだいたいの列が今までの読み込み時間が半分以下になり軽快になりました。しかし、一部分の列だけが数字を入力後、2分も読み込みするなど遅い部分もありました。ここまでは、おおよそ軽快になるも何故かファイルが7MBと増えました。
    そこで保存ファイル形式を一旦、No7さんの言う通り古い形式で保存してから開き、通常で保存すれば2MBまでおとせて、2分読み込みしていた箇所も数秒まで抑えることができました。 
    結局、原因がいまいちわからないのですが。。 編集を繰り返すと余計なデータが残っていくでいいんでしょうか??

      補足日時:2017/04/21 19:41

このQ&Aに関連する最新のQ&A

A 回答 (8件)

あー編集を繰り返すとゴミが溜まるのかそんなことありますね。



そのファイルから新ファイルに
シート1枚ずつ全コピーしたらゴミを取り除けたりします。
確実な保証は私にはできませんが。

うまくいったら旧ファイルは削除してOK。
    • good
    • 0

No.1です。



エクセルで何かのマクロ使ってるとき、
開いてるファイルを保存する時に「このファイルにもそのマクロを一緒に保存する」みたいな
指定があった気がする。
これすると必要でもないマクロでも一緒に保存し、無意味なのにファイルサイズ増えたり
動作重くなったり...した気がします。古い記憶で曖昧ですみません

そういうのも含めて
質問文補足>横列をコピーして新規シートにペーストしていき、元のシートを削除しました。
のように同じファイル内でシートコピーするよりも、
新規ファイルにコピペする方が余計な情報をより多くカットできると思います。
    • good
    • 0

セルの使用範囲にもよりますが、


1. Excel 97-2003 形式で保存し、Excelを終了する。
2. 保存したものを開く
3. 通常のブック形式で保存する
と早くなるかも。

その場合、余計な行や列を計算対象にしていることがあるので
すべてのシートで使用していない行や列を削除して保存します
その後、Excelを再起動させ、開き直します
    • good
    • 1

原因切り分けたら?


No.3様の言う様に、自動計算をオフにして手動計算にして、症状が変わるかどうかを先ず確認する。

それでも駄目なら「・・・・」を行なっても駄目だった、と補足する。

そうやって絞り込んで行かないと解決しないでしょ?
貴方のエクセルブック・シート、誰も直接見る事出来ないんだから・・・。
    • good
    • 0

自分が一番思った事があるのは、SUMPRODUCTですね(配列計算)


列全体としていなくても、条件式を多数組み込めば重くなります。
1つのセルでまとめて計算しようとしているものを、
作業ようのセルやシートを用いて分散させたり、
1つの式に条件分岐等で多数回利用する計算式を別のセルで計算させておく、
といった事で改善される事もあります。
具体的なものが分からないので推測…ともいえない可能性の1つではありますが。
    • good
    • 0

こんにちは。



目に見えて分かるようにするには、大手術が必要になると思います。

マイクロソフトの注意書きをまとめて見ようと思いました。

"列全体" ルール [100万]以上の限界
配列数式は全列の参照を処理できますが、列のすべてのセル (空白セルを含む) が計算されるため、計算が遅くなることがあり、特に行数が 100 万を超えると、計算速度は低下します。


次に、揮発性関数を探さなくてはなりません。

RAND()、NOW()、TODAY() 、OFFSET()、CELL()、INDIRECT()、INFO
揮発性関数です。これらが使われた関数は、値を確保しませんので、開くその都度、計算します。

以前は揮発性関数として記載されていたが、今はそうでないものに、
INDEX()、ROWS()、COLUMNS()、AREAS() があります。

INDIRECT や OFFSET などの揮発性関数は極力使用しないでください。
配列数式や関数で使用する範囲のサイズに、列全体(A:A) は書かないこと。
配列数式やネストが複雑な関数式は、補助列を作って、セル一点に計算がかからないようにしてください。

INDEX()は、揮発性関数ではありませんが、数式で範囲や領域を決めてしてしまうと、揮発性と同じ結果になってしまいます。

VLOOKUPの参照範囲は、ソートされた領域を使用してください。

詳しくは以下をお読みください。

https://msdn.microsoft.com/ja-jp/library/office/ …
https://msdn.microsoft.com/ja-jp/library/office/ …(v=office.14).aspx
https://support.microsoft.com/ja-jp/help/166342/ …
    • good
    • 2

「5メガのデータ容量」のために「数十秒待たされ」るわけではないことは、既にお分かりですね。

貴方も「何故か、商品数が何十倍もある別のファイルの方が軽い」と経験済み。
「商品数が何十倍もある」ファイルは殆どがテキストデータのみ。
「数十秒待たされ」ファイルは数式だらけなので、「数字を入力するたびに」ワークシートが再計算を実行するからです。

手っ取り早いのは、[ファイル]→[オプション]→[数式]→[計算方法の設定 <ブックの計算>]で"自動"に付いている黒目玉を"手動"に付け替えることです。
こうしておけば入力はサクサクになります。再計算させたいときにF9キーを「エイヤッ!」と叩き付けてトイレにでも行けば好い。
以上の手順は Excel 2013 のものです。貴方も質問するときはバージョン明記忘れずに、これ常識です。
    • good
    • 2

誰かから貰ったものをベースに使い回していると重くなる。


原因はシェイプの増殖。図形の事です。
目に見えないちいさな図形が1個でも最初に有ったら、セルや列・行のコピーで図形も一緒にコピーされる。
セルや列・行を削除しても図形は削除されない。

これが繰り返され、どんどん増殖し、どんどん重くなります。

VBAでシェイプを全削除して下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q(続)エクセルでVBAを使い、時間入力10:30:45(10時30分45秒)の:コロン省略したい。

始業と終業の時間を入力し勤務時間を計算しております。
時間は時:分:秒まで入力します。
例えば始業時間はA1に8:30:25 、終業時間はB1に17:00:45と入れております。
コロン(:)を省略できるととても楽になります。8:30:25は83025と入力、17:00:45は170045と入力して、
表示にはコロンが入り、セルの書式としては時刻と認識し時間差を(時間:分:秒)と計算出来ればありがたいです。
よろしくお願い致します。

VBAを使った(時間:分)のコロンを入力しないで、かつ表示にはコロンが入り、セルの書式としては時刻と認識し時間計算が出来る例は検索できました。
下記です。 t****さんありがとうございました。
ですがそれを秒まで拡大し(時間:分:秒)に対応できるVBAに変更できず困っております。
何卒よろしくお願い致します。

-----------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Range("A:B")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Value <> "" Then
If IsNumeric(.Value) Then
If .Value < 2400 And .Value Mod 100 < 60 Then
Application.EnableEvents = False
.Value = TimeSerial(Int(.Value / 100), .Value Mod 100, 0)
.NumberFormatLocal = "h:mm"
Application.EnableEvents = True
Else
MsgBox "入力値が不正です"
.Select
.ClearContents
End If
End If
End If
End With
End Sub 'この行まで
-----------------------------------------------------------------------------

始業と終業の時間を入力し勤務時間を計算しております。
時間は時:分:秒まで入力します。
例えば始業時間はA1に8:30:25 、終業時間はB1に17:00:45と入れております。
コロン(:)を省略できるととても楽になります。8:30:25は83025と入力、17:00:45は170045と入力して、
表示にはコロンが入り、セルの書式としては時刻と認識し時間差を(時間:分:秒)と計算出来ればありがたいです。
よろしくお願い致します。

VBAを使った(時間:分)のコロンを入力しないで、かつ表示にはコロンが入り、セ...続きを読む

Aベストアンサー

変換ロジックを関数化して実装してみました。
「8:30:25」「83025」どちらの入力でも対応できているはずです。
ちなみに、2未満を入力すると日とみなし、2以上を入力すると秒とみなして表示されます(この辺はやってみて下さい)。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Range("A:B")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Value <> "" Then
Application.EnableEvents = False
.Value = MyTimeValue(.Value)
If .Value = "" Then
MsgBox "入力値が不正です"
.Select
Else
.NumberFormatLocal = "[h]:mm:ss"
End If
Application.EnableEvents = True
End If
End With
End Sub 'この行まで

Function MyTimeValue(MyTime As Variant) As Variant
Dim t As Variant
Dim d As Variant
If IsNumeric(MyTime) And MyTime < 2 Then
MyTimeValue = MyTime
Exit Function
End If
On Error GoTo Fin
t = Split(Format(MyTime, "000:00:00"), ":")
d = Int(t(0) / 24)
t(0) = t(0) Mod 24
MyTimeValue = d + TimeSerial(t(0), t(1), t(2))
Fin:
End Function

変換ロジックを関数化して実装してみました。
「8:30:25」「83025」どちらの入力でも対応できているはずです。
ちなみに、2未満を入力すると日とみなし、2以上を入力すると秒とみなして表示されます(この辺はやってみて下さい)。

Private Sub Worksheet_Change(ByVal Target As Range) 'この行から
If Intersect(Target, Range("A:B")) Is Nothing Or Target.Count > 1 Then Exit Sub
With Target
If .Value <> "" Then
Application.EnableEvents = False
.Value = ...続きを読む

Qエクセルで 文字を 複数回 数秒間隔で 連続表示 できますか?

部活動のコーチをしているものです。
トレーニングに利用したく下記のようなものを作りたいと考えています。

部員数は23名で、台の上にパソコンを置き開始キーを押してスタート。
部員は画面を見て高速足踏み(5~8秒程度)。
画面に指示が表示され、指示方向に決められた体勢を瞬時にとる。
これを指定回数行いたいです。
表示は「前・後・左・右・上・下」のいずれか一文字の表示です。
表示の間隔をさらにランダム(5~8秒程度)にできると最高です。
指定回数は部員の能力により調整したいので自由に変更ができると助かります。
部員数が多いため何班かに分けて行いたいので私は他の班の指導をするので
トレーニングはパソコンに頼りたいです。

RAND関数等調べましたが「F9」キー使用などの制限がついてしまい
使い勝手が悪いです。
スタートをクリックすれば指定回数表示後にストップ としたいです。
エクセルは初級者レベルです。
よろしくお願いします。

Aベストアンサー

---------------
使用説明
開発環境:Windows10, 32bit, Excel2013
制作:2017/4/30
---------------
全てを標準モジュールに登録して、保存し、再起動すると、メニューも数式バーもリボンもない状態のワークシートが現れます。

緊急避難的なショートカット
・Alt + F11 VBEditor 画面が現れるます。
・Alt +F8 マクロ実行

Start_ShortCutKeySetting
これによって、特別なショートカットが設定されています。
・ESC 中止ボタン (重要)
・F12 起動用のボタン
・F11 設定画面(Sheet2を開く)
 (Ctrl + PageDown)  Excel本来のショートカット

Sheet2 のデフォルト設定
項目 
出力場所  B3
フォントサイズ 80
秒間隔 1
表示時間 0.5
残りの表示場所 D1
カウント 300

マクロ内での設定
・重複を許すかどうか
enabledDOUBLE =True
・スタートまでの間奏時間
betweenTime = Int(Rnd() * 5) + 2 '2から5分まで"\** 0.5=30sec入力可
  ↓
betweenTime =0.5  と直接入力が可能 小数点第一位まで

本編の上下の表示の時間は、あまり正確ではなく、PCの性能に依存するはずです。
◯△の方は、PCの内部時計を利用しています。

----------
'グリッド線を表示
Sub SheetArrange_1()
Dim flg As Variant '元の画面 False, 調整用画面 True
flg = Application.InputBox("フラッシュスクリーン=0 , 通常Excel画面=1", "表示切替")
If VarType(flg) = vbBoolean Then Exit Sub
Worksheets(1).Activate
With ActiveWindow
 .DisplayHeadings = flg
 .DisplayGridlines = flg
End With
End Sub

'画面の切り替え
Sub SheetArrange_2()
Dim flg As Variant '表示用画面 False, 通常画面 True
flg = Application.InputBox("フラッシュスクリーン=0 , 通常Excel画面=1", "表示切替")
If VarType(flg) = vbBoolean Then Exit Sub
'セル幅調整
Sub LocationArrange()
Dim wds As Variant
Dim i As Long
wds = Array(, 13.63, 8.75, 7.5, 8.5) 'セル幅
With Worksheets(1)
  For i = 1 To 4
   .Columns(i).ColumnWidth = wds(i)
  Next
End With
End Sub

'セル幅調整
Sub LocationArrange()
Dim wds As Variant
Dim i As Long
wds = Array(, 13.63, 8.75, 7.5, 8.5)
With Worksheets(1)
  For i = 1 To 4
   .Columns(i).ColumnWidth = wds(i)
  Next
End With
End Sub

'-----使用説明終わり----------
直すのも大変かとは思いますが、よろしくお願いします。
修正点


①.
Sub Auto_Open()
  Worksheets(1).Activate  '←この行を加える
  Call Start_ShortCutKeySetting
End Sub

②.
Private Sub SettingSheet(flg As Boolean)
'シート設定
 With ActiveWindow
  'flg = Not .DisplayHeadings
  .DisplayHeadings = flg
  .DisplayGridlines = flg
  .Zoom = IIf(flg, 100, 300)
  .DisplayWorkbookTabs = flg
 End With
 With Application
  .WindowState = xlMaximized
  .DisplayFormulaBar = flg
  .ExecuteExcel4Macro "Show.ToolBar(""Ribbon""," & flg & ")"  'if構文 を取る
 End With
  '以下を加える
  If flg = False Then
   Range(Worksheets(2).Range("B6").Value).HorizontalAlignment = xlRight
  End If
End Sub

③.
Sub SettingSheet2()
Dim c As Range
Dim i As Long
Dim outPutData As Variant
Dim outputExample As Variant
Worksheets(2).Select  'これを加える
--
For Each c In Range("A2:A7") '←A6 からA7 に替える
 c.Value = outPutData(i)
 c.Offset(, 1).Value = outputExample(i)
 c.Offset(, 3).Value = outputExample(i)
 i = i + 1
Next c

---後は、検索で行ってください。--
Sub FrashExpress() 内
1.
showCharTime = showCharTime * 1000
 betweenTime = Int(Rnd() * 5) + 2 '2から5分まで"\** 0.5=30sec入力可
 ''betweenTime = 0.5 '待ち時間  '加入
2.
  If i = 1 Then '1/2 を出す場合
   i = 2
   expRng.Value = "◯"  '加筆
  Else
   i = 1
   expRng.Value = "△" '加入
  End If
  '  ''i = Int(Rnd() * UBound(SChars)) + 1  全部の記号を出す
   '×  expRng.Value = SChars(i)  '削除
3.
 Lasttime = GetTickCount()
'  Application.ScreenUpdating = True '削除

4.
   expRng.Value = JChars(j)
   If (cnt - i) < 20 Then  ' ここから加入
    expRng.Font.ColorIndex = 3
    DoEvents
   End If          'ここまで
  End If

5.
 i = i + 1
'  If cnt < 20 Then expRng.Font.ColorIndex = 3 '削除
  If cnt <= 0 Then Exit Do
 Loop While UBound(ExpItms) + 1 > i
 expRng.Value = "END"  'ここから加入
 Sleep 1000
 expRng.Clear        'ここまで

---------------
使用説明
開発環境:Windows10, 32bit, Excel2013
制作:2017/4/30
---------------
全てを標準モジュールに登録して、保存し、再起動すると、メニューも数式バーもリボンもない状態のワークシートが現れます。

緊急避難的なショートカット
・Alt + F11 VBEditor 画面が現れるます。
・Alt +F8 マクロ実行

Start_ShortCutKeySetting
これによって、特別なショートカットが設定されています。
・ESC 中止ボタン (重要)
・F12 起動用のボタン
・F11 設定画面(Sheet2を開く)
 (Ctrl + Pa...続きを読む

QExcel)軽いデーターのはずなのに、メチャメチャ重い!

こんにちは。
会社の共有フォルダーに「見積り書」というエクセルファイルがあります。
従業員はそれを各PCにダウンロードして、それぞれが見積りを作ります。
ある日をきっかけにめちゃめちゃこの見積りが重くなりました。
このたった1枚の見積りなのにサイズは4MB。写真、画像、マクロ、一切ありません。
それならまだ許せるのですが、、開くのにかーーーーなり時間かかります。5分以上はかかります。

「誰が触った!」「どう触った!」など調べるより新しく作り直そうと試みました。

なんとか10分ほど待って開きました。
そして7列x20行ほどのセルを囲んで「Ctrl」+「C」を押してコピーして、その新しいエクセルに貼付けようと試みました。
ところがコピーした段階でまた「応答無し」なります。
この症状は1人を除く従業員全員、しかもこの見積りだけです。あとはスイスイ開きます。
どれかのセルにゴミのようなデーターが入ってしまってるのでしょうか。
何が原因でしょうか?考えられるものを挙げていただけましたら幸甚です。

Aベストアンサー

コメントでも大量に入力されたのでしょうか。コメントの付いたセルはセルの右上に赤い三角マークが付くので見た目で分かります。コメントってテキストだから容量は大きくならないと思っていたんですけど、入れると凄く大きくなるんです。びっくりしました。

入力されている数式や書式を諦められるなら、他のbookからその問題のbookを参照してはいかがでしょう。値だけを参照するだけですので不要なものは一切付いてきません。
問題のファイル(Book)をBook1とした場合、Book2のA1セルに
=[Book1]Seet1!A1
と入力して必要な範囲までコピーします。
そののちに、Book2のseet全体をコピーして、「形式を選択して貼り付け」から「値」を選んで同じ範囲に上書き貼り付けすると良いです。
あとは正常に開ける人のパソコンの画面を見ながら数式や書式を設定してみてください。

QExcelのセルの書式設定で質問です。

いつもExcelで悩んだ時にお世話になっています。
今回はセルの書式設定で助けていただきたいです。
前回ご教授いただき、1商品の価格に対して60万行あるデータベースから該当するJANコードを抜きだし一つのセルに改行して納めることができました。
それで作成されたものが添付画像のようなもので、セル内で改行して価格と13桁のJANコード(1価格に1~20くらい)があります。
このようなセルが何千とあります。
すると桁区切りに設定していた価格の,がなくなりました。
設定し直しても変わりません。
ググってユーザー定義から Ctrl+J でセル内の各行に定義を設定するという方法を知りました。
手探りで1行目の価格に#,##を、残りのJANコード行に標準/Gを設定してみましたが出来ません。
試しにJANコード部を#############にしてみましたが桁区切り点は付きません。
今は一つ一つクリックして手動で付けています。
どのようなユーザー定義を設定すれば可能でしょうか?
またJANコード数は価格(商品)によって違います。
最大数のユーザー定義を設定して貼り付ければすべてのセルに設定できるでしょうか?
例えば20行分の書式設定をしたものを1行しかコードがないセルに貼り付けても問題ないでしょうか?
ご教授お願いします。

いつもExcelで悩んだ時にお世話になっています。
今回はセルの書式設定で助けていただきたいです。
前回ご教授いただき、1商品の価格に対して60万行あるデータベースから該当するJANコードを抜きだし一つのセルに改行して納めることができました。
それで作成されたものが添付画像のようなもので、セル内で改行して価格と13桁のJANコード(1価格に1~20くらい)があります。
このようなセルが何千とあります。
すると桁区切りに設定していた価格の,がなくなりました。
設定し直しても変わりません。
ググっ...続きを読む

Aベストアンサー

前回の質問を見ていないので,どの様にして1つのセルに改行して数値(属性としては文字)を入れたか分かりませんが,おそらく書式設定ではなく,データを入れる部分を直さないといけないと思います.多分,
=A1&CHAR(10)&A2
みたいな関数で折り返し表示しているのだと思いますが,これを以下の関数にするとカンマが付きます.
=TEXT(A1,"#,###")&CHAR(10)&TEXT(A2,"#,###")

Qエクセルの数式について教えて下さい( ; ; )こんな数式って作れますか?困ってます。

エクセルで
例) 0.1235 ≒ 0.124
10.75 ≒ 10.8

0.1245 ≒ 0.124
10.85 ≒ 10.8 など

このように
最初の0を除く左から4番目の数字が5で終わり、且つ5の一つ前の数字が奇数の場合は5を切り捨てる。
しかし、最初の0を除く左から4番目の数字が5で終わり、且つ5の一つ前の数字が偶数の場合は5を切り上げる。

こういう法則の数式をエクセルで作ることはできるのでしょうか。
教えて下さい。
エクセルにそこまで詳しくなく、本当に困ってます。

教えて下さる方、具体的な数式を作って教えて頂けるとありがたいです。

宜しくお願い致します(>_<)

Aベストアンサー

えっと…例と説明文で切り捨て切り上げが逆だと思うのですが…
奇数なら切り上げ、偶数なら切捨て(偶数になるように五捨五入)したい。
ということでよろしいでしょうか?
また、4番目が5以外であれば、四捨五入(5を含まないので五捨五入も四捨五入も同じ)でよろしいでしょうか?

A1に数字があるとして、
=IF(RIGHT(INT(A1*10^-(INT(LOG10(A1))-3)),1)="5",IF(MOD(RIGHT(INT(A1*10^-(INT(LOG10(A1))-2)),1),2)=0,ROUNDDOWN(A1,-INT(LOG10(A1))+2),ROUNDUP(A1,-INT(LOG10(A1))+2)),ROUND(A1,-INT(LOG10(A1))+2))
でいかがでしょう?

A1の値を10の「A1の値が10の何乗か(LOG10)を整数部分だけ取り出し(INT)、-3したものにマイナスをかけた値」乗し、右端の値(RIGHT)、(=先頭部分が0以外で、左から4番目の数値)が5であり、
 (同様にして)左から3番目の数値が2で割って(MOD)余りが0(つまり偶数)なら4番目の数値を切り捨て(ROUNDDOWN)
 余りが0でない(つまり奇数)なら4番目の数値を切り上げ(ROUNDUP)、 
5でないならば、4番目の数値を四捨五入(ROUND)する。
という式です。

試してみてください。

えっと…例と説明文で切り捨て切り上げが逆だと思うのですが…
奇数なら切り上げ、偶数なら切捨て(偶数になるように五捨五入)したい。
ということでよろしいでしょうか?
また、4番目が5以外であれば、四捨五入(5を含まないので五捨五入も四捨五入も同じ)でよろしいでしょうか?

A1に数字があるとして、
=IF(RIGHT(INT(A1*10^-(INT(LOG10(A1))-3)),1)="5",IF(MOD(RIGHT(INT(A1*10^-(INT(LOG10(A1))-2)),1),2)=0,ROUNDDOWN(A1,-INT(LOG10(A1))+2),ROUNDUP(A1,-INT(LOG10(A1))+2)),ROUND(A1,-INT(LOG10(A1))+2))
...続きを読む

QAND関数 引数が0以外の値がTRUE,0がFALSEとみなされる の意味について

AND関数の注意点に、質問タイトルが書いてありました。
全文は以下の通りです。
引数が数値の場合には、0はFALSE、それ以外の値はTRUEが引数に指定されたものとして計算されます。

AND関数は全てがTRUEのとき、TRUEを返す関数だと思っています。
FALSEを指定するとは?
ここでのFALSEが完全一致、という意味のFALSEでしょうか?
???
混乱しています(-_-;)
お分かりになる方ご教授くださいませ。
できたら 例など添えていただけるとありがたいです<(_ _)>

Aベストアンサー

>変数aの値が0である場合にはこのAND関数はFALSEを返す、ということでしょうか?
その通りです。
言語的には、数値と数値以外を比較する事はできないので、内部的には、FALSEの値
として0が使われます。
#TRUEは言語によって、1または-1が使われます。

Qエクセルデータを軽くしたい。。。

いつもお世話になっています。今回もよろしくお願いします。
エクセルデータで発送表を管理しているのですが、それを次の工程の方に渡す際、オープンに時間がかかるといわれたので軽くしたいのですが。。。
1シートで
・ファイルの大きさ  1.6MB
・データの件数    9行のADまで使用(多いときは400行)
・関数の種類     roundup/sum/mod/自動日付表示ぐらい。。。?
・ファイルが重く動きが悪い
・ファイルを開いたり保存したりするのに時間がかかる。
・1枚シートをコピーするにしても時間がかかる。

次の工程の人には再計算の必要はなく、値化したデータを渡しても問題ありません。基本が分かっておりませんので、出来ればわかりやすくお願いできると助かります。

Aベストアンサー

・こちらのように操作して、次工程に渡すシート全体を選択します。

・選択した部分をコピーします。

・新規に Book を作成し、上記と同様にシート全体を選択します。

・形式を選択して貼り付け(S)を使って、"値" だけを貼り付けます。
 なお、必要であれば、形式を選択して貼り付け(S)で "書式" や
"列幅" を選択して張り付ければ、ほぼ同じ形式のシートになります。


 この新規 BooK を引き渡せば、サイズの小さいファイルになります。

Qエクセルで条件付き書式の独自ルールを作成したい。

先ほどは列の条件付き書式が解決できましたが、
6行の(B6:W6)に"公""有""希""欠"等4項目の特定の文字が発生した時、3行の(B6:W6)のセルを塗りつぶす数式をお願いします。
この行は6-3、35-32、64-61、93-90、122-119とセットに成っています。
宜しくお願いします。

Aベストアンサー

返答遅くなりました.

とりあえず,C6:E6の連結したセルに"公"を入力して,C3:E3の連結したセルを黄色く塗りつぶした時の数式と適用範囲を示します.

式:=AND(C6<>"",ISNUMBER(FIND(C3,"公、有、希、欠")))
適用範囲=$C$3

確認ですが,条件付き書式を入力する際に"どの位置のセルを選択しているか",も重要な部分になります.
例えばC3のセルを選択した状態で,上述の条件付き書式を入力する分には問題ありません.

ところが別のセルを選択(例えばA1のセルを選択した状態で条件付き書式→ルールの管理→新規ルール)した状態で条件付き書式を設定すると,数式の相対参照値(C3やC6など)が意図したものと変わる事があります.
A1を選択して条件を作ると,実際にC3のセルに反映される式は下記の様になります.
=AND(E8<>"",ISNUMBER(FIND(E5,"公、有、希、欠")))

見ての通りC6ではなく,E8,C3ではなく,E5になってします.
これは相対参照によって参照するセルがA1の位置からC3の位置のずれ(2行,2列分)が発生するからです.

参考として画像を用意しました.

返答遅くなりました.

とりあえず,C6:E6の連結したセルに"公"を入力して,C3:E3の連結したセルを黄色く塗りつぶした時の数式と適用範囲を示します.

式:=AND(C6<>"",ISNUMBER(FIND(C3,"公、有、希、欠")))
適用範囲=$C$3

確認ですが,条件付き書式を入力する際に"どの位置のセルを選択しているか",も重要な部分になります.
例えばC3のセルを選択した状態で,上述の条件付き書式を入力する分には問題ありません.

ところが別のセルを選択(例えばA1のセルを選択した状態で条件付き書式→ルールの管理→新規ル...続きを読む

Qこの式の意味を教えてください。 また、FALSEの前の2は何を指してますか? =VLOOKUP(B2

この式の意味を教えてください。
また、FALSEの前の2は何を指してますか?

=VLOOKUP(B2076,'2015'!$C$2:$E$3201,2,FALSE)

B2076が2015シートのC2からE3201に何でしょう。FALSEの前の2は何ですか?

Aベストアンサー

[Excelヘルプ]の説明は次のとおり。
戻り値を含む範囲内の列番号。たとえば、B2:D11 を範囲として指定した場合、B を最初の列、C を 2 番目というように数えます。

Qエクセルの計算式

エクセルが次のようになっています。

A列  B列  C列  D列  E列 F列  G列
1000     伺1712345    計算式


A列に1000、D列に伺1712345 と記載されており

G列には次の式が入っており、E1D72345と表示されます。

=IF(D11="","",IF(A11="","",IF(A11="2950","I",IF(A11>"2999","F",IF(A11>"1999","D","E")))&IF(E11="0","2","1")&
IF(LEFT(D11,1)="伺",IF(A11>"3044","K",IF(A11>"2999","I",IF(A11>"1999","G",IF(LEFT(D11,3)="伺ek","E","D")))),
IF(A11>"3044","J",IF(A11>"2949","H",IF(A11>"1999","F",IF(LEFT(D11,2)="ek","C","B")))))&IF(AND(LEFT(D11,1)
="伺",A11<"3000"),LEFT(RIGHT(D11,6),1)&RIGHT(D11,4),RIGHT(D11,5))))

この式をD列の下5桁が埋まっている場合はE1D72345をE1Z72345(DをZに変える)にしたいのですが式をどのように変更すればよいでしょうか。

要は以下のようにしたいのです。

D列が伺1702345の場合はG列はE1D71345となる(現状の式でOK)

D列が伺1712345の場合はG列はE1Z71345となる(現状の式を変更しなければならない)


宜しくお願いします。

エクセルが次のようになっています。

A列  B列  C列  D列  E列 F列  G列
1000     伺1712345    計算式


A列に1000、D列に伺1712345 と記載されており

G列には次の式が入っており、E1D72345と表示されます。

=IF(D11="","",IF(A11="","",IF(A11="2950","I",IF(A11>"2999","F",IF(A11>"1999","D","E")))&IF(E11="0","2","1")&
IF(LEFT(D11,1)="伺",IF(A11>"3044","K",IF(A11>"2999","I",IF(A11>"1999","G",IF(LEFT(D11,3)="伺ek","E","D")))),
IF(A11>...続きを読む

Aベストアンサー

長さの問題ではないですね。
IF(IF(IF(IF(…という形で、関数の中に関数の中に関数…というのが、限界の数になったようです。
(中に入れる形を取らなければ、長さはもっと長くなっても問題ないです)
であるならば、中身を分解して書き直さないといけませんね。

今回IF(LEFT(RIGHT(D11,5),1)="0","D","Z")を増やしたので、最高でも3つ減らせれば問題なく動くかと。
一番手っ取り早いのは、隣のセルにでも
=IF(LEFT(RIGHT(D11,5),1)="0","D","Z")
と入力し、これを加えた部分(元の"D"の部分)にそのセルのセル番地(A1など)を入力することですね。
条件に該当する場合のみ、そのセルに表示されたデータ("D"or"Z")を参照し、条件に該当しない場合はそのセルに何が表示されていても関係ない。ことになります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング