Excel 何でもQ&A





無記名形式のQ&Aです。Excelに関する、今さら人に聞けないような質問にお答えします。

ご質問の投稿は、こちらからどうぞ→「何でもQ&Aに質問する
質問に関する注意事項を、よくお読みください。

下の「ジャンル」をクリックすると、タイトルの一覧が表示されます。

■Excel全般
■ブック/ファイル
■ワークシート
 オートフィルタで絞り込んだ結果をカウント/合計するには?
 フォーム入力時には、入力規則は反映されないのでしょうか?
 改ページの点線を最初から表示させるようなことは出来ないのでしょうか?
 印刷のヘッダーにセルの内容を印刷するにはどうしたらいいですか?
 セルによって「0」表示しないようにしたいのですが、なにか良い方法はありますか?
 入力確定後アクティブセルを右に移動して、1行分の入力が終わったら先頭列に移動するには?
 縦長の表を印刷するときに、二ページ目三ページ目にも、タイトル行を印刷したいのですが?
 うっかり計算式を消してしまわないようにする方法はありませんか?
 ワークシートの列をIVより増やすには?
 1つのセルで複数のリストを切り替えるには?
 入力した数値を千円単位で表示するには?
 入力後に移動する方向をシートごとに決めるには?
 ヘッダー・フッターの文字色を変えるには?
 Excel 2000でブック全体を検索するには?
 列や行の幅を0にしたあと、元に戻すにはどうしたらよいでしょうか?
 セルに入力後Enterキーを押して2行下に移動したいのですが?
 複数のワークシートのデータを組み合わせて(一枚の紙に)印刷する方法はありますか?
 結合セルをオートフィルタで抽出できますか?
 列幅だけを変更不可にできますか?
 選択したセルが任意のセル範囲内かどうか判定するには?
 Wordのように2段、3段組で印刷(段組印刷)する方法はないでしょうか?
 すでに付けた名前を「名前ボックス」で変更するには?
 オートフィルタに全てのデータが表示されない?
 保護したワークシート上でオートフィルタを使用するには?
 計算式が入力されているセルだけを保護するには?
 セルのデータだけを他のセルに移動するには?
 ワークシート上でアニメーションGIFを表示するには?
 セルを点滅させるには?
 保護したシートでフィルハンドルが表示されない?
 列幅も一緒にコピーするには?
 別ブックのデータを入力規則のリストに表示するには?
 入力できる文字数をバイト単位で制限するには?
 ブックにワークシートは何枚まで追加できますか?
 印刷するとズレるのですが、どうにかなりませんか?
 セルのデータによって表示形式を自動的に変えられますか?
■計算/関数
 五捨六入できる関数はありますか?
 ピボットテーブルの処理速度にはCPUとメモリどっちが重要?15万件×20列のデータ処理なんだけど…
 セル値に「A"」が含まれている場合、A1="A"" の部分でどの様に表現すればよいかがわかりません。
 VLOOKUP関数の表引きで、一致している複数のデータを参照するには?
 数値の6.6を6と切り捨てるには?
 別ブックを参照するとき、ブックのパスを相対参照で指定できますか?
 年齢の統計で、何々以上何々未満の人数のカウントの方法は?
 数式を移動しても、常に1行つ上のセルを参照するには?
 TEXT関数に指定できる書式記号とは?
 0以外のセルの平均値を求めるには?
 上位3つの数字の平均を求めるには?
 月末の日を調べるには?
 郵便番号から住所に変換する関数はありますか?
 ある日付が祝日かどうか調べるには?
 関数で文字のサイズを変更するには?
 右端の1文字を削除するには?
 セルの文字色や背景色をカウントするには?
 VLOOKUP関数のエラーを表示しない方法は?
 土日を除いた日数や日付を計算するには?
 文字色ごとにセルを計算するには?
 セルに現在の時刻をリアルタイムで表示するには?
 文字間のスペースを除去するには?
 TRANSPOSE関数の使い方は?
■グラフ
■VBA
 隣のセルを参照するには?
 セルのデータを名前にしてブックを保存するには?
 Sheet1の任意のセルから、Sheet2の任意のセルへハイパーリンクをVBAから設定したいのですが?
 Integer型の桁数を指定することはできないのですか?
 配列内のデータをテキストファイルに書き出すには?
 ユーザー定義関数にセルを渡すには?
 入力規則のリストでWorksheet_Changeイベントが発生しないのですが?
 Officeクリップボードをマクロから操作するには?
 マウスのスクロール ボタンをマクロで操作するには?
 選択されている先頭行と最終行を調べるには?
 マクロ抜きでExcelのデータのみを保存することはできますか?
 マクロだけを別のブックにコピ−することはできますか?
 オートフィルタの抽出結果をカウント&メッセージボックスで表示するには?
 マクロがないのに「このブックにはマクロが…」と表示される?
 Officeクリップボードを操作するには?
 ユーザー定義書式を削除するには?
 文字列が含まれているかどうかを判定するには?
 2つの変数を入れ替えるには?
 セルのデータが数値かどうか?
 セルに数式が入力されているかどうか?
 マクロって難しいですか?
 VBAで複数のプロシージャを並列に処理させることはできますか?
 マクロでマクロ(自分自身)を削除できますか?
 VBAでプログラムを作る時は、適正な容量があるのでしょうか?
■その他


■Excel全般
Excelを上達するにはどうしたらいいでしょう?
Excelを好きになることです。
パソコンの前に座ったら、とりあえずExcelを起動してください。
何もすることがなかったら、Excelをいじってみましょう。
とにかく、Excelと接する時間を多くすることが大事です。
ページの先頭に戻る



■ブック/ファイル
保護のパスワードを忘れたときは?
正しいパスワードを入力しないと、保護を解除することはできません。
ブックの中を見てもわかりませんので、思いつく限りのパスワードを試してみましょう。
ページの先頭に戻る
ブックをCSV形式で保存する時、文字を""で囲む方法は?
手作業で保存した場合は、文字列が""で囲まれません。Excelの仕様です。
どうしてもというのなら、マクロで保存するしかないでしょう。
ページの先頭に戻る
あるセルを参照して保存時に自動でファイル名を決めさせることはできますか?
マクロを使わないとできません。
次のマクロは、セルA1に入力されている名前でアクティブブックを新規保存します。
Sub test()
    ActiveWorkbook.SaveAs Filename:=Range("A1")
End Sub
セルA1に「Sample」と入力されていればカレントディレクトリ(現在開いているフォルダ)に「Sample.xls」として保存されます。
セルA1に「Sample.xls」と拡張子まで指定してもOKです。
セルA1に「C:\Tmp\Sample.xls」とパス名まで入力されていれば、そこのフォルダ(C:\Tmp)に「Sample.xls」として保存されます。
ただし、すでに同じ名前のブックが存在する場合は「上書きしますか?」のメッセージが表示されます。
メッセージを表示せずに保存したいときは、次のようにします。
Sub test2()
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=Range("A1")
    Application.DisplayAlerts = True
End Sub

ページの先頭に戻る
CSVファイルをExcelで開くと「0123」が「123」となってしまうのですが?
CSVファイルの拡張子をTXTに変更してから開いてください。
実行すると[テキストファイルウィザード]が起動しますので、
3/3画面で「0123」などの列を文字列に設定してください。
ページの先頭に戻る
マクロ抜きでExcelのデータのみを保存する事は出来ますか?
マクロだけを除いて保存する機能はありません。
手作業でマクロを削除してから保存してください。
ページの先頭に戻る
ブックを開くと同時に特定のシートを表示するには?
Excelの標準機能ではできません。
私が作ったアドインには、その機能がありますので、ぜひお試しください。
オンラインソフト「Excelのお気に入り」
ページの先頭に戻る
ファイルの作成日時を調べるには?
マクロの話ですよね。FileDateTime関数で取得できます。
Sub Sample()
    MsgBox FileDateTime("E:\Sample.txt")
End Sub
のようにすれば、

2005/07/16 21:12:40

のように取得できます。
ページの先頭に戻る
Excelを起動するとBook1以外のブックが自動的に開くのは?
これには、次の3つの原因が考えられます。
  1. ウィルスに感染している
  2. XLStartフォルダにブックが保存されている
  3. Excelのバグ
1.この場合はPersonal.xlsとか、1021.xlsのように「Book+数値.xls」ではない何らかの名前が付いたブックが表示されることが多いです。ただし、Excelに感染するマクロウィルスは最近ほとんど流行していませんので、可能性はかなり低いです。

2.XLStartフォルダは特殊なフォルダで、Excelは起動時に、ここに保存されているブックをすべて開く仕組みになっています。何らかの操作ミスで、ここにブックを保存してしまった場合、毎回起動時に表示される…ということになります。
XLStartフォルダは一般的にC:\Program Files\Microsoft Office\にありますが、[オプション]ダイアログボックスの[全般]タブ[起動時にすべてのファイルを開くフォルダ]に任意のフォルダを指定すると、そのフォルダ内のブックも、XLStartフォルダと同じように起動するとき読み込まれます。

3.Excelのバグによって、毎回Book1でないブックが起動時に開くことがあります。停電やWindowsのトラブルなどで、Excelを強制終了したときなどに起こることがあります。このバグでは、Excelを起動するとBook1ではなく、Book2やBook3などの名前が付いた新規ブックが開かれます。ブックが3枚開くのではありません。最初のブックがいきなりBook3だったりするんです。何十回も経験していますが、Excelを正常終了させたり、Windowsを再起動したりするとすぐ直ります。
ページの先頭に戻る



■ワークシート
オートフィルタで絞り込んだ結果をカウント/合計するには?
SUBTOTAL関数を使います。
A列の個数をカウントするには、=SUBTOTAL(3,A:A)-1。
B列の数値を合計するには、=SUBTOTAL(9,B:B)のようにします。
ページの先頭に戻る
フォームの入力欄では、入力規則でIMEを制御できないのでしょうか?
残念ですができません。
入力規則は、セルに対してだけ有効な機能です。
ページの先頭に戻る
改ページの点線を最初から表示させるようなことは出来ないのでしょうか?
[オプション]ダイアログボックス[表示]タブの[改ページ]をオンにすると表示されます。
でも、[オプション]ダイアログボックスを開くより[改ページ]ボタンをクリックする方が簡単です。
もっと簡単に表示を切り替えるには、マクロをツールバーに登録するしかないでしょう。
最初から表示させることも、マクロを使わないとできません。
ページの先頭に戻る
印刷のヘッダーにセルの内容を印刷するにはどうしたらいいですか?
Excelの標準機能ではできません。
どうしてもというのならマクロです。
ページの先頭に戻る
セルによって「0」表示しないようにしたいのですが、なにか良い方法はありますか?
ありますよ。
=IF(A1=0,"","")みたいにIF関数を使う手もありますが、
セルの書式設定でも「0」を非表示にできます。
詳しくは「0を表示しない表示形式」をご覧ください。
ページの先頭に戻る
入力確定後アクティブセルを右に移動して、1行分の入力が終わったら先頭列に移動するには?
【方法1】動作イメージは「動作イメージ」をご覧ください。
(1)[オプション]ダイアログボックス[編集]タブの[入力後にセルを移動する方向]に「」を設定します。
(2)セルに入力後Tabキーを押します。
(3)1行の最終列に入力したらEnterキーを押します。

【方法2】動作イメージは「動作イメージ」をご覧ください。
(1)[オプション]ダイアログボックス[編集]タブの[入力後にセルを移動する方向]に「」を設定します。
(2)入力したいセル範囲をあらかじめ選択します。
(3)セルに入力後Enterキーを押します。
ページの先頭に戻る
縦長の表を印刷するときに、二ページ目三ページ目にも、タイトル行を印刷したいのですが?
次のように操作してください。
(1)[ファイル]-[ページ設定]をクリックして[ページ設定]ダイアログボックスを開きます。
(2)[シート]タブの「印刷タイトル」グループ[行のタイトル]ボックス内をクリックします。
(3)タイトルとして設定したい行をクリックまたはドラッグして選択します。
(4)[OK]ボタンをクリックして[ページ設定]ダイアログボックスを閉じます。
ページの先頭に戻る
うっかり計算式を消してしまわないようにする方法はありませんか?
計算式が入力されているセルだけ保護するには?
まず認識してもらいたいのは、[ツール]-[保護]-[ワークシートの保護]を実行すると、基本的にすべてのセルが保護されるということです。データが入力されているセルも、計算式が入力されているセルも、基本的にはすべてロックされます。
大事な計算式を削除などの誤動作から守るためにセルを保護したい……というときは、逆の発想が必要です。すべてのセルが保護されるのですから、計算式のセルも保護されます。しかし、それではデータを入力できません。そこで、データを入力するセルだけ保護を解除すればいいのです。

ところがExcelには、データが入力されているセルだけを自動的に保護を解除する機能はありません。 ただし、データが入力されているセルだけを選択する機能はあります。選択することができれば、そのセルの保護を解除することができます。

次のように操作してください。
(1)計算式を入力していないセル[*1]を選択します。
(2)[書式]-[セル]で[セルの書式設定]ダイアログボックスを開きます。
(3)[保護]タブの[ロック]チェックボックスをオフにします。
(4)[OK]ボタンをクリックして[セルの書式設定]ダイアログボックスを閉じます。
(5)[ツール]-[保護]-[シートの保護]をクリックして[シートの保護]ダイアログボックスを開きます。
(6)[シートとロックされたセルの内容を保護する]チェックボックス[*2]をオンにします。
(7)[OK]ボタンをクリックして[シートの保護]ダイアログボックスを閉じます。

[*1]数字や文字を入力するセルのことです。
[*2]Excel 97/2000では[データ]チェックボックス。


ページの先頭に戻る
ワークシートの列をIVより増やすには?
増やすことはできません。IVまでで固定です。
ただし、新しいExcelで列の数が拡張される可能性はあります。
ページの先頭に戻る
1つのセルで複数のリストを切り替えるには?
入力規則のリストを使って複数のリストを切り替える方法は、
機能/操作/数式のテクニック「ワークシート上でリスト入力」で解説しています。
リストの切り替えを1つのセルだけで実現するには、さらにもう一工夫必要です。
言葉で解説すると長くなりますので、サンプルブックを用意しました。下記リンクからダウンロードできます。
サンプルブックのダウンロード「sample01.xls」
ページの先頭に戻る
入力した数値を千円単位で表示するには?
セルA1に「123,456,789」と入力されているとします。
関数を使うのでしたら、=INT(A1/1000)でどうでしょう?INT関数は小数部を切り捨てますので「123,456」と表示されます。
セルの表示形式でしたら、「ユーザー設定」で「#,##0,」のように指定します。
最後の「,」が千単位に省略する記号です。
表示形式は四捨五入されますので「123,457」と表示されます。
ちなみに「#,##0,,」なら「123」と表示されます。
ページの先頭に戻る
入力後に移動する方向をシートごとに決めるには?
入力後にアクティブセルが移動する方向は、Excel全体の設定です。ブック単位やシート単位に決めることはできません。
どうしてもというのでしたら、ブックを開くと同時に移動する方向を変更するマクロを使いましょう。
ページの先頭に戻る
ヘッダー・フッターの文字色を変えるには?
ヘッダー・フッターの文字色を変えることはできません。
今後のバージョンアップに期待しましょう
ページの先頭に戻る
Excel 2000でブック全体を検索するには?
ブック内のすべてのワークシートをグループ化して検索してください。
ただし、Excel 2000までの検索機能は不安定なので、正しく検索されないこともあります。
ページの先頭に戻る
列や行の幅を0にしたあと、元に戻すにはどうしたらよいでしょうか?
0にした前後の列または行を選択して、列の幅や行の高さを設定します。
たとえば、D列の幅を0にした場合は、C列からE列までを選択して[再表示]などを実行します。
ページの先頭に戻る
セルに入力後Enterキーを押して2行下に移動したいのですが?
設定ではできません。
マクロなどで制御するか、入力範囲をあらかじめ選択してから入力してください。
ページの先頭に戻る
複数のワークシートのデータを組み合わせて(一枚の紙に)印刷する方法はありますか?
印刷する複数の表を、印刷用のワークシートに集結して、そのワークシートを印刷します。
たとえば、Sheet1の表とSheet2の表をSheet3に集結して印刷するには次のようにします。
(1)Sheet1の表をコピーします。
(2)Sheet3を開き、貼り付けたい位置を選択します。
(3)Shiftキーを押しながら[編集]メニューを開き[図のリンク貼り付け]を実行します。
(4)Sheet2の表も同じ手順でSheet3に貼り付けます。
(5)Sheet3を印刷します。
[図のリンク貼り付け]した表は、元のセルを変更すると貼り付け先にも反映されます。
ページの先頭に戻る
結合セルをオートフィルタで抽出できますか?
できません。
たとえば、セルA2とセルA3が結合されていたとします。
で、このセルがオートフィルタでヒットしたとします。
しかし、表示されるのはセルA2だけです。
結合セルに入力されたデータは、結合している範囲の左上セルにだけしか入力されていません。
その他のセルは空欄になっています。
オートフィルタは、データが見つかったセルを表示する機能ですから、入力されていないセルは表示されません。
一応Excelの仕様です。でも不便な仕様なので、Excelの次バージョンに期待しましょう(^^;
ページの先頭に戻る
列幅だけを変更不可にできますか?
Excel 2002以降でしたら、シート保護で[列の書式設定]以外のチェックをオンにすれば
列幅だけを変更不可にできます。
ページの先頭に戻る
選択したセルが任意のセル範囲内かどうか判定するには?
マクロだと簡単です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rc
    Set rc = Application.Intersect(Target, Range("B2:D6"))
    If rc Is Nothing Then
        Range("A1") = False
    Else
        Range("A1") = True
    End If
End Sub
セル範囲B2:D6内のセルを選択すると、 セルA1にTRUEと表示され、範囲外のセルを選択するとFALSEと表示されます。
ページの先頭に戻る
Wordのように2段、3段組で印刷する方法はないでしょうか?
現在のExcelには、そうした機能がありません。
マクロを使えば可能ですが、簡単なコードでは済みません。
シートのデータをWordに貼り付け、Wordで段組印刷するのが最も簡単な方法のひとつです。
ページの先頭に戻る
すでに付けた名前を「名前ボックス」で変更するには?
名前ボックスは名前を定義することしかできません。
すでに付けた名前を変更・削除するときは[名前の定義]ダイアログボックスを使います。
ページの先頭に戻る
オートフィルタに全てのデータが表示されない?
オートフィルタを設定して、▼ボタンをクリックするとリストが表示されます。
このリストには重複しないデータが1000件までしか表示されません。
Excelの仕様です。次期バージョンに期待しましょう。
ページの先頭に戻る
保護したワークシート上でオートフィルタを使用するには?
Excel 5.0/95/97/2000ではできません。
Excel 2002以降のバージョンでは[シートの保護]ダイアログボックスで[オートフィルタの使用]チェックボックスをオンにします。
ページの先頭に戻る
セルのデータだけを他のセルに移動するには?
1.移動元のセルを選択して[編集]-[コピー]を実行します。
2.移動先のセルを選択します。
3.[編集]-[形式を選択して貼り付け]を実行します。
4.[値]を選択して[OK]ボタンをクリックします。
5.移動元のセルを削除します。
ページの先頭に戻る
ワークシート上でアニメーションGIFを表示するには?
Excelのワークシート上に挿入したアニメーションGIFは動きません。
残念ですが仕様です。
1-2-3は動くのにね…今後のバージョンアップに期待しましょう。
ページの先頭に戻る
セルを点滅させるには?
できません。
マクロを使えば一時的に点滅させることも可能ですが、
点滅している間はセルの編集ができなくなりますので、現実的ではありません。
あきらめるべきでしょう。
ページの先頭に戻る
保護したシートでフィルハンドルが表示されない?
セルに入力規則のリストを設定して、そのシートを保護すると、リストを設定したセルのフィルハンドルが操作できなくなります。
これは、Excel 2002で保護機能が拡張されたのが原因です。Excel 2000以前のバージョンでは発生しません。
このような状況でフィルハンドルを操作するには、シートを保護するときに
[シートの保護]ダイアログボックスで[オブジェクトの編集]チェックボックスをオンにします。
ただし、フィルハンドルでコピーする下のセルは、ロックを外しておかなければエラーになりますよ。
ページの先頭に戻る
列幅も一緒にコピーするには?
セルではなく、列全体をコピーします。
ページの先頭に戻る
別ブックのデータを入力規則のリストに表示するには?
できない…と思います(^^; 直接指定するのではなく、別ブックのデータを参照して、そのセルを入力規則で表示してください。その方が簡単だと思いますよ(^^;
ページの先頭に戻る
入力できる文字数をバイト単位で制限するには?
入力規則の「ユーザー設定」を使います。[数式]ボックスに「=LENB(A1)<=20」とすれば、セルA1には半角英数字で20バイトまでしか入力できなくなります。
ページの先頭に戻る
ブックにワークシートは何枚まで追加できますか?
メモリの許す限り追加できます。環境によって異なりますが、おおむね数百枚くらいは追加できるでしょう。ただし、ひとつのブックに数百枚ものワークシートを挿入すること自体に疑問を感じます。なので、現実的には「挿入できるワークシートの枚数で困ることはない」と言えるでしょう。
ページの先頭に戻る
印刷するとズレるのですが、どうにかなりませんか?
根本的な解決法はないと思いますよ。また、今後改善されることもないと思います。
「印刷するとズレることがある」という認識を前提にExcelを使うしかないのでは?もちろん、ケースによっては運用の工夫で少しはましになるかもしれませんけど。こればかりは、諦めるしかない…というのが個人的な感想です。
ページの先頭に戻る
セルのデータによって表示形式を自動的に変えられますか?
Excel 2003までのバージョンでは、「条件付き書式」機能で表示形式を設定することはできません。Excel 2007では可能になりました。
ページの先頭に戻る



■計算/関数
五捨六入できる関数はありますか?
ROUNDDOWN関数でやってみましょうか。
セルA1に入力されている数値の1桁目を五捨六入するには、ROUNDDOWN(A1+4,-1)です。
ちなみに三捨四入なら、ROUNDDOWN(A1+6,-1)ですね。
ROUND系関数については、そのうち「この関数は、こう使え!」で解説します。
ページの先頭に戻る
ピボットテーブルの処理速度にはCPUとメモリどっちが重要?15万件×20列のデータ処理なんだけど…
どっちも重要ですね。ピボットテーブルだから「どっち」が重要ということはありません。
CPUが遅いと計算に時間がかかるでしょうし、メモリが少ないとディスクにスワップして時間がかかるでしょう。
理想を言えば、高速なCPUと大量のメモリが望ましいです。
なお、複数のシートを使うとはいえ、Excelで15万件のデータを扱うのは荷が重すぎます。
ワークシートが65536行までしかないってことは、だいたいそのくらいまでが限度と考えていいでしょう。
Accessなどのデータベースソフトを検討されてはいかがですか?
AccessのデータをExcelでピボットテーブルすることもできますよ。
ページの先頭に戻る
セル値に「A"」が含まれている場合、A1="A"" の部分でどの様に表現すればよいかがわかりません。
=IF(NOT(ISERROR(FIND("A""",A1))),100,200)
ではいかがでしょう。
ページの先頭に戻る
VLOOKUP関数の表引きで、一致している複数のデータを参照するには?
VLOOKUP関数だけでなく、それを実現する単体の関数はExcelにありません。
実現するには、いくつかの関数を組み合わせます。
たとえば…というサンプルを用意しました。下記リンクからダウンロードできます。
サンプルブックのダウンロード「sample02.xls」
ページの先頭に戻る
数値の6.6を6と切り捨てるには?
数値を切り捨てるにはいくつかの関数が使えます。セルA1に「6.6」が入力されているとき、次の関数はすべて「6」を返します。
=INT(A1)
=ROUNDDOWN(A1,0)
=TRUNC(A1)
=FLOOR(A1,1)
ページの先頭に戻る
別ブックを参照するとき、ブックのパスを相対参照で指定できますか?
できません。他ブックへの参照は絶対パスを指定します。
ページの先頭に戻る
年齢の統計で、何々以上何々未満の人数のカウントの方法は?
いろんなやり方がありますが、COUNTIF関数を2つ使うとカウントできます。
セル範囲A2:A20に「18」のように数値で年齢が入力されているとき、10代(10〜19)をカウントするには、
=COUNTIF(A2:A20,"<20")-COUNTIF(A2:A20,"<10") のようにします。
ページの先頭に戻る
数式を移動しても、常に1つ上のセルを参照するには?
いろんな方法がありますけど、一番簡単なのは
=INDIRECT("R[-1]C",FALSE)
でしょうかね。
ページの先頭に戻る
TEXT関数に指定できる書式記号とは?
基本的には、[セルの書式設定]ダイアログボックスの[表示形式]で設定する
ユーザー定義書式で使える表示記号と同じものが使えます。
ただし、色を変更することはできません。
ちなみに、VBAのFormat関数で使える書式記号は、ユーザー定義書式と微妙に異なります。
ページの先頭に戻る
0以外のセルの平均値を求めるには?
いろんな方法がありますけど、
=SUM(A1:A5)/COUNTIF(A1:A5,"<>0")
のように、合計を「0でない個数」で割ると求められます。
ページの先頭に戻る
上位3つの数字の平均を求めるには?
=(LARGE(A1:A7,1)+LARGE(A1:A7,2)+LARGE(A1:A7,3))/3
で、いかがでしょう。
ページの先頭に戻る
月末の日を調べるには?
たとえば今月の月末でしたら、
=DAY(DATE(YEAR(NOW()),MONTH(NOW())+1,1)-1)
で調べられます。
来月「MONTH(NOW())+1」の1日から1を引いた日が、今月の月末です。
ページの先頭に戻る
郵便番号から住所に変換する関数はありますか?
関数にはありません。
アドインでしたら、Microsoftが公開していますよ。
Excel アドイン: 郵便番号変換ウィザード
ページの先頭に戻る
ある日付が祝日かどうか調べるには?
日付が祝日かどうかを判定する関数はありません。
どこかのセルに「2004/1/1」「2004/1/12」など祝日のデータを入力しておき、
調べたい日付がそのデータ内に存在するかどうかで判定します。
判定の方法はいろいろ考えられますが、たとえば日付がセルA1に入力され、祝日データに「祝日」という名前を設定した場合、

 =COUNTIF(祝日,A1)が1だったら祝日、0だったら祝日でない
 =MATCH(A1,祝日,0)がエラーだったら祝日でない、エラーじゃなかったら祝日

などとして判定できます。
ページの先頭に戻る
関数で文字のサイズを変更するには?
数式や関数で文字のサイズを自動的に変更することはできません。
条件付き書式でも文字のサイズは設定できませんから、マクロでないと無理でしょうね。
ページの先頭に戻る
右端の1文字を削除するには?
「東京都」の"都"や「1234」の"4"のように右端の1文字を削除するには次のようにします。
文字列や数値がセルA1に入力されている場合は…

 =LEFT(A1,LEN(A1)-1)

関数は組み合わせて使うものです。どう組み合わせるかは発想しだいです。
ページの先頭に戻る
セルの文字色や背景色をカウントするには?
関数だけではできません。
名前とExcel 4.0マクロを使えば可能ですけど、簡単ではありません。
これも次期バージョンに期待ですね(^^;
ページの先頭に戻る
VLOOKUP関数のエラーを表示しない方法は?
まぁ、VLOOKUP関数に限りませんが...

 ・IF関数と組み合わせる
 ・条件付き書式などでエラーを非表示にする

あたりが簡単でしょうね。
ページの先頭に戻る
土日を除いた日数や日付を計算するには?
WORKDAY関数やNETWORKDAYS関数を使ってください。
これらの関数は、指定した期間から土曜と日曜、それに指定した独自の祝日などを除いた日数や日付を返します。
使用例はサンプルブックをご覧ください。下記のリンクからダウンロードできます。
サンプルブックのダウンロード「sample04.xls」

なお、WORKDAY関数とNETWORKDAYS関数は「分析ツール」アドインを組み込まないと使用できません。
また、土日以外の曜日を除くことはできません。
ページの先頭に戻る
文字色ごとにセルを計算するには?
たとえば、シート内の「赤字」セルだけを合計するとか、そういうことですよね。
関数だけは非常に難しいです。というか、完全には不可能に近いです。
できないと思ってください。
ページの先頭に戻る
セルに現在の時刻をリアルタイムで表示するには?
できません。
自分自身を外部リンクさせるという裏技もありますが、かなり高度なテクニックです。
いろいろな制約もありますし、やり方を教わればできる…というレベルではありません。
できないと割り切る方が得策でしょう。
それより、どうしても!絶対に!現在の時刻をリアルタイム表示しなければならないのかを検討しましょう。
どうしても現在の時刻表示が必要なら・・・
私なら、ダイソーで時計を買ってきて、ディスプレイに貼り付けます。
ページの先頭に戻る
文字間のスペースを除去するには?
セルに「田中 亨」(姓と名の間に半角スペース)と入力されていたとき、この半角スペースを除去したいケースですね。
ExcelのTRIM関数は、余分なスペースを除去する働きがありますが、文字列の前後にあるスペースしか除去できません。
TRIM関数が有効なのは「 田中亨 」のようなケースです。

文字列中のスペースを除去するには、SUBSTITUTE関数を使います。
SUBSTITUTE関数は、指定した文字列を他の文字列に置換する関数です。
SUBSTITUTE関数で、半角スペース(" ")を空欄("")に置換してやればOKです。
「田中 亨」がセルA1に入力されているとき、=SUBSTITUTE(A1," ","")とします。
万が一、ひとつのセル中に半角と全角のスペースが混在していたり、
どちらのスペースが入っているかわからないようなときは、次のように両方除去しちゃいましょう。
=SUBSTITUTE(SUBSTITUTE(A1," ","")," ","")
赤の" "は「半角スペース」、
青の" "は「全角スペース」を指定しています。
SUBSTITUTE関数はけっこうおもしろいので、そのうち「この関数は、こう使え!」で解説します。
ページの先頭に戻る
TRANSPOSE関数の使い方は?
たとえば、セルA1:C10の行列を入れ替えて、セルA20を左上としたセル範囲に表示したいときは次のようにします。
  1. セルA20:J22を選択する
  2. =TRANSPOSE(A1:C10)と入力し…
  3. Shiftキー+Ctrlキー+Enterキーを押す
TRANSPOSE関数は、変換後の全セルに配列として入力します。

個人的には、あまり必要性を感じない関数です。
ほかのいろんな方法で行列の入れ替えは実現できますからね。
ページの先頭に戻る



■グラフ
グラフでY軸を3つ(X軸は共通)にする方法はありませんか?
残念ですが、できません。
2DグラフのY軸は2つまでです。
ページの先頭に戻る
横棒グラフで項目軸(Y軸)の項目名を左詰めにできませんか?
できないと思いますよ。
ページの先頭に戻る
特定の系列だけグラフの種類を変えるには?
系列を右クリックして[グラフの種類]を実行します。
表示される[グラフの種類]ダイアログボックスでグラフを選択します。
ページの先頭に戻る



■マクロ/VBA
隣のセルを参照するには?
いくつか方法がありますが、Offsetプロパティが便利です。
Range("B3").Offset(0, -1)は、セルB3の左隣を参照します。
Offset(行,列)と覚えてください。
Offset(1,0)---1行下のセル
Offset(-1,0)--1行上のセル
Offset(0,1)---1列右のセル
Offset(0,-1)--1列左のセル
です。
ページの先頭に戻る
セルのデータを名前にしてブックを保存するには?
セルA1のデータを名前にして保存するのなら、
ActiveWorkbook.SaveAs FileName:=Range("A1")
すでに同名ブックが存在すると「上書きしますか?」と聞かれます。
それが嫌でしたら、
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Range("A1")
Application.DisplayAlerts = True
とします。
ページの先頭に戻る
Sheet1の任意のセルから、Sheet2の任意のセルへハイパーリンクをVBAから設定したいのですが?
アクティブセルからSheet2のセルA1へのリンクは、
Sheets("Sheet1").Hyperlinks.Add Anchor:=ActiveCell, _
                                Address:="", _
                                SubAddress:="Sheet2!A1", _
                                TextToDisplay:="リンクだよ"
とします。マクロ記録してみるとわかりますよ(^_^)
ページの先頭に戻る
Integer型の桁数を指定することはできないのですか?
できませんし、する必要もないと思いますけど(^^;
ページの先頭に戻る
配列内のデータをテキストファイルに書き出すには?
配列全体を書き出すのはなく、配列の各要素を書き出します。
たとえば、
Sub test()
    Dim buf(100) As Long, i As Long
    For i = 1 To 100
        buf(i) = i
    Next i
    Open "C:\Output.txt" For Output As #1
        For i = 1 To 100
            Write #1, buf(i)
        Next i
    Close #1
End Sub
みたいに。数千件程度のデータでしたら、速度的にも問題ないでしょう。

ページの先頭に戻る
ユーザー定義関数にセルを渡すには?
ユーザー定義関数を宣言するとき、引数のタイプをRange型に指定します。
たとえば次のユーザー定義関数は、引数に指定したセルまたはセル範囲のアドレスを返します。
Function myFunction(tmp As Range)
    myFunction = tmp.Address
End Function
ページの先頭に戻る
入力規則のリストでWorksheet_Changeイベントが発生しないのですが?
Excel 97までは、入力規則のリストで[元の値]にセル参照を指定した場合、
リストを変更してもWorksheet_Changeイベントが発生しませんでした。
Excel 2000からはWorksheet_Changeイベントが発生するようになりました。
ページの先頭に戻る
Officeクリップボードをマクロから操作するには?
Excel 2000のOfficeクリップボードでしたら、
CommandBars("Clipboard").Controls(4).Execute でクリアできます。
CommandBars("Clipboard").Controls(3).Controls(n).Caption でn番目のキャプションを取得できます。
ページの先頭に戻る
マウスのスクロール ボタンをマクロで操作するには?
APIを使ってマウスのメッセージをフックしなければなりませんが、
ものすごく難しいですから「できない」と思った方がいいです。
ページの先頭に戻る
選択されている先頭行と最終行を調べるには?
Rows("8:14").Select のように選択しているとき、
Selection.Rows(1).Row で先頭行、Selection.Rows(Selection.Rows.Count).Row で最終行がわかります。
ページの先頭に戻る
マクロ抜きでExcelのデータのみを保存する事は出来ますか?
VBAのコードなどマクロに関するすべてのデータはブック内に保存されます。
マクロ抜きでシートのデータだけを保存するには、そのブックからマクロを削除してから保存するしかありません。
ページの先頭に戻る
マクロだけを別のブックにコピ−することはできますか?
手動でやるならVBE上でコピー&ペーストします。
UserFormはプロジェクトエクスプローラ上でドラッグして他ブックへコピーできます。
マクロなどを使って自動的にコピーするのは、かなり難しいので"できない"と思った方がいいです。
そういうことをしないような運用方法を考える方が得策です。
ページの先頭に戻る
オートフィルタの抽出結果をカウント&メッセージボックスで表示するには?
こんな感じです。
Sub test()
    Dim DataCount As Long
    DataCount = WorksheetFunction.Subtotal(3, ActiveSheet.Columns(1)) - 1
    MsgBox DataCount
End Sub
SUBTOTAL関数でアクティブシートのA列をカウントしています。
ページの先頭に戻る
マクロがないのに「このブックにはマクロが…」と表示される?
ほとんどの場合は「マクロがない」と勘違いしているだけで、実際にはマクロが含まれています。
たとえばブック内に標準モジュールがあると、その標準モジュール自体がマクロと認識されますし、
Sub ××()やEnd Subも立派なマクロです。SubやEndはVBAのステートメントですから。
[コントロールツールボックス]から配置したコントロールをうっかりダブルクリックすると、
Sub ××()のようなプロシージャが自動的に用意されます。慌てて戻っても"後の祭り"です。
そうした空のプロシージャを完全に削除しないと、そのブックにはマクロが含まれていることになります。
Excelのメッセージを疑う前に、自分の動作を疑いましょう。
ページの先頭に戻る
Officeクリップボードを操作するには?
Office 2000の「Officeクリップボード」はCommandBars("Clipboard")のようにCommandBarオブジェクトとして操作できます。
Office XP(Excel 2002)では「Officeクリップボード」の仕様がXMLに変更されましたので、上記の方法では操作できなくなりました。
VBA以外の方法を用いれば操作可能だと思いますが現実的ではありません。やりたいことを再認識して、別の方法を検討するのが得策です。
ページの先頭に戻る
ユーザー定義書式を削除するには?
WorkbookオブジェクトのDeleteNumberFormatメソッドを使います。
次のコードは、アクティブブックに登録されている「#人」というユーザー定義書式を削除します。
Sub test()
    ActiveWorkbook.DeleteNumberFormat NumberFormat:="#人"
End Sub
ただし、登録されていないユーザー定義書式を削除しようとしてもエラーは発生しません。
また、VBAには「登録されているユーザー定義書式」を取得するプロパティやメソッドはありません。
ページの先頭に戻る
文字列が含まれているかどうかを判定するには?
InStr関数を使います。
詳しくはマクロとVBAのテクニック「データが含まれているかどうか判定する」をご覧ください。
ページの先頭に戻る
2つの変数を入れ替えるには?
Sub test()
    Dim A, B, C
    A = "tanaka"
    B = "123"
    C = A
    A = B
    B = C
    MsgBox A & vbCrLf & B
End Sub
のようにします。
ご質問では、この方法だと「時間がかかる」と書かれていましたが、そんなことはありません。
変数の代入はメモリの内部で行われますので、相当に大きな変数でも一瞬です。
時間がかかるとしたら、この"入れ替え"ではなく他の部分でしょう。
ページの先頭に戻る
セルのデータが数値かどうか?
セルA1に入力されているデータが数値化どうかを調べるにはIsNumeric関数を使います。IsNumeric関数は、引数が数値のときTrueを返します。
Sub test()
    MsgBox IsNumeric(Range("A1"))
End Sub
ほかにも、日付データかどうかを調べるIsDate関数や、セル内の数式がエラーかどうかを調べるIsError関数、セルが空欄かどうかを判定できるIsEmpty関数などがあります。ただし、セルのデータが文字列かどうかを調べるIsString関数はありません
ページの先頭に戻る
セルに数式が入力されているかどうか?
セルに数式が入力されているかどうかは、上記のように関数を使うのではなく、RangeオブジェクトのHasFormulaプロパティを使います。HasFormulaプロパティは、数式が入力されているとTrueを返します。
Sub test()
    If Range("A1").HasFormula Then
        MsgBox "数式が入力されています"
    Else
        MsgBox "数式が入力されていません"
    End If
End Sub
ページの先頭に戻る
マクロって難しいですか?
難しいです。ちゃんと基本を学習しなければ、決してマスターすることはできません。よく雑誌などに書いてある「マクロなんて簡単だよ、マクロ記録から始めよう!」みたいな記事は信用してはいけません。まぁ、書いている本人が言うのもナニですが(^^; VBAの学習はマクロ記録から初めては絶対にいけません。マクロ記録の前に、嫌でもVBAの基本構文を理解しなければなりません。「マクロ記録から始めよう」的な解説では、次に記録したコードを「ちょこっと修正してみましょう」と続きます。だけど、記録されたコードを読めなかったら、ちょこっとも何も編集なんてできません。ABCもわからない人に英語の本を渡して「さあ、喋ってみよう!」と言っているようなものです。
ページの先頭に戻る
VBAで複数のプロシージャを並列に処理させることはできますか?
できません。できないと思った方がいいです。ただ、発想とテクニックしだいで、さも並列に処理されているように見せることは可能でしょう。
ページの先頭に戻る
マクロでマクロ(自分自身)を削除できますか?
できますけど簡単ではありません。一応サンプルを用意しましたので「自分自身を削除するマクロ」をご覧ください。これを見て、まだわからないようでしたら、悪いことは言いません、あきらめた方がいいです。
ページの先頭に戻る
VBAでプログラムを作る時は、適正な容量があるのでしょうか
何をもって「適正」とするか…ですね。私がプログラムを作るのならないと答えます。ファイルサイズが大きくなって読み込みや保存に時間がかかるようなら、時間がかからないように作ります。再計算に時間がかかるのなら、時間がかからないように作ります。VBAに限りませんが、プログラムは作り手のスキルによって、できることが違ってきます。ファイルサイズが大きくなって、ExcelのVBAでは実用的なプログラムが作れないのは、その人の実力がその程度だということでしょう。なので、適正な容量は、パソコンのスペックや、それを運用する現場の人的な環境、さらには、プログラマの実力によって変わると思います。
ページの先頭に戻る



■その他
複数シートに記載したデータを、作業内容により任意に組み合わせ、一つのシート(データ)にしたいのですが可能でしょうか?
可能ですが、データの構造などによってやり方は異なります。
マクロを使わないとできないケースもあるでしょうし、関数で実現できるケースもあるでしょう。
あるいは、[データ]メニューの[統合]なども役立つかもしれません。
いずれにしても汎用的な方法はなく、ケースバイケースです。
ページの先頭に戻る
シートに貼り付けたURLにハイパーリンクを自動設定するには?
自動的にハイパーリンクを設定するのは無理だと思いますよ。
セルを編集状態にしてEnterキーを押せばハイパーリンクが設定されますから、
[F2]キー→Enterキーを連打してはいかがですか?
ページの先頭に戻る
右クリックでのメニューに任意のコマンドやマクロを追加するには?
マクロで追加します。
UserForm上でショートカットメニューを追加する方法は
UserForm上でショートカットメニューを使う
セルの右クリックメニューに独自のコマンドを追加する方法は
右クリックメニューに追加
をご覧ください。
ページの先頭に戻る
列番号が1・2・3…となってしまいました?
[オプション]ダイアログボックス[全般]タブの[R1C1参照形式を使用する]チェックボックスをオフにしてください。
ページの先頭に戻る
スピンボタンで日付を増減させるには?
スピンボタンで増減できる値に日付を設定することはできません。
そこで発想を変えて「本日+スピンボタンの数値」または「本日−スピンボタンの数値」とスピンボタンの結果を今日の日付に加減してやります。
実際に見た方が早いでしょう。サンプルを用意しましたので下記リンクからダウンロードしてください。
サンプルブックのダウンロード「sample03.xls」
ページの先頭に戻る
セルに入力したファイル名の画像を表示するには?
マクロを使わないとできません。
すでにワークシート上に挿入している画像なら、セルの値によって表示を切り替えることが可能です。
詳しくは「自動的に画像を切り替える」をご覧ください
ページの先頭に戻る
日本語が正しく五十音順に並ばない?
日本語入力したセルを、並べ替えたり、オートフィルタで操作したときに、正しく五十音順に並ばない場合は、日本語が入力されているセルに、正しくふりがなが設定されているかを確認してください。Excelが日本語の並べ替えを五十音順に行うとき、標準ではセルのふりがなを使います。

セルにふりがなが設定されているかどうか調べるには→[書式]-[ふりがな]-[表示/非表示]
ふりがなを使わないで並べ替えするには→[データ]-[並べ替え]-[オプション]-[ふりがなを使わない]
ページの先頭に戻る
ExcelのデータをWordの差込印刷で使うには?
すいません、私の専門はExcelなのでWordに関して詳しくありません。
でも、このような差込印刷はポピュラーなテクニックですし、Microsoftも想定している機能です。googleなどの検索サイトで「Word 差込印刷 Excel」といったキーワードで検索すると、具体的なやり方の書かれたページを見つけることができると思います。
ちなみに、私が検索したら下のページが見つかりました。ていねいな解説で手順もわかりやすいです。
■Wordの「差し込み印刷」機能を使う! Word2000以前の場合 差込印刷
http://www.miyazaki-cci.or.jp/nichinan/pc/case9.html
ページの先頭に戻る
スキャナのデータをExcelに変換するには?
スキャナで読み込んだデータは画像形式です。画像をExcelのデータ形式に変換する機能は、Excelにはありませんし、Excelの仕事ではありません。
ただし、そうしたことを行うソフトは存在します。スキャナに付属するアプリケーションに、そうした機能を持つソフトが含まれているかもしれませんし、ベクターなどで探せばオンラインソフトも見つかるかもしれません。
ページの先頭に戻る
入力規則のリストに表示される行数やフォントを変更するには?
変更できません。
ページの先頭に戻る
チェックボックスのチェック欄を大きくするには?
大きさを変えることはできません。
ページの先頭に戻る
チェックボックスをクリックしたときにマクロを実行するには?
チェックボックスに限りませんが、コントロールをクリックしたときにマクロを実行するには、コントロールを右クリックして表示される[マクロの登録]で実行したいマクロを選択します。
ページの先頭に戻る
メニューバーにツールが出てこないのですが、なぜでしょうか?
さあ、なぜでしょう。どんな使い方をしたのか知らないのでわかりません。もしかすると、Altキーを押しながら[ツール]メニューをドラッグしてしまったのでは?(参考:「ツールバーのボタンをドラッグする」)メニューバーをリセットすれば、消えてしまったメニューを復活できます。ワークシートメニューバーをリセットするには、次のようにします

  1. [ツール]-[ユーザー設定]をクリックします。実行すると[ユーザー設定]ダイアログボックスが表示されます
  2. [ツールバー]タブを開きます
  3. [ツールバー]リストで「ワークシートメニューバー」を選択します
  4. [リセット]ボタンをクリックします
  5. 「リセットしてもよろしいですか?」という確認メッセージで[OK]ボタンをクリックします
  6. [閉じる]ボタンをクリックして[ユーザー設定]ダイアログボックスを閉じます
ページの先頭に戻る