エクセルの勉強部屋のホ−ムへ

戻る

エクセルファイルのセキュリティ強化
「印刷」も「上書き」できないように、「パスワード」を解除できないようにする
「マクロを必ず有効に」、「マクロを改変できないように」する

添付ファイルを参照してください。

添付ファイルには、パスワードが設定されています。
読み取りパスワード
12340
書き込みパスワード
56780

ファイルを開くと、

[このファイルを使用するために、マクロを有効にしてから、このボタンを押してください。]
のテキストボックスが表示されます。

マクロを有効にして、このテキストボックスを押さないとファイルのシート(この場合[Sheet1])を見ることができません。
この状態で、ファイルを閉じると、自動的に再度シート(この場合[Sheet1])が非表示になります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
@印刷ができないようにしたい
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
「印刷」または「印刷プレビュー」での印刷を無効にします。

該当のファイルのThisWorkbookに、次のマクロを記述します。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'印刷をキャンセルする
Cancel = True
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
A名前をつけて別保存をさせたくない
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
名前をつけて保存ができなくします。

該当のファイルのThisWorkbookに、次のマクロを記述します。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'名前をつけての保存をキャンセルする
If SaveAsUI = True Then Cancel = True
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Bパスワードで特定の人だけが閲覧(追加・変更・削除等々)読み取り専用のみできる
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
「ファイルを保存」する際に「ツール」の「全般オプション」から
「保存オプション」ダイアログボックスで、「読み取りパスワード」(この場合"12340")
「書き込みパスワード」(この場合"56780")をそれぞれ違うパスワードで設定します。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
など、勉強部屋にあるQAの中でいくつかのマクロで対応はできるのですが、
「ファイル 2005/06/12 エクセルファイルのパスワード解除方法」
を実行すると全てのセキュリティが解除されてしまいます。
何か良い手立てはありますか?
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
パスワードを解除するためには、名前をつけて保存から「ツール」「全般オプション」を選択してパスワードを解除する必要がありますが、
名前をつけて保存ができまいようにしていますから、パスワードの解除は不可能です。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Dマクロを有効にしないとファイルを見られないようにしたい? 
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ご質問の意味がわかりませんが、
「VBA・その他」「2013/03/21」
「ファイルを開いた時に「マクロを有効するように」注意表示する方法」を使って、
マクロを無効にして開くと対象のシートが見えないようにすることは可能です。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
開くべきシート(この場合[Sheet1])は、「書式」「シート」で非表示にしておきます。

ファイルを開くと、
マクロを有効にするためのメッセージのテキストボックス
[このファイルを使用するために、マクロを有効にしてから、このボタンを押してください。]
を表示したシート[(1)]が表示されますので、
「マクロ」を「有効」にしてから、このテキストボックスを押します。シート[Sheet1]が表示され、シート[(1)]が非表示になります。
「マクロ」が「無効」の場合は、マクロが機能しないので、何も変化がありません。

module1に、次のマクロコードを記述します。

Sub シートの非表示()
'シート(1)を表示します。
Sheets("(1)").Visible = True
'シート(Sheet1)を非表示にします。
Sheets("Sheet1").Visible = False
End Sub

Sub シートの再表示()
'シート(Sheet1)を表示します。
Sheets("Sheet1").Visible = True
'シート(1)を非表示にします。
Sheets("(1)").Visible = False
End Sub

シート[(1)]のテキストボックスには、マクロの登録から、「シートの再表示」のマクロコードを登録します。


ThisWorkbookには次のマクロコードを記述します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ファイルを閉じる前にシートを非表示にします
シートの非表示
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Eエクセルファイルを開いて様々なセキュリティマクロを記述しても画面ハードコピーをされると防ぎようがありません。
これはファンクションキーの問題なので無理でしょうか?
この時もパスワード解除方法 を行うと解除できてしまうのでしょうか?
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
「VBA・その他」2004/01/08」「VBAマクロコードを非表示にする方法
によってマクロコードそのものを見えない(改変できない)ようにすることができます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

戻る

セルの結合をした場合にセルの値も結合する。また、セルの結合時に区切り文字することはできますか
セルの結合をした場合に、最左上端のセルの値以外はセル値が削除されてしまいますが、セルの値を保持したままセルの値を結合したい。
更に、セルの結合時に、区切り文字を指定した結合したい場合のご質問ですね。

「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に「セルの結合と解除」アドインソフト
があります。
・マウスの右ボタンの「ショートカットメニュー」に「セル結合」のメニューが追加されます。
「結合」 
「解除」 
「セルの文字とセル結合」
「同上値のセル結合」 
「同左値のセル結合」 
「結合を解除して同上値貼り付け」 
「結合を解除して同左値貼り付け」 

このうちの「セルの文字とセル結合」
がご希望の機能
1.セル結合した際に選択範囲のセルの値を文字列結合
2.区切り文字を入力できる
があります。

説明はこちら
http://kiyopon.sakura.ne.jp/soft/ketugo.htm

ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/ketugo.exe

「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
また、関数の機能を強化した、
「セル結合」ユーザー定義関数
もあります。
選択セル範囲の文字列を指定の区切り文字で結合します。
対象のセル範囲にデータがない場合も、指定の区切り文字でセル範囲がセル結合されます。
区切り文字を"^"とすれば、セル内改行します。
区切り文字の既定値は""(文字無し)です。
引数[空白セル]に0を指定すると、空白セルを飛ばしてセルの文字を結合します。
通常の組み込み関数と同じようにワークシート上で使用できる関数です。

説明はこちら
http://kiyopon.sakura.ne.jp/soft/cellketugo.html

ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/cellketugo.exe


A列の値が"円"の場合、B,C,Dの書式を整数に、それ以外は小数点以下2桁にしたい

添付ファイルを参照してください。
ファイルにはマクロが記述してありますので、ファイルを開く際に「マクロ」を「有効」にして下さい。


残念ですが、別のセルの値によって表示形式(小数点以下の桁数)を指定することはできません。
数値の桁数を決める行が決まっているならば、その行を「セルの書式設定」で「小数点以下の桁数」を2桁まで、あるいは0に指定することかダメですか。

添付ファイルを参照してください。
「セルの書式設定」シートにセルの書式を設定してあります。

A列の値が、"円"以外の"ドル"、"ペソ"の行を、小数点以下2桁にして、桁区切り(,)を使用する場合
セル範囲B2:D3,B5:D5を選択し、「ホーム」「セル」の「書式」の「セルの書式設定」

「セルの書式設定」ダイアログボックスの「分類」で、「数値」を選択し、「小数点以下の桁数」を「2」、「桁区切り(,)を使用する」にチェックを入れ、「OK」ボタン押します。


A列の値が、"円"の行は、
小数点以下0桁にして、桁区切り(,)を使用する場合
セル範囲B4:D4を選択し、「ホーム」「セル」の「書式」の「セルの書式設定」

「セルの書式設定」ダイアログボックスの「分類」で、「数値」を選択し、「小数点以下の桁数」を「0」、「桁区切り(,)を使用する」にチェックを入れ、「OK」ボタン押します。


別の方法
VBAを使えば、セルの値によって表示形式を指定することは可能です。
添付ファイルを参照してください。
シート「VBA」に設定してあります。
例では、A列のセルの値が"円"以外の場合は、小数点以下2桁まで表示し、それ以外は、小数点以下0まで表示し、それぞれ「桁区切り(,)を使用する」にしています。

マクロコードは、つぎのようになります。

Private Sub Worksheet_Change(ByVal Target As Range)
'A列の値が"日本"の場合、B,C,Dの書式を整数に、
'それ以外は小数点以下2桁にしたい
Dim c, r, Z, a, i
'列番号を変数cに
c = Target.Column
'行番号を変数rに
r = Target.Row
'変数Zにセルの値
Z = Cells(r, c)
a = Cells(r, c).Address
'変数aにセルアドレス
'i=A列の値
i = Cells(r, 1)
'もし列番号が2〜4(B,C,D列)の場合
If c >= 2 And c <= 4 Then
If i <> "円" Then
'A列の値が円以外の場合
Range(a).NumberFormatLocal = "#,##0.00"
'A列の値が円の場合
Else
Range(a).NumberFormatLocal = "#,##0"
End If
Else
End If
End Sub

このコードは、シート見出し[VBA]を、マウスの右ボタンのショートカットメニュー「コードの表示」を選択すると、「Microsoft Visual Basic」が起動して、コードウィンドウにに表示されます。

シート上でマウスの右クリックのショートカットメニューを表示しないようにする

添付ファイルを参照してください。
【注意】
右クリックのショートカットメニューを表示させないようにするには、問題があります。
右クリックのショートカットニューをまったく表示しないようにすることは可能ですが、
該当のファイルを閉じる前に右クリツクのショートカットニューを元の状態に戻さないと、
以降どのファイルの操作でもずっと右クリツクのショートカットメニューが表示されなくなります。

添付ファイルにはファイルを閉じると、セルのショートカットメニューが再表示されるようにマクロが記述してありますので、安心してください。

シート見出しをマウスの右ボタンのショートカットメニュー[コードの表示」から
次のコードを記述します。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'セルのショートカットメニューを表示しない
CommandBars("Cell").Enabled = False
End Sub
このコードを記述すると、すべてのシートでマウスの右ボタンのショートカットメニューが全て表示されなくなります。

該当のファイルを閉じる前に、右クリツクのショートカットメニューが表示されるように、
必ず、[ThisWorkBook]に次のコードを記述してください。


Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ファイルを閉じる前に
'セルのショートカットメニューを再表示する
Application.CommandBars("Cell").Enabled = True
End Sub


セルの「コピー」「貼り付け」ができないようにする。

見本のファイルを参照してください。このファイルのシート{Sheet1}で、セル「コピー」後の「貼り付け」ができないようにしています。

いずれかのセルを選択して、マウスの右クリックから「コピー」を選択(または、キーボードショートカットキーの[Ctrl]+[C])します。

コピーの待ち状態で、別のセルを選択すると、「貼り付け」のコマンドが使えなくなります。
マウスの右クリックの「コピー」でも、ショートカットキーの[Ctrl]+[C]でも同様に、
別のセルを選択した時点で、切り取りモードまたはコピーモードを解除して、点滅している枠線を取り除きます。

ただし、
・セルのドラッグによる移動
・セル内を選択または、数式バーでデータをコピー
する場合、「貼り付け」は可能です。

下のコードを対象のワークシートのシート見出しをマウスの右ボタンで選択し、
表示されるショートカットメニュー「コードの表示」で表示される「Microsoft Visual Basic」のコードウィンドウに貼り付けます。
マクロコードは次のようになります。

Private Sub Worksheet_Deactivate()
'別のシートを選択すると、
'切り取りモード、またはコピーモードを解除し、点滅している枠線を取り除き、
'「貼り付け」コマンドが使えなくなります。
Application.CutCopyMode = False
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' 選択中のシートのセルを移動した場合に
'切り取りモード、またはコピーモードを解除し、点滅している枠線を取り除き、
'「貼り付け」コマンドが使えなくなります。
Application.CutCopyMode = False
End Sub


別のブックを選択した場合にも「貼り付け」ができないようにするには、
下のマクロコードを「Microsoft Visual Basic」の対象のファイルの[ThisWokBook]コードウィンドウに貼り付けます。

Private Sub Workbook_Deactivate()
' 選択中のブックを非選択にした場合に
'切り取りモード、またはコピーモードを解除し、点滅している枠線を取り除き、
'「貼り付け」コマンドが使えなくなります。
Application.CutCopyMode = False

End Sub

戻る

ファイルを開いた時に「マクロを有効するように」注意表示する方法

添付ファイルを参照してください。
マクロを有効にしてください。というメッセージを表示するような「マクロ」を作成しました。

ファイルを開くと、
「このファイルを使用するために、マクロを有効にしてから、このボタンを押してください。」
という「メッセージを表示したボタン」を表示し、
マクロを有効にした後で、その「メッセージを表示したボタン」を押すと、「メッセージを表示したボタン」が消えるというものです。
マクロを有効にしないと、「マクロが使用出来ません。・・・・・」というメッセージが表示され、
「メッセージを表示したボタン」は消えないままとなります。

ボタン(この場合"Text Box 4")には、次のマクロコードを登録しています。
このマクロコードで、ボタン非表示をしています。

Sub ボタンを消す()
ActiveSheet.Shapes("Text Box 4").Visible = False
End Sub
このコードは、シート見出しのマウスの右ボタンを押し、ショートカットメニューの「コードの表示」を押すと確認できます。


次に、ファイルを開いた際には、いつも注意メッセージのボタンを表示させるため、ThisWorkbookに、次のマクロコードを登録しています。
このコードで、ファイルを閉じる際にボタンを表示しています。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets(1).Shapes("Text Box 4").Visible = True
End Sub

このコードは、[Alt]+{f11}を押して、「Microsoft Visual Basic」の左上の「プロジェクト」ウィンドウの中の「VBA Project(Book2(1)」の中の、{ThisWorkbook}を選択して、マウスの右ボタンを押し、ショートカットメニューの「コードの表示」を押すと確認できます。

図形へのマクロの登録手順

1.図形を選択し、数式バーの左の「名前ボックス」で、図形の名前を選択し、「コピー」します。

2. 手順の1.で確認コピーした図形の名前を
 見本のマクロコード
 ActiveSheet.Shapes("図形の名前").Visible = False
 の「図形の名前」の部分を選択し、貼り付けし、置き換えします。
3.図形をマウスの右ボタンで選択し、ショートカットメニュー「マクロの登録」を選択
4.「マクロの登録」ダイアログボックスで、「マクロ名」で表示されているマクロ名を修正し(必要なければこのまま)、「新規作成」ボタンを押す。
5.表示された「Microsoft Visual Basic」で、Sub の行のマクロ名を修正しないでください。
6.手順の2.で作成したマクロコードををSubとEndの間の行に貼り付けます。
このマクロコードは、
「標準モジュール」の「Module1」に新規作成されます。

ファイルを閉じる際に、図形を再表示するマクロコードをThisWorkbookに記述する手順。
[Alt]+{f11}を押して、「Microsoft Visual Basic」の左上の「プロジェクト」ウィンドウの中の「VBA Project(ブック名)」の中の、{ThisWorkbook}を選択して、マウスの 右ボタ ンを押し、ショートカットメニューの「コードの表示」を押す。
ここで、(ブック名)は、作成しているファイル名により変わります。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets(1).Shapes("図形の名前").Visible = True
End Sub

このマクロコードは、先ほど説明した「図の非表示」のコードのFalseをTrueに置き換えたものとにていますが、
ActiveSheet
の部分が、
Sheets(1)
となっています。
ActiveSheetは、選択中のシートです。
Sheet(1)は、シート見出しの一番左のシートです。
Sheet(2)とすれば、シート見出しの左から2番目のシートを指します。


戻る

シートを選択すると、カレンダーの今日の日のセルを選択させる
添付ファイルには、マクロが記述してありますのでファイルを開く際に「マクロ」を「有効」にしてください。

シート「Sheet2」の
A:G列の4行目以降に日付入力形式でセルに日付が入力してあるとします。
手順としては、
最終のセルアドレスを取得します。
最終セルの行番号と列番号を取得します。
セル範囲を"$A$2"と最終セル範囲に設定します。
計算のための仮セルを最終行セルの1つ下のセルにします。
本日の日付と同じ日付のセルの行番号を変数rに代入します。
本日の日付と同じ日付のセルの列番号を変数cに代入します。
変数r+1,cのセルを選択します。
仮のセルの内容を削除します。

マクロコードは、次のようになります。
マクロコードの内容は、
対象のシート[Sheet2]のシート見出しをマウスの右ボタンのショートカットメニューで「コードの表示」を選択すると確認できます

Private Sub Worksheet_Activate()
'本日の日付のセルを選択します
Dim 最終セル, セル範囲, 最終行, 最終列, 仮
最終セル = Range("A1").SpecialCells(xlLastCell).Address
最終行 = Range(最終セル).Column
最終列 = Range(最終セル).Row
セル範囲 = "$A$2:" & 最終セル
仮 = Cells(最終行 + 1, 最終列).Address
Range(仮).FormulaArray = "=MIN(IF(TODAY()=" & セル範囲 & ",ROW(" & セル範囲 & ")))"
r = Range(仮)
Range(仮).FormulaArray = "=MIN(IF(TODAY()=" & セル範囲 & ",COLUMN(" & セル範囲 & ")))"
C = Range(仮)
Cells(r + 1, C).Select
Range(仮) = ""
End Sub

戻る

マクロでAファイルの各シートをBファイルに同一シート名でコピーしたい
添付ファイルを参照してください。
シート「説明」の「更新」ボタンを押すと、
「貼り付け先ファイルを開く」ダイアログボックスが表示されます。
対象のファイルを選択して「開く」ボタンを押します。
「コピー元ファイルを開く」ダイアログボックスが表示されます。
対象のファイルを選択して「開く」ボタンを押します。
対象のファイルの全部のシートがコピーされます。
シート名が同じ場合は、「貼り付け先ファイル」のシートが削除され、新しいシートがコピーされます。

マクロコードは次のようになります。

Sub コピー()
Dim sc '貼り付け先ファイルのシート数
Dim scn '貼り付け先ファイルのシート名
Dim F_T '貼り付け先ファイル名
Dim F_0 'コヒー元ファイル名
Dim cc 'コピー元のシート数
Dim ccn 'コピー元のシート名

On Error GoTo ed 'エラーの場合の処理
F_T = Application _
.GetOpenFilename("エクセルファイル(*.xls),*.xls", _
, "貼り付け先ファイルを開く")
If F_T = False Then GoTo ed
Workbooks.Open F_T
F_T = ActiveWorkbook.Name
sc = Workbooks(F_T).Sheets.Count
'作業用の仮シートの追加
ActiveWorkbook.Sheets.Add After:=Worksheets(sc)
ActiveSheet.Name = "仮"
F_0 = Application _
.GetOpenFilename("エクセルファイル(*.xls),*.xls", _
, "コピー元ファイルを開く")
If F_0 = False Then GoTo ed
Workbooks.Open F_0
F_0 = ActiveWorkbook.Name
cc = Workbooks(F_0).Sheets.Count
'このブックのシート名のすべてを繰り返し
For f = sc To 1 Step -1
scn = Workbooks(F_T).Sheets(f).Name
'コピー元のブックのシート名を繰り返し
For T = 1 To cc
ccn = Workbooks(F_0).Sheets(T).Name
'もし、シート名が同じなら
If scn = ccn And Workbooks(F_T).Sheets.Count > 1 Then
'シートの削除
Application.DisplayAlerts = False
Workbooks(F_T).Worksheets(ccn).Delete
Application.DisplayAlerts = True
Else
End If

Next T
Next f
'コピー元のブックのシート名を繰り返し
For T = cc To 1 Step -1
ccn = Workbooks(F_0).Sheets(T).Name
'シートのコピー
Workbooks(F_0).Worksheets(ccn).Copy _
Before:=Workbooks(F_T).Worksheets(1)
Next T
'作業用の仮シートの削除
Application.DisplayAlerts = False
Workbooks(F_T).Worksheets("仮").Delete
Application.DisplayAlerts = True

Workbooks(F_0).Close SaveChanges:=False

Exit Sub

ed: MsgBox "エラーが発生したため、処理を取り消しました"

End Sub

戻る

マクロ実行中に現れるメッセージボックスを表示しないで自動操作としたい
DisplayAlerts プロパティを使います。

DisplayAlertsの説明
True の場合、マクロの実行中に特定の警告やメッセージを表示します。
値の取得および設定が可能です。
ブール型 (Boolean) の値を使用します。
解説 このプロパティの既定値は True です。
マクロの実行中に、ユーザーに入力を促すメッセージや警告メッセージを表示させないようにするには、このプロパティに False を設定してください。
このプロパティを False に指定した場合、クロス プロセス コードの実行中以外は、コードの終了時に自動的に True に変更されます。
ブックを変更し SaveAs メソッドで既存のファイルを上書きする場合、上書きの警告メッセージは既定値では表示されません。
DisplayAlerts プロパティが True に設定されている場合に表示されます。
使用例
次の使用例は、Book1.xls ブックを閉じますが、変更の保存を確認するメッセージを表示しません。
Book1.xls の内容の変更は保存されません。
マクロコードは次のようになります。

'メッセージを表示しないようにします。
Application.DisplayAlerts = False
Workbooks("BOOK1.XLS").Close
'メッセージを表示するようにします。
Application.DisplayAlerts = True

戻る

一つのマクロ実行ボタンを押すごとにボタンの文字列と機能を切り替える
添付ファイルを参照してください。
ファイルには、マクロが記述してありますので、ファイルを開く際には「マクロ」を「有効」にしてください。
ボタンを選択する毎に、ボタンの文字は、「実行」と「戻る」に交互に変わります。




マクロコードは次のようになります。

Sub ボタン1_Click()
ActiveSheet.Shapes("Button 1").Select
Button_1 = Selection.Characters.Text
ターゲット = Range("A1").Address
'ボタンの文字が"戻る"の場合
If Button_1 = "戻る" Then
'ここに実行するプロシージャを記述します
'この例では、ターゲットのセルの文字色を変更します。
Range(ターゲット).Font.ColorIndex = 0
'ボタンの文字を変更します
Selection.Characters.Text = "実行"
Else
'ここに実行するプロシージャを記述します
'この例では、ターゲットのセルの文字色を変更します。
Range(ターゲット).Font.ColorIndex = 3
'ボタンの文字を変更します
Selection.Characters.Text = "戻る"
End If
Range(ターゲット).Select
End Sub

解説
ターゲット = Range("A1").Address
の行でフォントの色を変える対象のセルを指定しす。
必要ならここで修正します。

注意
1行目のオブジェクト名の"Button 1"は、作成したフォームあるいは図形によって変わってきますので、新たに作成する場合は修正が必要です。
マクロを記述するボタンを作成後、「ツール」「マクロ」「新しいマクロの記録」で、ボタンの「テキストの編集」をして、作成されたマクロコードを[Alt]+[F11]キーで表示される[Microsoft Visual Basic」のコードウィンドウでボタン名を確認して修正してください。


戻る

文字の色別にセルの数をカウントする・文字の色別にデータを合計する
残念ですが、エクセルにはセルの色や文字の色を数式として認識できる関数がありません。
しかし、「エクセルで使えるソフト」http://kiyopon.sakura.ne.jp/soft/index.htm
に、私の作成した「文字色」ユーザー定義関数を使えば、対象セルの文字の色番号を返します。

通常の組み込み関数と同じようにワークシート上で使用できる関数です。
「配列数式」に対応したため、該当の色のセル数や、該当の色のセルに入力されている数値の合計を返すこともできます。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/irobango.htm#%95%B6%8E%9A%90F
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/irobango.exe
注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」
http://kiyopon.sakura.ne.jp/soft/addin.html
を、必ずお読みください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
添付ファイルを参照してください。
ファイルには、「文字色」ユーザー定義関数のマクロが記述してありますので、ファイルを開く際には「マクロ」を「有効」にしてください。

セルL1:M1には、文字の色を検索値とするため、それぞれの文字色を「黒」と「赤」にしておきます。

「配列数式」で、文字の色別にセル数を集計する方法

セルL2には、「配列数式」で、
=SUM(IF(文字色($B$2:$K$2)=文字色(L$1),1))
と入力し、[Shift]キーと[Ctrl]を押しながら、[Enter]キーを押して「配列数式」として確定します。
確定後数式は、{ }でくくられます。自分で{ }を入力してはいけません。
数式の意味
もし、セル範囲$B$2:$K$2の文字色が、セルL1の文字色と同じ場合は、1を返し、合計します。
この場合
7
が返ります。
このセルをコピーして右のセルM6に貼り付けます。

「配列数式」で、文字の色別にデータを集計する方法

セルL3には、「配列数式」で、
=SUM(IF(文字色($B$2:$K$2)=文字色(L$1),$B$3:$K$3))
と入力し、[Shift]キーと[Ctrl]を押しながら、[Enter]キーを押して「配列数式」として確定します。
確定後数式は、{ }でくくられます。自分で{ }を入力してはいけません。
数式の意味
もし、セル範囲$B$2:$K$2の文字色が、セルL$1の文字色と同じ場合は、該当のセル範囲$B$3:$K$3の値を返し、合計します。
この場合
850が返ります。
このセルをコピーして右のセル範囲に貼り付けます。


セルの塗りつぶし色毎にセル数または、データを集計する

「色番号」ユーザー定義関数を使います。
添付ファイルを参照してください。
ファイルには、「色番号」ユーザー定義関数のマクロが記述してありますので、ファイルを開く際には「マクロ」を「有効」にしてください。

セルL1:M1には、文字の色を検索値とするため、それぞれの色番号を「黒」と「赤」にしておきます。


戻る
セル塗りつぶしの色別にセル数を集計する方法

セルL2には、「配列数式」で、
=SUM(IF(色番号($B$2:$K$2)=色番号(L$1),1))
と入力し、[Shift]キーと[Ctrl]を押しながら、[Enter]キーを押して「配列数式」として確定します。
確定後数式は、{ }でくくられます。自分で{ }を入力してはいけません。
数式の意味
もし、セル範囲$B$2:$K$2の色番号が、セルL1の色番号と同じ場合は、1を返し、合計します。
この場合
7
が返ります。
このセルをコピーして右のセルM6に貼り付けます。

セル塗りつぶしの色別にデータを集計する方法

セルL3には、「配列数式」で、
=SUM(IF(色番号($B$2:$K$2)=色番号(L$1),$B$3:$K$3))
と入力し、[Shift]キーと[Ctrl]を押しながら、[Enter]キーを押して「配列数式」として確定します。
確定後数式は、{ }でくくられます。自分で{ }を入力してはいけません。
数式の意味
もし、セル範囲$B$2:$K$2の色番号が、セルL$1の色番号と同じ場合は、該当のセル範囲$B$3:$K$3の値を返し、合計します。
この場合
850が返ります。
このセルをコピーして右のセル範囲に貼り付けます。

同様に、セルの文字色毎にセル数または、データを集計する場合は、「文字色」ユーザー定義関数を使います。


戻る

非表示セルのデータを集計しない数式
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に、私の作成した「可視」ユーザー定義関数があります。
対象セルの内容が可視セル(非表示セルでない)かどうか判断します。
可視セルの場合はTRUEを返し、非表示セルの場合はFALSEを返します。
通常の組み込み関数と同じようにワークシート上で使用できる関数です。
セル範囲を指定しての配列数式にも対応します。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/kasi.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/kasi.exe
注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」
http://kiyopon.sakura.ne.jp/soft/addin.html

例として、添付ファイルを参照してください。
ファイルには、マクロが記述してありますので、ファイルを開く際には「マクロ」を「有効」にしてください。

セルC3には、A5:A10が表示セルのでヘタ数を返す数式を「配列数式」で、
=SUM(IF(可視(A5:A10)=TRUE,1))
と入力し、[Shift]キーと[Ctrl]を押しながら、[Enter]キーを押して「配列数式」として確定します。
確定後数式は、{ }でくくられます。自分で{ }を入力してはいけません。
数式の意味
もし、セル範囲A5:A10が、可視セルのの場合、1を返し合計します。


戻る

勝率から順位を自動で並び替える
自動で並べ替えをするためには、「VBA」マクロを使う必要があります。
添付ファイルを参照してください。


ファイルには、マクロが記述してありますので、ファイルを開く際には「マクロ」を「有効」にしてください。

勝率が同じ場合の処理ができませんので、同順位ができます。

シート「野球順位表」のシート見出しをマウスの右ボタンのショートカットメニューで「コードの表示」を選択すると[Microsoft Visual Basic]が開いて内容の確認ができます。
この例では、列番号4,5,6(D,E,F列)のデータを変更すると、マクロが起動しセル範囲B2:I8の先頭行をタイトル行として、G3:G8の値を基に「降順」に自動的に並べ替えされます。

マクロコードは次のようになります。

Private Sub Worksheet_Change(ByVal Target As Range)
c = Target.Column
If c >= 4 And c <= 6 Then 並べ替え
End Sub

Sub 並べ替え()
'
' 並べ替え Macro
'
On Error Resume Next
'
ActiveWorkbook.Worksheets("野球順位表").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("野球順位表").Sort.SortFields.Add Key:=Range("G3:G8"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("野球順位表").Sort
.SetRange Range("B2:I8")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub





戻る

マクロ実行中の処理の進行状況(プログレスバー)を表示をする
添付ファイルを参照してください。
「ツール」「マクロ」「マクロ」の「経過表示」で動作が確認できます。

プログレスバーを使います。
プログレスバーとして使えるコントロールフォームは、標準コントロールには含まれていませんが、追加のコントロールとしてフォーム上で利用することができます。


ここでは、単体でユーザとのやり取りを行うためのダイアログボックスではなく、他のプロシージャなどから呼び出してそのプロシージャの処理の状況を示すためのプログレスバーとして使えるフォームを作成してみましょう。
[Alt]+[F11]キーで、[Microsoft Visual Basic Editer]を起動します。
「挿入」「ユーザーフォーム」を選択し、
先ず、新しいユーザーフォームを作成します。




VBAの「表示」「ツールボックス」の「コントロール」のタグのなにも表示されていない部分をマウスの右ボタンのショートカットメニューから「その他のコントロール」を選択し、


表示された「コントロールの追加」ダイアログボックスで、Microsoft ProgressBar Control version 6.0のチェツクボツクスをオンにして、「OK」ボタンを押します。


これで、Progressbar コントロールツールが、ツールボックスに追加されます。

このアイコンをクリックして、フォーム上に配置します。

このユーザーフォームには、説明を表示するためのラベルと、処理を途中でキャンセルするためのコマンドボタンを配置します。


標準モジュールに次のようにマクロコードを記述します。

Dim pCancel As Boolean

Sub 経過表示()
Const MaxNum As Integer = 10000
Dim i As Integer
Load UserForm1
With UserForm1
.Caption = "経過表示"
.Label1.Caption = "処理中です。しばらくお待ちください。"
.Show vbModeless
End With
pCancel = False
For i = 1 To MaxNum
'ここに実際の処理を記述します
UserForm1.ProgressBar1.Value = i / MaxNum * 100
DoEvents
If pCancel Then Exit For
Next i
UserForm1.Hide
End Sub

フォーム上に表示されるタイトル("経過表示")とラベル(処理中です。しばらくお待ちください。)は、呼び出し側の処理に応じて替えます。
この処理では、処理の経過(i)を、全体(MaxNum))に対して、何%かを
UserForm1.ProgressBar1.Valueに代入して表示しています。

また、ユーザーフォーム上のキャンセルボタンを押した時の処理を次のような
Clickイベントに記述しています。
「キャンセル」ボタンを右クリックして、「コードの表示」を選択します。

Private Sub CommandButton1_Click()
pCancel = True
UserForm1.Hide
Unload UserForm1
'ここに実際の処理を終了をさせるコードを記述します。
End Sub

ここでは、単に処理をキャンセルするため、Forループをぬけているだけですので、
実際の処理では、このマクロコードに実際の処理を終了させるコードを記述することが必要です。

戻る

シート上のテキストボックスの文字をセルに抽出する
マクロを使いますが、エクセルのシート上に図形でテキストボックスを貼りつけてある場合に、そのテキストボックスの文字列をセルに貼り付けするマクロです。
マクロで、シート上のテキストボックスの文字をセルに貼付けする場合に注意する必要があるのは、文字数制限が255であることです。
255文字を超える文字をテキストボックスからセルに貼り付けする場合は次のようなマクロコードとなります。
下の例では、このブックのアクティブなシートのセルA1に、アクティブシートの最初のテキストボックスのデータを貼り付けます。
添付ファイルを参照してください。


基本的なコードは、
'文字数を255文字で区切って結合する
For t = 1 To .TextFrame.Characters.Count Step 255
My_Text = My_Text & .TextFrame.Characters(t, 255).Text '取得
Next t
です。
255文字ごとに変数My_Textに代入ています。


Sub 図形のテキストボックスの文字をセルに取り出し()
'変数fnにこのワークブックの名前を代入
fn = ThisWorkbook.Name
'変数Wcにこのシートのシート名を代入
wc = Workbooks(fn).ActiveSheet.Name
'変数Pに貼り付け先のセルアドレスを指定
P = "A1"
'変数txtに図形のテキストボックス名を代入
'テキストボックスのデータコピー
sc = Workbooks(fn).Sheets(wc).Shapes.Count
For m = 1 To Workbooks(fn).Sheets(wc).Shapes.Count
txt = Workbooks(fn).Sheets(wc).Shapes(m).Name
If Left(txt, 4) = "Text" Then GoTo sp
Next m
sp:
'変数My_Textに文字""を代入
My_Text = ""
With Workbooks(fn).Sheets(wc).Shapes(m)
'文字数を255文字で区切って結合する
For t = 1 To .TextFrame.Characters.Count Step 255
My_Text = My_Text & .TextFrame.Characters(t, 255).Text '取得
Next t
End With
ThisWorkbook.Sheets(wc).Range(P) = My_Text

End Sub

戻る
指定したセル内の文字に含まれる数字を合計する
セルに、"りんご150","みかん95"
のように文字と数値のデータが混在して入力してあるとします。
セルに入力した文字と数値の混在データから数値のみを、別のセルに取り出してそれを合計することで対応します。

「エクセルで使えるソフト」http://kiyopon.sakura.ne.jp/soft/index.htm
「数値取出」ユーザー定義関数 があります。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/mojidas.htm#%81u%90%94%92l%8E%E6%8Fo%81v%83%86%81%5B%83U%81%5B%92%E8%8B%60%8A%D6%90%94
ソフトはこちらに
http://kiyopon.sakura.ne.jp/soft/mojidasu.exe

「数値_文字取出」ユーザー定義関数では、文字列と数値の混在データから、
「数値取出」数値のみ(全角・半角問わず)
「文字取出」文字のみ(全角・半角問わず)
「英数取出」英数のみ(全角・半角問わず)
「英数以外取出」かな(全角・半角問わず)
「ひらがな取出」 
「カタカナ取出」 (全角・半角問わず)を返す
「かな取出」(ひらがな・カタカナ・全角・半角問わず)
を返す関数です。

通常の組み込み関数と同じようにワークシート上で使用できる関数です。

「文字取出」と「数値取出」と「英数取出」と「英数以外取出」と「ひらがな取出」と「カタカナ取出」と「かな取出」
という7つの関数を、同じファイル名
mojidasu.exe
でユーザー定義関数として登録してあります。
1つの登録でどちらの関数も利用できます。

注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。

添付ファイルを参照してください

ファイルにはユーザー定義関数のマクロが記述してありますので、ファイルを開く際にマクロを有効にしてください。


セルC6には、セルB6の値(りんご150)から文字列(りんご)のみを取り出す数式
=文字取出(B6)
と入力します。
セルには、文字列
"りんご"
が返ります。
このセルをコピーして下のセル範囲に貼り付けます。

セルD6には、セルB6の値(りんご150)から数値(150)のみを取り出す数式
=VALUE(数値取出(B6))
と入力します。
セルには、数値
150
が返ります。
このセルをコピーして下のセル範囲に貼り付けます。

セルC2には、の検索値の文字列
"りんご"
と入力します。

セルD2には、セルC2の検索値"りんご"に合致するデータを合計する数式
=SUMIF($C$6:$C$35,C2,$D$6:$D$35)
と入力します。
数式の意味
セル範囲$C$6:$C$35の値が、セルC2の値と等しい場合、該当するセル範囲$D$6:$D$35
の値を合計します。

セルC3には、の検索値の文字列
"みかん"
と入力します。

セルD3には、セルC3の検索値"みかん"に合致するデータを合計する数式
=SUMIF($C$6:$C$35,C3,$D$6:$D$35)
と入力します。
セル範囲$C$6:$C$35の値が、セルC3の値と等しい場合、該当するセル範囲$D$6:$D$35
の値を合計します。

SUMIF関数の説明は「関数の使い方説明」
http://kiyopon.sakura.ne.jp/kansuu/index.htm
「統計関数」
SUMIF
http://kiyopon.sakura.ne.jp/kansuu/abs.html#sumif
を、参照してください。

戻る
リスト入力で選んだ3行目の項目名でA列日付が本日のセルに移動したい
セルを指定位置に移動するには,マクロを使う必要があります。
添付ファイルを参照してください。

この場合セルB2の値を変更した場合に,マクロが起動し当日のセルの対象の名前の
セルにアクテイブセルが移動します。

マクロコードは,シート「Sheet1」のシート見出しタグをマウスの右ボタンのショ
ートカットメニューの「コードの表示」で確認できます。

マクロコードは,次のようになります。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r ' 行番号
Dim c '列番号
Dim cx '名前の列番号
Dim rx '日付の行番号
Dim A 'A列最終行番号
'セル"B2"の値が変更された場合
r = Target.Row
c = Target.Column
If r = 2 And c = 2 Then
For cx = 2 To 17
If Cells(3, cx) = Range("B2") Then GoTo 選択
Next cx
Else
Exit Sub
End If

選択:
For A = 4 To Range("A65536").End(xlUp).Row
If Range("A" & A) = Int(Now()) Then
Cells(A, cx).Select
Exit Sub
End If
Next A

End Sub

戻る
アドインソフトを削除した場合の『 ○○.xla 』が見つかりませんメッセージを表示しないように

注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」

http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。
その中から
解凍後にフォルダやファイルを削除した場合の処置

アドインのチェツクを外さないで、アドインファイルを削除した場合、下のように「●●●●.xla」が見つかりません。
ファイル名およびファイルの保存場所が正しいかどうか確認してください。・・・・という注意メッセージが表示されます。

「チェックを外す」前に[●●●●.xla]ファイルを削除してしまった場合の処置。
「ツール」「アドイン」を選択します。
目的の「●●●●」のチェックを外します。

(「...が見つかりません。リストから削除しますか」というメッセージが出る場合もあります。)「はい」ボタンを押します。

これで、EXCELをいったん終了します。
次回のEXCEL立ち上げからは「メッセージ」は出なくなるはずです。




戻る

JANコードなどで、指数表示「4.96E+12」された数値を一発で数値「4957180089102」に直す
エクセルでは,12桁以上の整数は,指数表示されます。
JANコード(例えば「4957180089102」)で入力した数値が,意図せず指数表示「4.96E+12」のように表示されます。
セルを選択して数式バーに表示されている値を確認すれば,セルの値は,「4957180089102」ですが,セルの表示は違う値のように表示されます。
[XL2002]セルの数値が指数表示になる条件
http://support.microsoft.com/kb/410233/ja
この場合に13桁の数値として表示するには,セルの値の先頭にアスタリスク(')を追加して,セルの値を文字列として認識されるようにすれば解決します。
このようにして,文字として認識されている数字はデフォルトでは左に揃って表示されます。
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm

に、私の作成したアドインソフト「アポストロフィ」があります。
選択セルのデータの先頭に(')アポストロフィーの挿入または削除ができます。
アポストロフィーの挿入で数値データを文字列として表現できます。
アポストロフィーの削除で文字データを数値として表現できます。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/appostrofie.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/appostrofie.exe
注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。

戻る
セル1個に対して数値が1つづつ入力されている表をセル2個が結合されている表に貼付を1度にしたい
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に、私の作成した「不連続セルの貼付」アドインソフトがあります。
不連続のセル範囲の「コピー」と「貼り付け」ができます。
不連続のセル範囲を貼り付け先に指定しても、指定した範囲に貼り付けることができます。

オートフィルターの抽出結果の不連続セル範囲にデータを貼り付けしたい場合にも利用できます。
セル範囲が非表示になっているセルは、「コピー」「貼り付け」の対象となりません。
セルの結合をしているセル範囲に対しての「コピー」「貼り付け」にも対応しました。

シートのショートカットメニューに「不連続セル貼り付け」が追加されます。

説明はこちら
http://kiyopon.sakura.ne.jp/soft/furenzoku.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/furenzoku.exe
注意:「アドインソフト」または「ユーザー定義関数」を利用する場合は、「アドインソフトを使う場合の注意点」

戻る
指数表示の9.45E+11を0.945E+12としたい
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に、私の作成したユーザー定義関数「指数表示」があります。
通常の組み込み関数と同じようにワークシート上で使用できる関数です。
「指数表示」の指数の値を指定できます。
仮数の整数部を0とした値(例えば、0.945E+12)で表示させることも出来ます。
指数表示9.45E+11の「指数」(12)と「仮数」(9.45)を返します。

例えば、数値が、12桁の数値 945000000000 とすれば、
=指数表示(数値)=9.45E+11
=指数表示(数値,0)=0.945E+12
=指数表示(数値,6)=945000E+6
=指数(数値)=11
=仮数(数値)=9.45
を返します。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/sisuu.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/sisuu.exe



戻る

シート上の図形をマクロで一気に全部消去する方法

マクロを使わなくても、すべての図形を一度に消去する方法はあります。
「編集」「ジャンプ」で「ジャンプ」ダイアログボックスで、「セル選択」ボタンを押して、「オプジェクト」「OK」ボタンを押します。
これで、すべての図が選択されます。
[Del]キーを押します。

マクロの場合のマクロコードは次のようになります。
Sub 図形削除()

'
ActiveSheet.DrawingObjects.Delete
End Sub

ただし、マクロで実行した場合は、その操作はもとに戻せませんので注意して下さい。



戻る

VBAで、シート名に"テスト"という文字列を含むシートを選択出来ますか?
添付ファイルを参照してください。
「ツール」「マクロ」「マクロ」の「シート選択」で確認できます。
ワイルドカードではなく、ワークシート関数の
Find関数で、"テスト"という文字列がシート名にあるかどうかを検索し、
Iserr関数で、その値がエラーでなければ、
そのファイルを選択します。

マクロコードは、次のようになります。

Sub シート選択()
On Error Resume Next
For s = 1 To Sheets.Count
sn = Sheets(s).Name
f = Application.Find("テスト", sn)
If Not (Application.IsErr(f)) Then
Sheets(s).Activate
End
Else
End If
Next s
End Sub

戻る
VBAで、指定のシート名の1つ前のシートを選択する

たとえば、シート「説明」の一つ前のシートを選択するには、
シート名「説明」のシート番号-1となます。
具体的には、
Sheets(Sheets("説明").Index - 1).Activate
で、シート「説明」の1つ前のシートを選択できます。

戻る
ある年日時が来るとファイルを開けることが出来なくする方法
参考になる質問が「質問と回答」
の「VBA・その他」「2004/02/15」
ファイルの試用期間を設定して、それを解除キーによって制限を外す方法
にあります。


戻る
ファイルを開いたとき、当日のシートを開きたい
見本のファイルを参照してください。
シート名は、「1日」「2日」・・・「30日」「31日」ですね。
シート名の1日は、
日付&"日"とするため、マクロコードは次のようになります。

Private Sub Workbook_Open()
  Sheets(Day(Now()) &"日").Activate
Range("B9").Activate
End Sub

対象のファイルに、上のマクロコードをコピーして貼り付けます。
ファイルを開いて、[Alt]+{F11]を押して、「マクロ」「Visual Basic Editor」を選択し、開いた「Microsoft VisualBasic」の左上にある「プロジェクト-VBAProject」の対象ファイルの「This WorkBook」をマウスの右ボタンのショートカットメニュー、「コードの表示」を選択し、開いたコードウィンドウに貼り付けます。
一端ファイルを閉じ、次にファイルを開くと、自動的に当日の日付のシートをアクティブにします。




戻る
エクセルでアンケート記入欄に空欄(未回答)がある場合保存できなくする方法
マクロを使えば可能です。
見本のファイルを参照してください。
セル範囲A1:A10には、セルに値が入力されていないと、セルの色を「ピンク」にする設定がしてあります。
セル範囲A1:A10を選択し、セルA1がアクティブの状態で、「書式」「条件付き書式」を選択し、「条件付き書式の設定」ダイアログボックスで、「条件1」で、「数式が」を選択し、「=A1<>""」と入力し、「書式」ボタ
ンを押して、「パターン」の「色」を「ピンク」にして、「OK」ボタンを押します。

セル範囲A1:A10に全て値が入力してない場合は、ファイルを保存できません。
その場合は、
"対象のセルすべてに入力が済むまで" _
"ファイルを保存できません"
というメッセージが表示されます。

下のマクロコードをコピーして[Alt]+[F11]キーを押して、Microsoft Visual Basic Editorを起動し、開いた左の「プロジェクト」ウィンドウのVBAProjectのThisWorkBookをマウスの右ボタンで選択し、「コードの表示」で開いた右のコードウィンドウに貼り付けます。

マクロコードは、次のようになります。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'セル範囲A1: A10の値がすべて入力してない場合はファイルを保存しません
    a = Range("A1") <> "" And Range("A2") <> "" And Range("A3") <> "" _
        And Range("A4") <> "" And Range("A5") <> "" And Range("A6") <> "" _
        And Range("A7") <> "" And Range("A8") <> "" And Range("A9") <> "" _
        And Range("A10") <> ""
    If a = False Then
        Cancel = True
        MsgBox "対象のセルすべてに入力が済むまで" _
            & Chr(13) & "ファイルを保存できません"
       Else
    End If
End Sub



戻る
指定した行の各行に、行の追加で、5行を入力する
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に私の作成した
「行列の一括挿入」アドインソフトがあります。
これを利用すれば、選択範囲の各行(または列)に指定行(または列)数を追加できます。

説明はこちら
http://kiyopon.sakura.ne.jp/soft/gyosonyu.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/gyosonyu.exe
注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。



戻る
文字列"◎みかん◎梨◎リンゴ◎イチゴ"の記号(◎)でセル内改行させる
セル内改行は「編集」「置換」で、改行コード([Ctrl]キーを押しながら[j]キー)を押すことで対応できます。

対象セル範囲を選択し、「編集」「置換」で、「検索文字列」に「◎」と入力し、「置換後の文字列」に改行コード([Ctrl]キーを押しながら[j]キー)を押し(何も表示されません)、◎を
入力して「全て置換」ボタンを押します。
この場合は、先頭に改行されてしまいます。
◎みかん◎梨◎リンゴ◎イチゴ
が、先頭に改行を含んで

◎みかん
◎梨
◎リンゴ
◎イチゴ
となります。
これを、先頭改行を入れないようにするのですね。

下の例では、このようにして改行コードChr(10)が先頭についている場合に、選択セル範囲の先頭の文字が改行コードChr(10)の場合は、これを削除するマクロ
です。
マクロコードは、次のようになります。

Sub 先頭の改行文字を削除()
'
' 選択セルの先頭文字の改行コードを削除する

For Each c In Selection
    ad = Range(c.Address).Address
    If Left(Range(ad), 1) = Chr(10) Then
    Range(ad) = Right(c, Len(c) - 1)
    End If
Next c

End Sub

マクロは、対象のセル範囲を選択し、「ツール」「マクロ」「マクロ」から「先頭の改行文字を削除」を実行します。



戻る
データの「入力規則」のリストの表示文字を大きくしたい
残念ですが、「入力規則」のリストの表示文字を大きくすることはできません。
そこで、「入力規則」を設定したセルを選択した場合に、シートの表示倍率を140%にするようにVBA(マクロ)を作成しました。
添付ファイルを参照してください。
対象のシートの「入力規則」の設定してあるセルを選択すると、ズームを140%に変更します。
それ以外のセルを選択した場合は、ズームを100%にします。

このVBA(マクロ)は、対象のシート見出しタグをマウスの右クリックのショートカットメニューの「コードの表示」で、表示された、WorkSheetのコードウィンドウに貼り付けています。
マクロコードは次のようになります。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'入力規則の設定してあるセルを選択するとズームを140%にします。
'それ以外のセルを選択するとズームを100%にします。
Dim rc, a
rc = Cells(Target.Row, Target.Column).Address

Application.EnableEvents = False
Application.ScreenUpdating = False
For Each a In Selection.SpecialCells(xlCellTypeAllValidation)
If a.Address = rc Then
ActiveWindow.Zoom = 140: GoTo ed
Else
ActiveWindow.Zoom = 100
End If
Next a
ed:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

 


戻る


住所を郵便番号で変換できる部分とそれ以外に分ける
住所から郵便番号を返すためのアドインソフト「郵便番号変換ウィザード」を利用します。
参考になる質問が「質問と回答」
の「VBA・その他」「2005/12/28」
「住所と郵便番号を相互に生成する、便利な郵便番号変換ウィザード」にあります。
その内容
郵便番号変換ウィザードを利用するには、Web からデータをダウンロードする必要があります。詳細については、ダウンロードセンターの「Excel アドイン: 郵便番号変換ウィザード (2000-2007 ユーザー用)」のページを参照してください。
ページはこちら
http://www.microsoft.com/downloads/details.aspx?FamilyID=6f6af8ef-b9dd-4e21-9e63-af4a0ff4e7ce&DisplayLang=ja

ダウンロード先は、こちら
http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=ja&SrcCategoryId=&SrcFamilyId=6f6af8ef-b9dd-4e21-9e63-af4a0ff4e7ce&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fc%2f2%2fc%2fc2c6bf2f-f276-440f-84f9-e6703bb27ccb%2fzipcode7.exe
ダウンロードしたファイルを実行後、「ツール」「アドイン」を選択し、「郵便番号変換ウィザード」を選択し、「OK」ボタンを押します。

B列に住所が入力してあるとします。
[B列の住所からA列に郵便番号を返す]
セル範囲B2:B100を選択し、[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリック
します。
[住所から郵便番号を生成する] をクリックし、[次へ] をクリックします。
住所データのセル範囲と、郵便番号を出力するセル範囲を指定します。
郵便番号の種類と書式を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。
これで、B列の住所から該当する郵便番号がA列に表示されました。
[A列の郵便番号からC列に住所を返す]
セル範囲A2:A100に郵便番号が、半角または、全角で
###-####あるいは、###?####
と、入力してあるとします。
セル範囲B2:B100には、A列の郵便番号に該当する住所が番地を含めて入力してあるとします。
あらかじめ「郵便番号変換」ウィザードをインストールしておきます。
先ほどの「郵便番号変換」ウィザードを使って郵便番号から、住所をC列セルに返します。
具体的には、
セル範囲A2:A100を選択し、[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[郵便番号から住所を生成する] をクリックし、[次へ] をクリックします。
「郵便番号データのセル範囲」A2:A100と、「住所を出力するセル範囲」の左上端C2を指定します。
郵便番号の種類と書式を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。
これで、A列の郵便番号から該当する住所がC列に表示されました。
D列には、B列の住所からC列の文字列を削除した右の文字列を返す数式を入力します。
セルD2には、
=SUBSTITUTE(B2,C2,"")
と入力します。
数式の意味
セルB2の文字列から、セルC2の文字列を検索し、何もない文字列""に置き換えます。
このセルをコピーして、下のセル範囲に貼り付けます。
これで、D列に、郵便番号で変換されない部分の「文字列」が返ります。
D列の計算式から求めた、「文字列」を、計算式ではない文字列に置き換えます。
具体的には、セル範囲D2:D100を選択し、「編集」「コピー」します。
同じセル範囲で、「編集」「形式を選択して貼り付け」で「値」にチェツクを入れ、「OK」ボタンを押します。
これで、セル範囲D2:D100には、「文字列」としての郵便番号に変換されない部分の住所が返ります。

戻る


シートの指定セル範囲をWebページとして、マイドキュメントに保存する
シート全体ではなく、指定範囲をWebページにしたい場合は、対象となる範囲をPublishObjectというオブジェクトとして指定する必要があります。
また、新しくPublishObjectオブジェクトを作成したい場合は、PublishObjectコレクションに対するAddメソッドを実行します。
さらに、マイドキュメントのフォルダ名を取得するためには、、スペシャルフォルダの情報を得る必要があります。
それには、WScript.ShellオブジェクトのSpecialFoldersというプロパティから得ることが出来ます。

次の例は、アクティブなワークブックのシート「Sheet1」のセル範囲A6:D9を、セルB2のファイル名(タイトル名も同じにしています)でWebページとして、マイドキ
ュメントに保存するプロシージャです。
Option Explicit

Dim objWshShell, MYDOCUMENTS, Wpage, MYHTM, MYTITLE, MYRANGE
Sub マイドキュメントに保存()

'WScript.Shellオブジェクトの作成
Set objWshShell = CreateObject("WScript.Shell")

'マイドキュメントフォルダの取得
 MYDOCUMENTS = objWshShell.SpecialFolders("MyDocuments")

'ファイル名を代入
MYHTM = Sheets("Sheet1").Range("B2")

'タイトル名を代入
MYTITLE = Sheets("Sheet1").Range("B2")

'指定範囲を代入
MYRANGE = "A6:D9"
'セルA6のデータ範囲を代入する場合
'MYRANGE = Sheets("Sheet1").Range("A6").CurrentRegion.Address

'指定範囲をマイドキュメントに保存
Set Wpage = ActiveWorkbook.PublishObjects.Add _
    (SourceType:=xlSourceRange, _
    Filename:=MYDOCUMENTS & "\" & MYHTM & ".htm", _
    Sheet:="Sheet1", Source:=MYRANGE, Title:=MYTITLE)
Wpage.Publish True
End Sub
指定範囲が、セルA6を含むデータ範囲の場合は指定範囲を
'MYRANGE = Sheets("Sheet1").Range("A6").CurrentRegion.Address
のアポストロフィーを取って使用します。

戻る


シートを開くたびに今日の日付にカーソルが行くようにしたい
添付ファイルを参照してください。
マクロを使います。
シート「クラスA」及び「クラスB」のシート見出しを、マウスの右ボタンのショートかつとメニューから「コードの表示」を選択し、開いたコードウィンドウで確認できます。

マクロコードは、次のようになります。

Private Sub Worksheet_Activate()
   Dim r
    For r = 3 To Range("A65536").End(xlUp).Row
    d = Now
        If d - Cells(r, 1) < 1 Then Cells(r, 1).Select: End
    Next r

End Sub

となります。

戻る


VBAで作成したユーザーフォームをExcelの画面立ち上げずに表示させる
ユー ザーフォームをエクセルのシートを表示せずに表示することはできます。
次のようにすれば、エクセルのウィンドウを最小表示にできます。
Sub Auto_Open()
Application.WindowState = xlMinimized
AppActivate Application.Caption
'この後にユーザーフォームを表示
Usserform1.Show
End Sub

見本のファイルがこちらにあります。
http://kiyopon.sakura.ne.jp/soft/ALARMxls.lzh


戻る
ファイルを開けると今日の日付にカーソルが行くように設定したい
添付ファイルを参照してください。
マクロを使います。
ファイルにはマクロが記述してありますので、ファイルを開く際に「マクロを有効」にして下さい。

[Alt]キーを押しながら[F11]キーを押して、Microsoft VisualBasicを開きThisworkBookのマクロコードに、記述してあります。

この例では、A列の日付のセルを選択します。
Then Cells(r, 1).Selectで、A列を指定しています。
C列の場合は、
Then Cells(r, 3).Select
とします。

Private Sub Workbook_Open()
Dim r
For r = 2 To Range("A65536").End(xlUp).Row
d = Now
    If d - Cells(r, 1) < 1 Then Cells(r, 1).Select: End
Next r
End Sub
 


戻る
セルをクリックする毎に"○","△","×",""を順に表示させたい
マクロを使えば可能です。
添付ファイルを参照してください。
まず、対象のセルに「図形描画」で「四角形」を、「塗りつぶし」「なし」線の
色「なし」で作成します。
見本では、セルB1,B2,B3に図形を作成しました。
次に、マクロコードを、次のように入力します。
マクロでは、それぞれのセル番地を変数 S に入力し、それぞれのセルのデータを表示するようにしています。
例えば、
Sub B1_クリック()
では、セル番地"B1"を変数に入力し、次のマクロ「入力」を実行するようにしています。
 

サブプロシージャ「入力」は、共通のサブルーチンとしてどのセルを選択しても共通です。

Dim s
Sub B1_クリック()
s = "B1"
入力
End Sub

Sub B2_クリック()
s = "B2"
入力
End Sub

Sub B3_クリック()
s = "B3"
入力
End Sub
Sub 入力()
Select Case Range(s).Text
    Case "○"
      Range(s) = "△"
    Case "△"
      Range(s) = "×"
    Case "×"
      Range(s) = ""
    Case Else
      Range(s) = "○"
End Select
End Sub

それぞれの図形をマウスの右ボタンのショートカットメニューから、「マクロの登録」を選択し、"B1_クリック"等を選択します。
それぞれの図形毎にマクロの登録でマクロ名を変更する必要があります。


戻る
マクロで、Auto_Openを実行しないようにするには
こちらにマイクロソフトの説明があります。
Excel の起動時にマクロを実行する
Auto_Open マクロを作成する
http://office.microsoft.com/ja-jp/excel/HA010346281041.aspx
# Auto_Open マクロを保存したブックに、既に Open イベントの VBA プロシージャが含まれている場合、Open イベントの VBA プロシージャは Auto_Open マクロのすべてのアクションを無視します。
# Auto_Open マクロは、ブックが Open メソッドによってプログラムから開かれた場合は無視されます。
# Auto_Open マクロは、他のブックが開かれる前に実行されます。したがって、初期設定の Book1 のブックまたは XLStart フォルダから読み込んだブック上で実行するアクションを Auto_Open マクロに記録すると、Excel を再起動したときに Auto_Open マクロは失敗します。これは、Auto_Open マクロは、初期設定およびスタートアップ ブックが開く前に実行されるためです。

戻る
マクロでメッセージボックスに自動で「はい」入力したい
マクロでは、メッセージに対して「はい」ボタンを押す(メッセージを表示させないようにする)には、
メッセージを表示するマクロの前に、
Application.DisplayAlerts = False
と入力し、その後
Application.DisplayAlerts = True
と入力します。


戻る
ワークシートメニューバーを新規追加し、マクロを登録したいがその方法は
マクロコードを示します。
下の例では、最後のメニュー「ヘルプ(H)」の後に「マクロ1」というメニューを追加し、その下の階層に「マクロ2」「マクロ3」「マクロ4」を追加しま す。
実行されるマクロは、それぞれ「マクロ2」「マクロ3」「マクロ4」です。

'このプロシージャでマクロを追加
 Sub Auto_Open()
   On Error Resume Next
    nc = MenuBars(xlWorksheet).Menus.Count
   Set nm = MenuBars(xlWorksheet).Menus.Add(Caption:="マクロ1")
    MenuBars(xlWorksheet).Menus(nc + 1).MenuItems.Add Caption:="マクロ2",OnAction:="マクロ2"
    MenuBars(xlWorksheet).Menus(nc + 1).MenuItems.Add Caption:="マクロ3",OnAction:="マクロ3"
    MenuBars(xlWorksheet).Menus(nc + 1).MenuItems.Add Caption:="マクロ4",OnAction:="マクロ4"
End Sub

'このプロシージャでマクロを削除
Sub Auto_Close()
   On Error Resume Next
    nc = MenuBars(xlWorksheet).Menus.Count
    MenuBars(xlWorksheet).Menus(nc).Delete
End Sub



戻る
指定セルを選択するとボタンを表示する方法
添付ファイルを参照してください。
ボタンの非表示は、
VisibleをFalseにします。

セルB1:B6を選択するとボタンが表示され、それ以外のセルを選択した時はボタンが非表示になります。
下のマクロコードは、シート[Sheet1]のシート見出しをマウスの右ボタンを押したショートカットメニューの「コードの表示」で確認できます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
r = Target.Row
c = Target.Column
    If r >= 1 And r <= 6 And c = 2 Then
        ActiveSheet.Shapes("Button 1").Visible = True
    Else
        ActiveSheet.Shapes("Button 1").Visible = False
    End If
End Sub

また、Module 1にボタンを押した時に実行するマクロの見本が記述されています。
ボタンを押すとマクロが実行され、メッセージの表示とボタンが非表示になります。

Sub ボタン1()
MsgBox ActiveSheet.Shapes(1).Name &"ボタンの非表示をします。"

ActiveSheet.Shapes("Button 1").Visible = False
End Sub




戻る
マクロボタンで、I列のデータに"*"が含まれる行を非表示にする
添付ファイルを参照してください。
見本のマクロを作成しました。
「隠す」ボタンで、I列のデータに"*"が含まれる行を非表示にします。
「再表示」ボタンで、非表示にした行を再表示します。
マクロコードは次のようになります。

Sub 行を非表示()
'
Application.ScreenUpdating = False
    最終行 = Range("I2").End(xlDown).Row
    For r = 2 To 最終行
        e = Application.Find("*", Cells(r, 9))
        If Not (Application.IsError(e)) Then
            Rows(r & ":" & r).EntireRow.Hidden = True
        Else
            Rows(r & ":" & r).EntireRow.Hidden = False
        End If
     Next r
Application.ScreenUpdating = True
End Sub
――――――――――――――――――――――――――――――
Sub 行を再表示()
'
Application.ScreenUpdating = False
    最終行 = Range("I2").End(xlDown).Row
            Rows(2 & ":" & 最終行).EntireRow.Hidden = False
Application.ScreenUpdating = True
End Sub



戻る
入力リストのダイアログボックスをフロート表示したい
添付ファイルを参照してください。
見本として作成しました。

マクロで、シート「入力」のセル範囲B3:B64のいずれかのセルを選択した場合に、シート上に「リスト」ListBoxを表示します。

「リスト」ListBoxの対象を選択すると、セルにその値が入力されます。
リストボックスを閉じるには、「閉じる」ボタンまたは、右上の[×]ボタンを押します。
シート[Sheet2]のA1セル以降に入力されたリストを「リスト」ListBoxに表示します。
このデータリストは、データが追加されても自動的にデータ範囲が取得されます。
――――――――――――――――――――――――――――――
シート「Sheet2」のセル範囲A1:B1以降には、1行目見出しの項目名を入力し、以降の行にリスト入力のデータを入力しておきます。
[Sheet2]
 A B
1 コード 氏名
2 1 A氏
3 2 B氏
4 3 C氏
5 4 D氏
6 5 E氏
7 6 F氏

シート「入力」のセルC3には、セルB3の値を検索値として、名前「コード」のリストから2列目の値を返す数式
=IF(B3="","",VLOOKUP(B3,コード,2))
と入力しています。
このセルをコピーして下のセル範囲C4:C64まで貼り付けます。
――――――――――――――――――――――――――――――
シート「入力」には、次のコードを記述しています。
シート「入力」の見出しタグをマウスの右ボタンで選択し、ショートカットメニュー「コードの表示」から確認できます。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
c = Target.Column
r = Target.Row
If r >= 3 And r <= 64 And c = 2 Then
    リスト表示
End If
End Sub
――――――――――――――――――――――――――――――
ユーザーフォーム「Userform1」には、リストボックスとコマンドボタンを作成して次のコードを記述しています。

Private Sub CommandButton1_Click()
    UserForm1.ListBox1.ListIndex = Null
    UserForm1.Hide
    Unload UserForm1
End Sub

Private Sub ListBox1_Click()
ActiveCell = ListBox1.ListIndex + 1
    UserForm1.ListBox1.ListIndex = Null
    UserForm1.Hide
    Unload UserForm1
End Sub
――――――――――――――――――――――――――――――
標準モジュールのModule1には、次のコードを記述しています。

Sub リスト表示()
Dim ad 'リストの範囲
Dim rs 'リストの開始行
Dim re 'リストの最終行
Dim cs 'リストの開始列
Dim ce 'リストの最終列

    With Sheets("Sheet2")
    ad = .Range("A1").CurrentRegion.Address
    rs = .Range(ad).Row + 1
    re = rs + .Range(ad).Rows.Count - 2
    cs = .Range(ad).Column
    ce = cs + .Range(ad).Columns.Count - 1
    ad = Range(Cells(rs, cs), Cells(re, ce)).Address
    End With
'リスト範囲に名前"コード"定義する
    ActiveWorkbook.Names.Add Name:="コード", RefersTo:="=Sheet2!" & ad
    With UserForm1
        .Caption = "リスト入力"
'リストボックスのソースを定義した名前「コード」の範囲に設定する
        .ListBox1.RowSource = "コード"
'リストを選択してない状態にする
        .ListBox1.ListIndex = Null
'ユーザーフォームを表示する
        .Show (0)
    End With
End Sub




戻る
ファイルを開いたときにリンクの自動更新前にメッセージを表示させないファイルを作るには
残念ですが、ファイルの設定などでリンクの自動更新のメッセージを表示しないように設定することはできません。
次のような操作をそれぞれのパソコンで実行すれば、以降のファイルを開くときには、メッセージは表示されなくなります。
リンクの更新メッセージを表示しないようにする
この操作は、他のファイルへのリンクの設定されたファイルを開くパソコンにおいて一度は必ず実行する必要があります。
しかし、「ツール」メニューの操作をいちいちファイルを配布した一人ひとりに実行させることは、効率的ではありませんし、その操作手順を説明しなれければ なりませんので面倒です。

以下に示すように、「リンクの自動更新のメッセージを表示しない設定」を自動実行させるマクロコードを記述したファイルを対象者に配布し て、一度実行すれば問題は解決します。
このファイルを開くだけで、自動的に先ほどの操作手順(リンクの更新メッセージを表示しないようにする)を実行します。
その後は、リンクを設定したファイルを開いても「このファイルには、・・・・リンクが設定・・・自動更新・・・」のメッセージを表示しないでファイルを開 くことができます。

自動的に「リンクの自動更新メッセージを表示しないようにする」マクロコード対象のファイルを開き[Alt]+{F11]キーを押して、 MicrosoftVisualBasicを起動し、「VBAPridect」の「ThisWorkBook」のコードウィンドウに次のマクロコードを記 述しています。

Private Sub Workbook_Open()
    Application.AskToUpdateLinks = False
    If Application.AskToUpdateLinks = False Then
    MsgBox "「リンクの自動更新前にメッセージを表示しない」設定にしました"
    End If
    ThisWorkbook.Close
End Sub

添付ファイルを参照してください。このファイルには、リンクの自動更新マクロが記述してあ りますので、ファイルを開くと「開こうとしているファイルにはマクロが記述してあります・・・・」というメッセージが表示されますので、「マクロ」を「有 効」にしてください。

このファイルを開くと、そのパソコンの設定を「リンクの自動更新前にメッセージを表示しない」設定にして、次のメッセージを表示します。
"「リンクの自動更新前にメッセージを表示しない」設定にしました"「はい」ボタンを押すと、自動的にファイルは閉じられます。



戻る
 3℃×4kg/cm2=12.0のように単位を無視して数値だけで計算させたい
四則演算(加減乗除)のみに対応します。
平方メートルのなどの上付文字の単位を入力する場合、文字でそのまま2を入力し、cm2と入力すると2を数値とし て認識しますので、正しく計算できません。この場合は、単位の入力をしないようにするか、全角文字の記号"u"を使ってください。

計算に使用可能な演算記号は、文字で
加算 全角"+"または半角"+"
減算 全角"−"または半角"-"
乗算 全角"×"または半角"*"
除算 全角"÷" 注意1
の4種類です。
注意1  除算の場合 "÷" の替わりに半角の "/" を入力すると正しく計算できません。

A1セルには、
3℃×4s/cu
と入力します。
この場合

「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm に「数式の計算」ユーザー定義関数 があります。

説明はこちら
http://kiyopon.sakura.ne.jp/soft/susikikeisan.htm
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/susikikeisan.exe

注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。

ご質問の間場合は、
A1セルに
3℃×4s/cu
と入力してあるとします。
セルB1に
=数式の計算(A1)
と入力します。
12
が返ります。



戻る
不連続なセルの選択方法について
<A1とA5のセルを選択の場合>
    Range("A1,A5").Select
をcellsで入力すれば、
Union メソッドを使います。
 Union(Cells(1, 1), Cells(5, 1)).Select
となります。

<A1からA5とD1からD5のセルを選択の場合>
Range("A1:A5,D1:D5").Select
をcellsで入力すれば、
Union メソッドを使います。
Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 4), Cells(5,4))).Select
となります。



 

戻る
行挿入時に列の集計数式を挿入行に自動入力する方法

SUM 関数を使った行のセル範囲の合計は、行を挿入すれば自動的に数式が挿入行の合わせて変更されます。
 注意:行 挿入時にSUM関数の合計数式は自動変更で挿入行を追加しない場合がある
しかし、列の集計数式は、自動的にコピーされません。

下の例では、H列に数式
=SUM(C3:G3)
のようにC列からG列までの合計を返す式が入力してあります。
 

 
A B C D E F G H
1
2 合計
3 1 1 1 1 1 5
4 2 2 2 2 2 10
5 3 3 3 3 3 15
6 4 4 4 4 4 20
7 5 5 5 5 5 25
8 6 6 6 6 6 30
9 7 7 7 7 7 35
10 8 8 8 8 8 40
11 合計 36 36 36 36 36 181

 
 

セルC11には、C列の合計値を返す数式 
=SUM(C3:C10) 
と入力してあります。 
 

11行目を挿入します。 

セルB11を選択し「挿入」「行全体」 
して、合計の数式が12行目に移動 
しました。


 
A B C D E F G H
1
2 合計
3 1 1 1 1 1 5
4 2 2 2 2 2 10
5 3 3 3 3 3 15
6 4 4 4 4 4 20
7 5 5 5 5 5 25
8 6 6 6 6 6 30
9 7 7 7 7 7 35
10 8 8 8 8 8 40
11
12 合計 36 36 36 36 36 181
行の挿入では、挿入した行のH列には、 
上(または下)のセルから数式は、 
コピーされません。

行挿入時に列の集計数式を挿入行に自動入力する方法
(この場合は下のセルから数式をコピーしています)
添付ファイルを参照してください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
右端の列の合計数式は、セル関数で自動的に行挿入を反映して列の集計数式を反映させることはできません。
この場合は、マクロを使います。
このマクロコードは、対象のシート「Sheet1」のシート見出しをマウスの右クリックのショートカットメニュー「コードの表示」で、確認できます。
下の例では、対象の列は、8列目(H列)
対象の行は3行目以降
で行が挿入された場合に、対象の列のセルを選択すると、自動的に選択セルの下のセルの数式を対象セルにコピーします。
マクロコードを以下に示します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r, c, m, 対象行, 対象列
対象列 = 8 'H列を対象
対象行 = 3 '3行目以降
r = Target.Row
c = Target.Column
m = Cells(65536, 対象列).End(xlUp).Row
If c = 対象列 And r >= 対象行 And r < m Then
    If Left(Cells(r + 1, c).Formula, 1) = "=" And Cells(r, c) = "" Then
        Cells(r + 1, c).Copy Destination:=Cells(r, c)
        Application.CutCopyMode = False
    End If
End If
End Sub


戻る
セルに入力してある指定した文字の数を返す
例えば、A1セルに
03-1163-2423
と入力されているとします。
このセルに
3
がいくつ入力されているか(この場合3)を調べるとします。

「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
「特定文字数」ユーザー定義関数
対象セルの文字列中に検索文字がいくつ含まれるかを返します。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/tokutei.htm



戻る
アドインソフトのマクロを有効にしますか・・とメッセージが表示がされないようにする
エクセルでは、ブックまたはマクロプロジェクトの対して、作成したのが信頼できる開発者であることを証明する「デジタル証明書」を添付することができま す。デジタル証明書は、証明を行っている認証局(VeriSing,incなど)から取得するほか、個人レベルで作成することも可能です。セキュリティレ ベルが「高」である場合、この証明の信頼性に応じたマクロが実行できるかどうかが決まります。認証のレベルによって、自動的にマクロが無効になったり、無 効にするか有効にするか確認するダイアログボックスが表示されます。
また、レベルが「中」の状態では、マクロを含むブックを開こうとすると、有効にするか無効にするかを確認するダイアログボックスが必ず表示されます。
このようなダイアログを煩わしいと感じている場合は、自分の個人的な「デジタル証明書」を作成し、それをマクロプロジェクトに添付して、このデジタル証明 書を「信頼のおけるソース元」として登録すれば、以降はこのダイアログボックスを出さずにマクロが使えるようになります。
もちろん、個人的なデジタル証明の場合、対外的な信頼性はほとんどゼロに等しいわけですが、とりあえず自分だけで使ったり、社内で共同使用するブックのマ クロプロジェクトに設定しておけば、煩わしさは減少します。

どうやったら、デジタル署名ができるのでしょうか
「デジタル証明書」は、次の手順で作成します。
\ProgramFiles\MicrosoftOffice\Office10フォルダにあるSELFCERT.EXEをダブルクリックします。これで デジタル証明書の作成ダイアログボックスが表示されます。
(SELFCERT.EXEが見つからない場合はOfficeCD0-ROMからインストールしてください)
名前ボックスに企業名または個人名などを入力して、「OK」ボタンを押します。これで、デジタル証明書が作成されます。
 

戻る
マクロプロジェクトにデジタル署名する
ブックへの署名とは異なり、マクロプロジェクトへのデジタル署名は、そのプロジェクトに含まれるマクロの身元を証明し、安全性を保証するためのものです。
この設定は、VisualBasicEditor(VBE)で行います。VBEの起動は、ブックから{Alt}+{F11}キーで行います。
VBEでデジタル署名を添付したいVBAプロジェクト(ブック)を選択し、「ツール」「デジタル署名」を選択します。これで「デジタル署名」ダイアログ ボックスが表示されます。
「選択」ボタンを押して、「証明書の選択」ダイアログボックスを表示します。
作成した証明書を選択して、「OK」ボタンを押します。「デジタル署名」ダイアログボックスに戻りますので「OK」ボタンを押してダイアログボックスを閉 じます。
このブックをいったん保存して、閉じます。そしてもう一度開くと、「セキュリティの警告」ダイアログボックスが表示されます。
「この作成者のマクロを常に信頼する」のチェックをオンにします。
「マクロを有効にする」ボタンをクリックしてブックを開きます。これで、セキュリティダイアログボックスの「信頼のおけるソース元」タブに、作成者の名前 が追加されます。

私の作成したアドインソフトは「デジタル署名」が添付してありますので、「信頼の置けるソース元」に「エクセルの勉強部屋」として登録でき ます。



戻る
「ファイルを開く」ダイアログボックスを表示する
次の使用例は、[ファイルを開く] ダイアログ ボックスを表示します。

Application.Dialogs(xlDialogOpen).Show

このコードにより、ユーザーが選択した対象のファイルが開かれます。
 

「ファイルを開く」ダイアログボックスを表示して、フォルダ名とファイル名を取得するための命令
GetOpenFilenameメソッドを使います。
具体的には次のようになります。

Sub 開く()
fileToOpen = Application _
    .GetOpenFilename("Excelファイル (*.xls), *.xls")
end sub
この命令では、ファイルは実際には開かれません。
変数 fileToOpen にフォルダ名とファイル名が代入されます。
選択したファイルを開くには、Openメソッドと、取得したフォルダ名とファイル
名を利用します。
この命令の後に、次のように入力してファイルを開きます。

Sub 開く()
fileToOpen = Application _
    .GetOpenFilename("Excelファイル (*.xls), *.xls")

If fileToOpen <> False Then
    Workbooks.Open fileToOpen
End If
end sub
 

複数のファイルを選択して開く
Sub 開く2()

On Error GoTo Err
FiletoOpen = Application _
    .GetOpenFilename("Excelファイル (*.xls), *.xls", MultiSelect:=True)
    For fi = 1 To UBound(FiletoOpen)
    If FiletoOpen(fi) <> False Then
        Workbooks.Open FiletoOpen(fi)
    End If
    Next fi
Err:
End Sub



戻る
複数セル範囲の先頭文字を大文字にする
アドインソフトを作成しました。
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
の「先頭文字を大文字にする」
http://kiyopon.sakura.ne.jp/soft/proper.htm
をご覧ください。
このソフトを使えば、選択セル(または複数セル範囲)の文字列を、そのセルで、先頭文字を大文字に変換します。
文字列以外の数値などが入力されている場合は、セルの値はそのままの状態となります。

注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。



戻る
赤い数字のセルのみ集計する
エクセルには、文字の色を識別する関数がありません。
私の作成したユーザー定義関数「文字色」
を使えば、指定してセルの文字の色を数値として識別できます。
これを使えば、指定したセル範囲のセルの文字色に該当する数値の集計をすることができます。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/irobango.htm#%95%B6%8E%9A%90F
ソフトはこちら
http://kiyopon.sakura.ne.jp/soft/irobango.exe
注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。


戻る
選択セル範囲のデータをCSV形式のファイルで保存する
任意のセルの値を抜き出して、別ファイルにテキスト出力するには次のようにします。

まず、任意のセル範囲を選択し、「編集」「コピー」します。
「ファイル」「新規作成」「空白のブック」を開きます。
新しいブックのA1セルを選択し、「編集」「貼り付け」します。
「ファイル」「名前を付けて保存」で「ファイル形式」を「CSV(カンマ区切り)(*.csv)」、あるいは「テキスト(タブ区切り)(.txt)」にし て、保存するフォルダとファイル名を付けて「保存」します。
2回の注意メッセージがでますが、すべて「OK」とします。

この内容をマクロで実行できる「CSV保存」を作成しました。
http://kiyopon.sakura.ne.jp/soft/csvsave.htm
注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.htmlを 必ずお読みください。
 



戻る
変更を保存しますかというメッセージが出ないようにしたい
セルに計算式が入力してありその計算結果が変更になっている場合は、「ファイルへの変更を保存しますか」というメッセージが 表示されます。
この場合は、他のファイルへの参照式が入力してあるので、ファイルを開いた時の「リンクの自動更新のメッセージ」は表示しないようにしていますが、その場 合リンクは自動更新されますので、自動計算で計算結果のデータが変更されます。
したがって、何もしていないとはいえないので、ファイルを閉じる時に「ファイルへの変更を保存しますか」とメッセージが表示されます。

どうしてもこのメッセージを出したくないのなら、マクロを記述する必要があります。
このマクロでは、ファイルを閉じる前に自動的にファイルを上書き保存します。
これによって、「ファイルの変更を保存しますか」のメッセージが表示されなくなります。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 ThisWorkbook.Save
End Sub

上のマクロコードをコピーして、エクセルシートから[Alt]+[F11]を押して、Microsoft
Visual Basic Editor
を起動します。
左の「プロジェクト-VBAProject」ウィンドウの中の対象のブックのVBAProjectのThisWorkBook
を開きます。
右のコードウィンドウに、「編集」「貼り付け」します。
[Alt]+[F11]を押して、エクセルシートにもどります。



戻る
同一セルへ異なった値を入力すると異なったセルへジャンプするVBA
セルA1に1を入力した場合セルB1へ
セルA1に2を入力した場合セルB2へ
セルA1に3を入力した場合セルB3へ
ジャンプするVBA
シート[Sheet1]のセルA1にイベントがあれば、その値に応じて該当セルを選択す
るのですね
次のようになります。
下のマクロコードをコピーして、シート見出しタグをマウスの右ボタンで選択し
、「コードの表示」を選択して、表示されたコードウィンドウに貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)
r = Target.Row
c = Target.Column
If r = 1 And c = 1 Then
    Select Case Cells(r, c)
        Case Is = 1
        Cells(1, 2).Select
        Case Is = 2
        Cells(2, 2).Select
        Case Is = 3
        Cells(3, 2).Select
        Case Else
    End Select
Else
End If

End Sub

変数rにデータの変更されたセルの行番号
変数cにデータの変更されたセルの列番号
を代入し、行番号1かつ、列番号1の場合に実行されます。
セルの値に応じて1,2,3の場合それぞれのセルを選択します。
Cells(1,2)
は、行番号1,列番号2ですからセルB1を示します。



戻る
123をCSV形式で保存し、4桁の数値を0123と表示するようにしたい
元のセルの値は、123で、セルを選択し、「書式」「セル」を選択し、「セルの書式設定」ダイアログボックスの「表示形式」 の「分類」で「ユーザー定義」を選択し「種類」欄に「0000」と入力し「OK」ボタンを押します。
セルには、0123と表示されます。
「セルの書式設定」で、表示形式を0000として、セルの表示が0123となっても、セルのデータは123という数字です。
(数式パーには123と表示されていますので、確認してください)
CSVファイルでも0123としたい場合にも、CSVで保存した場合セルの書式は変換されませんから、セルのデータを文字列として"0123"としなくて はいけません。

「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に私の作成した「表示のまま貼付」アドインソフトを使えば、セルの表示形式のまま、0123とセルのデータが入力されます。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/harituke.htm

次に、確実に文字列として認識されるように、"(ダブルクォーテーション)でくくる必要があります。
「ダブルクォーテーション」アドインソフトを使って、選択範囲のセルのデータを"(ダブルクォーテーション)でくくります。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/dubble.htm

注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。



戻る
マクロの実行速度を早くするには
マクロを実行する際に画面表示を再描画させないようにすることで、マクロの実行速度が格段に向上します。
次のように、画面更新しない設定にしてマクロを実行し、マクロコードが終了したら画面更新させるようにします。
Sub マクロ速度()
'画面更新しない
Application.ScreenUpdating = False

'マクロコードを記述

'画面更新する
Application.ScreenUpdating = True
End Sub



戻る
デジタル署名とはどのようなものでしょうか
エクセルでは、ブックまたはマクロプロジェクトの対して、作成したのが信頼できる開発者であることを証明する「デジタル証明 書」を添付することができます。デジタル証明書は、証明を行っている認証局(VeriSing,incなど)から取得するほか、個人レベルで作成すること も可能です。セキュリティレベルが「高」である場合、この証明の信頼性に応じたマクロが実行できるかどうかが決まります。認証のレベルによって、自動的に マクロが無効になったり、無効にするか有効にするか確認するダイアログボックスが表示されます。
また、レベルが「中」の状態では、マクロを含むブックを開こうとすると、有効にするか無効にするかを確認するダイアログボックスが必ず表示されます。
このようなダイアログを煩わしいと感じている場合は、自分の個人的な「デジタル証明書」を作成し、それをマクロプロジェクトに添付して、このデジタル証明 書を「信頼のおけるソース元」として登録すれば、以降はこのダイアログボックスを出さずにマクロが使えるようになります。
もちろん、個人的なデジタル証明の場合、対外的な信頼性はほとんどゼロに等しいわけですが、とりあえず自分だけで使ったり、社内で共同使用するブックのマ クロプロジェクトに設定しておけば、煩わしさは減少します。
どうやったら、デジタル署名ができるのでしょうか
「デジタル証明書」は、次の手順で作成します。
\Program Files\Microsoft Office\Office10フォルダにあるSELFCERT.EXEをダブルクリックします。これでデジタル証明書の作成ダイアログボックスが表示さ れます。
(SELFCERT.EXEが見つからない場合はOffice CD0-ROMからインストールしてください)
名前ボックスに企業名または個人名などを入力して、「OK」ボタンを押します。これで、デジタル証明書が作成されます。

ブックにデジタル署名する

ブックに対するデジタル署名は、エクセル2000から可能になりました。これは、作成者を明確にする意味で行われ、マクロに対するセキュリ ティという点ではさほど意味を持ちません。
デジタル署名は、ブックの編集を終えて、保存を実行した後で行います。署名後にまた保存すると、署名が無効になってしまいます。
以下の手順も、必ずブックを保存した後で実行してください。
「ツール」「オプション」を選択し、「セキュリティ」タグを開きます。「デジタル署名」ボタンをクリックして、デジタル署名ダイアログボックスで、「追 加」ボタンをクリックします。
これで、「証明書の選択」ダイアログボックスが開きます。
「使用する証明書」をクリックして、選択します。「OK」ボタンを押してこのダイアログボックスを閉じ、「デジタル署名」ダイアログボックス、「オプショ ン」ダイアログボックスでそれぞれ「OK」ボタンで閉じ、ワークシートに戻ります。

マクロプロジェクトにデジタル署名する

ブックへの署名とは異なり、マクロプロジェクトへのデジタル署名は、そのプロジェクトに含まれるマクロの身元を証明し、安全性を保証するた めのものです。この設定は、Visual Basic Editor(VBE)で行います。VBEの起動は、ブックから{Ctrl}+{F11}キーで行います。
VBEでデジタル署名を添付したいVBAプロジェクト(ブック)を選択し、「ツール」「デジタル署名」を選択します。これで「デジタル署名」ダイアログ ボックスが表示されます。
「選択」ボタンを押して、「証明書の選択」ダイアログボックスを表示します。
作成した証明書を選択して、「OK」ボタンを押します。「デジタル署名」ダイアログボックスに戻りますので「OK」ボタンを押してダイアログボックスを閉 じます。
このブックをいったん保存して、閉じます。そしてもう一度開くと、「セキュリティの警告」ダイアログボックスが表示されます。
「この作成者のマクロを常に信頼する」のチェックをオンにします。
「マクロを有効にする」ボタンをクリックしてブックを開きます。これで、セキュリティダイアログボックスの「信頼のおけるソース元」タブに、作成者の名前 が追加されます。



戻る
セルの値をファイル名にして保存できますか
見本のマクロコードを以下に示します。
下の例では、アクティブシートのセル"A1"の値をファイル名に指定します。
"A1"セルの値でファイルを保存するダイアログボックスが表示されますので、保存先フォルダを指定して「OK」ボタンを押します。
セルの"A1"以外のデータとする場合(例えばセルD10の場合)Range("A1")の部分をRange("D10")
などとします。

'ここから↓
Sub セルの値をファイル名にする()
'セルA1の名前でファイルを保存します
fm = ThisWorkbook.ActiveSheet.Range("A1")
fs = Application.GetSaveAsFilename(fm, "Microsoft
Excelブック(*.xls),*.xls", , "
ファイルを保存する", "保存")
If fs = False Then End
ThisWorkbook.Saved = True
ThisWorkbook.SaveAs fs
End Sub
'ここまで↑

このマクロコードを、「ツール」「マクロ」「Visual Basic Editer」を選択し、「Microsoft Visual Basic」を開き、「挿入」「標準モジュール」を開き、コードウィンドウに貼り付けます。



戻る
印刷総ページ数を確認して印刷するマクロ
マクロコードは次のようになります。
下のマクロコードを[Alt]+[F11]を押して、表示された[Microsoft Visual Basic Editor]の[ThisWorkbook]のコードウィンドウに記述します。
[印刷]または、[印刷プレビュー]を実行すると、「印刷すると○○枚です。印刷しますか?」と、メッセージが表示されます。
「はい」「いいえ」のいずれかのボタンを押します。
「はい」の場合は、シートを印刷し、「いいえ」の場合は印刷せずに終了します。


Private Sub Workbook_BeforePrint(Cancel As Boolean)
' ページ数を確認して印刷()

'
' 表示しているシートを印刷したときの
' 総ページ数を確認し、印刷するかどうかを指定する
'

memo = "印刷すると " & Application _
.ExecuteExcel4Macro("Get.Document(50)") _
& " 枚です。印刷しますか?"
midashi = "印刷ページ数の確認"
kekka = MsgBox(memo, 4, midashi)

If kekka = vbYes Then
'印刷する
Cancel = False
Else
'印刷を取り消す
Cancel = True
End If

End Sub





戻る
セルに関連づけたコメントで並べ替える
エクセルには、コメントを返す関数がありません。
「コメント」ユーザー定義関数を作成しました。
説明はこちら↓
http://kiyopon.sakura.ne.jp/soft/comment.htm
を使えば、セル(またはセル範囲)の左上端に関連付けられているコメントを返します。
通常の組み込み関数と同じようにワークシート上で使用できる関数です。
この「コメント」ユーザー定義関数で背に関連づけられたコメントを別のセルに表示して、このセル範囲を並べ替えします。

注意:このソフトを使用する場合は「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を、必ずお読み下さい。



戻る
行の挿入や削除を行っても各ページの最後に小計を、最後のページには小計の合計を出す
マクロを使う必要があります。

添付ファイルを参照してください。
例として、印刷タイトル行を1行目とし、55行毎にD列の小計を表示して、最終行には、その合計を表示します。
印刷(あるいは印刷プレビュー)の直前にマクロが実行され、小計行と合計行が追加されます。
 

下のマクロコードで、始めに記述してある
行=55
で、小計の行位置を指定しています。

マクロコードを以下に示します。

Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim r, 行
    行 = 55
    Application.ScreenUpdating = False
    For r = Range("A65536").End(xlUp).Row To 行 Step -1
        If Cells(r, 1) = "合計" Then Rows(r).Delete Shift:=xlUp
         If Cells(r, 1) = "小計" Then Rows(r).Delete Shift:=xlUp
   Next r
    For r = 行 To Range("A65536").End(xlUp).Row
        If (r - 1) Mod 行 - Int(r / 行) = 0 Then _
         Rows(r).Insert Shift:=xlDown: Cells(r, 1) = "小計" _
         : Cells(r, 4) = "=SUM(D" & r - 1 & ":D" & r - 行 & ")" _
         : r = r + 1
   Next r
     r = Range("A65536").End(xlUp).Row
        Cells(r + 1, 1) = "小計"
        r = r + 1
        Cells(r, 4) = "=SUM(D" & r - 1 & ":D" & Int((r - 1) / 行) * 行 + Int((r - 1) / 行) + 2 & ")"
        Cells(r + 1, 1) = "合計"
        r = r + 1
        Cells(r, 4) = "=SUMIF(A2:A" & r - 1 & ",""小計"",D2:D" & r - 1 & ")"

    With Range("A" & r - 1 & ":D" & r)
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlEdgeLeft).Weight = xlThin
        .Borders(xlEdgeTop).Weight = xlHairline
        .Borders(xlEdgeBottom).Weight = xlThin
        .Borders(xlEdgeRight).Weight = xlThin
        .Borders(xlInsideVertical).Weight = xlThin
        .Borders(xlInsideHorizontal).Weight = xlThin
    End With
    With ActiveSheet.PageSetup
        .PrintTitleRows = "$1:$1"
        .PrintTitleColumns = ""
    End With
    Application.ScreenUpdating = True
End Sub




戻る
QMV2yfsIeをキュー,エム,ブイ,ニ,ワイ,エフ,エス,エル,イーに変換したい
エクセルには、英数の読みを返す関数がありませんので、「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に私が作成した「英数読み」ユーザー定義関数があります。
説明はこちら↓
http://kiyopon.sakura.ne.jp/soft/eisuyomi.htm

また、それぞれの読みをカンマ(,)で区切る場合は、私の作成した「カンマ区切りユーザー定義関数」があります。
説明はこちら↓
http://kiyopon.sakura.ne.jp/soft/comma.htm

注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
具体的には、次のようになります。
A1セルに
QMV2yfsIe
と入力してあるとします。
B1セルに
=英数読み(A1)
と入力します。
キューエムブイニワイエフエスエルイー
が返ります。
また、それぞれの読みをカンマ(,)で区切る場合は、
=英数読み(カンマ区切り(A1))
と入力します。
キュー,エム,ブイ,ニ,ワイ,エフ,エス,エル,イー
が返ります。



戻る
5-6-30を五-六-三〇に変換する
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
に「漢数字に変換」ユーザー定義関数を使えば簡単にできます。
説明はこちら
http://kiyopon.sakura.ne.jp/soft/kansuji.htm
注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。


戻る
平成18年1月18日と表示させていたものをワードに差し込み処理すると1/18/2006となってしまいます
セルの値は、数式バーに表示されているとおり2006/1/18ですから、ワードに差し込み印刷すると和暦で表示されませ ん。
「エクセルで使えるソフト」私の作成した「表示のまま貼付」
http://kiyopon.sakura.ne.jp/soft/harituke.htm
を使えば、日付シリアル値の日付を表示形式のまま文字列で貼り付けすることもできます。
注意このソフトを使用する場合は、「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。


戻る
範囲を超えた数値入力をしたら、音が出るようにしたい
エクセル97や2000では、音を出す関数Beepを使います。

エクセル2002以降では、音でなく音声機能を利用できます。
具体的には、
Application.Speech.Speak"入力エラーです"

また、WindowsAPIから直接WAVファィルを利用するようにできます。
見本のファィルを参照してください。

下の例では、対象のシートの行番号2から10まで、列番号の2から4に入力した値が12を超過する場合は、音を出します。
(エクセル2002以上の場合は、セルに入力した値(例えば14)"は、入力エラーです"と読み上げます)

シートSheet1のシート見出しをマウスの右ボタンで選択し、ショートカットメニューの「コードの表示」を選択し、[Microsoft Visual Basic]を開き、コードウィンドウに貼り付けます。

コードを以下に示します。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, c
On Error Resume Next
r = Target.Row
c = Target.Column
If r >= 2 And r <= 10 _
    And c >= 2 And c <= 4 Then
    Select Case Cells(r, c)
    Case Is > 12
    Application.Speech.Speak Cells(r, c) & "は、入力エラーです"
    音
   Beep
    Case Else
    With Assistant
    .Sounds = True
    .Animation = msoAnimationGreeting
    End With
    Application.Speech.Speak Cells(r, c)
    End Select
End If
End Sub

標準Moduleには、次のコードを貼り付けます。

Declare Function playsound Lib "winmm.dll" _
Alias "PlaySoundA" (ByVal lpszname As String, _
ByVal hmodule As Long, ByVal dwflags As Long) As Long

Sub 音()
Dim ret
ret = playsound("c:\windows\media\notify.wav", _
vbNull, &H20000)
End Sub

と入力します。



戻る
住所と郵便番号を相互に生成する、便利な郵便番号変換ウィザード
郵便番号変換ウィザードを利用するには、Web からデータをダウンロードする必要があります。詳細については、ダウンロードセンターの「Excel アドイン: 郵便番号変換ウィザード (2000-2007 ユーザー用)」のページを参照してください。
ページはこちら
http://www.microsoft.com/downloads/details.aspx?FamilyID=6f6af8ef-b9dd-4e21-9e63-af4a0ff4e7ce&DisplayLang=ja
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ダウンロード先は、こちら
http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=ja&SrcCategoryId=&SrcFamilyId=6f6af8ef-b9dd-4e21-9e63-af4a0ff4e7ce&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fc%2f2%2fc%2fc2c6bf2f-f276-440f-84f9-e6703bb27ccb%2fzipcode7.exe
ダウンロードしたファイルを実行後、「ツール」「アドイン」を選択し、「郵便番号変換ウィザード」を選択し、「OK」ボタンを押します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

郵便番号データから住所データを生成する

あらかじめシート上に作成した郵便番号データを基に、住所データを生成できます。
複数セル範囲の郵便番号から住所を一括生成することが可能です。
[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[郵便番号から住所を生成する] をクリックし、[次へ] をクリックします。
郵便番号データのセル範囲と、住所を出力するセル範囲を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。

[B列の住所からA列に郵便番号を返す]
セル範囲B2:B100を選択し、[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリック します。
[住所から郵便番号を生成する] をクリックし、[次へ] をクリックします。
住所データのセル範囲と、郵便番号を出力するセル範囲を指定します。 郵便番号の種類と書式を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。 これで、B列の住所から該当する郵便番号がA列に表示されました。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

住所データから郵便番号データを生成する

あらかじめシート上に作成した住所データを基に、郵便番号データを生成できます。
複数セル範囲の住所から郵便番号を一括生成することが可能です。
[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[住所から郵便番号を生成する] をクリックし、[次へ] をクリックします。
住所データのセル範囲と、郵便番号を出力するセル範囲を指定します。
郵便番号の種類と書式を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。

[A列の郵便番号からC列に住所を返す]
セル範囲A2:A100に郵便番号が、半角または、全角で ###-####あるいは、###?#### と、入力してあるとします。
セル範囲B2:B100には、A列の郵便番号に該当する住所が番地を含めて入力してあるとします。
あらかじめ「郵便番号変換」ウィザードをインストールしておきます。 先ほどの「郵便番号変換」ウィザードを使って郵便番号から、住所をC列セルに返します。
具体的には、 セル範囲A2:A100を選択し、[ツール] メニューの [ウィザード] をポイントし、[郵便番号変換] をクリックします。
[郵便番号から住所を生成する] をクリックし、[次へ] をクリックします。
「郵便番号データのセル範囲」A2:A100と、「住所を出力するセル範囲」の左上端C2を指定します。 郵便番号の種類と書式を指定し、[次へ] をクリックします。
エラーが出た場合の出力方法を指定し、[完了] をクリックします。
これで、A列の郵便番号から該当する住所がC列に表示されました。



戻る
2005/01/01と入力したら表示は「M38.6.27」となり、数式バーに「2005/1/1」と表示される
「ツール」「オプション」「移行」の「シートオプション」で、「式入力を変更する」にチェックが入っていないようにし 「OK」ボタンを押します。


戻る
A1〜A10セルの間の2箇所に○がついたら,その間のセルにすべて○をつけるには
数式では、数式を入力したセルに○を入力してそれを削除した場合に計算式が削除されるため、次の対応ができません。

マクロを使わないとできませんね。
見本のファイルを添付します。
マクロコードは、次のようになります。
マクロコードは、シート見出しタグをマウスの右ボタンで選択し、ショートカットメニューの「コードの表示」を選択すれば見られます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim r, rt(10), mx, mn
'対象列が、1以外の場合終了します。
If Target.Column <> 1 Then End
'対象行が10を超過する場合終了します。
If Target.Row > 10 Then End
'対象セルのデータが"○"以外の場合は終了します。
If Cells(Target.Row, Target.Column) <> "○" Then End
'変数rを1から10まで変化します。
For r = 1 To 10
'セルA1からA10の値が"○"以外の場合は、
    If Cells(r, 1) <> "○" Then
'変数rt( )に何も代入しません。
        rt(r - 1) = ""
    Else
'変数rt( )に行番号を代入します。
        rt(r - 1) = r
    End If
Next r
'変数mxに最大の行番号を代入します。
mx = Application.Max(rt())
'変数mxに最小の行番号を代入します。
mn = Application.Min(rt())
Application.EnableEvents = False '割込禁止
'最小の行番号の次の行番号から最大の行番号の前の行番号まで繰り返し
For r = mn + 1 To mx - 1
'対象の行のセルに"○"を記述します。
Cells(r, 1) = "○"
Next r
Application.EnableEvents = True '割込再開
End Sub
 
 



戻る
マクロ実行中画面を固定したい
マクロ実行中の画面を固定する方法は次のようなコードになります。
画面表示の更新をしなくすると、マクロ実行中の処理速度も向上します。

'画面表示を更新しない
Application.ScreenUpdating = False
'
'この間にマクロを記述します。
'
'画面表示を更新する
Application.ScreenUpdating = True



戻る
任意のセルをクリックした時、A1〜A3にクリックしたセルのアドレス、行番号、列番号を表示したい
マクロを使います。
下のマクロコードをコピーします。
シートタグをマウスの右ボタンで選択し、「コードの表示」を選択します。
表示されたMicrosoft Visual Basicの右に表示された「コードウィンドウ」(空白の部分)に貼り付けます。
「ファイル」「終了してMicrosoft Excelへ戻る」を選択し、エクセルシートに戻ります。
対象のシートの任意のセルを選択すると、
A1セルに選択セルのセルアドレス
A2セルに選択セルの行番号
A3セルに選択セルの列番号
を表示します。
'ここから↓
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A1") = Target.Address
Range("A2") = Target.Row
Range("A3") = Target.Column
End Sub
'ここまで↑


戻る
マクロでシートの保護のパスワード設定する
マクロでは次のような方法でパスワードの指定とロックができます。
下の例では、アクティブなシートのロックがかかっていなかったらシートのロッ
クをして、パスワードを"test"としています。

Sub パスワード指定でシートの保護()
    With ActiveSheet
        If .ProtectContents Then
            Else
   'パスワードを"test"のように指定します。
            .Cells.Locked = True
            .Protect ("test")
        End If
    End With
End Sub



戻る
セルに赤色で塗りつぶしたセルの値を別のセルに返す
残念ながら、エクセルのワークシート関数に「色」を判断するものはありません。
しかし、私の作成した「アドインソフト」の「色番号」を使えば、セルの色番号を返すことができます。
これを使えば、赤色の色番号は、3ですからその色番号のセル位置を、ROW関数とCOLUMN関数で取得できます。
そのセル位置を数式とするために、INDIRECT関数を使います。

「色番号」は、こちらに説明があります。
http://kiyopon.sakura.ne.jp/soft/irobango.htm

アドインソフトを使う前に「アドインソフト使用上の注意」
http://kiyopon.sakura.ne.jp/soft/addin.html
を必ずお読みください。

「色番号」をインストールしてから

 
A B C D E
1
2 A B C D A
3 A B C D B
4 A B C D C
5 A B C D D
6 A B C D D
セル範囲A2:D6に文字が入力されており、その同じ行のうち1つのセルに「赤」色で塗りつぶしがしてあるとします。
セルE2に、
=INDIRECT("R"&ROW()&"C"&MAX(IF(色番号(A3:D3)=3,COLUMN(A3:D3))), FALSE)
と入力し{Ctrl}+{Shift}+{Enter}で、「配列数式」として確定します。
確定後数式は、{   }でくくられます。
自分で{  }を入力してはいけません。
このセルをコピーして、下のセル範囲に「編集」「形式を選択して貼り付け」で、「数式」を貼り付けします。

もし、「赤」色の塗りつぶしが同じ行で2つ以上ある場合は、大きい列番号(最も右のセル)を返します。

それぞれの関数の説明は、「関数の使い方説明」の「検索+行列」
ROW関数
COLUMN関数
INDIRECT関数
を参照してください。



戻る
マクロ実行中に画面が変わらないようにしたい
マクロのコードの前に
Application.ScreenUpdating = fasle
を記述し、
マクロが終了したら
Application.ScreenUpdating = True
を記述します。

具体的には、
'画面更新しない
Application.ScreenUpdating = fasle

'マクロを記述

'画面更新する
Application.ScreenUpdating = True

となります。



戻る
全角数字で入力されたものを、半角に一括で変更
エクセルで使えるソフト」 に、私の作成した「文字列変換」というアドインソ フトがあります。
選択セル範囲の文字列、数字を「大文字」「小文字」「先頭を大文字」「全角」「半角」「カタカナ」「ひらがな」「漢数字」に変換します。
セルのショートカットメニューに「文字列変換」が追加されます。

このソフトを利用する場合は、「アドインソ フトを使う場合の注意点」を必ずお読みください。



戻る
各セルの最終入力日を表示したい
マクロでユーザー定義関数の作成を試みましたが、日付が変わると表示された日が変わってしまい、残念ながらうまくできませ ん。
しかし、マクロでセル範囲が固定されているのならばできます。
添付ファイルを参照してください。

下の例では、セル範囲A2:A10のデータが空白以外の文字列に変更された時に、右のセル(この場合B列)にその日の日付 (yyyy/m/dの表示形式)を返します。
日付の表示形式の変更は、セルを選択し、「書式」「セル」を選択し、「セルの書式設定」ダイアログボックスの「表示形式」の「分類」で「日付」を選択し 「種類」欄で適当な日付表示を選択し、「OK」ボタンを押します。

下のマクロコードをコピーして、対象のシートのシート名タグをマウスの右ボタンでクリックし、ショートカットメニューの「コードの表示」を 選択し、「Microsoft Visual Basic」を開き、コードウィンドウに貼り付けます。
対象のセル範囲のA2:A10は、
If c <> 1 Or r < 2 Or r > 10 Then End
の部分で指定しています。(この部分では対象外の範囲を指定)
c <> 1 列番号が1以外
r < 2 行が2未満
r > 10 行が10超過
としています。

セルC5:C20とする場合は
If c <> c Or 5 < 2 Or r > 20 Then End
と修正します。

??????????????????????????????
'ここから
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer, c As Integer
'r 行番号
'C 列番号
r = Target.Row
c = Target.Column
'セル範囲A2:A10のデータが入力された場合
'その日の日付を返します。

If c <> 1 Or r < 2 Or r > 10 Then End
If Cells(r, c) <> "" Then
    Cells(r, c + 1) = Format(Now, "yyyy/m/d")
    Else
    Cells(r, c + 1) = ""
End If
End Sub
'ここまで
??????????????????????????????



戻る
あるセルが×のとき、特定行を非表示にしたい
マクロを使えば、行の表示・非表示をすることはできます。
下に、見本のマクロコードを示します。
この例では、
列番号は、Target.Column = 1(A列)
行番号は、Target.Row = 3(3行目)
で指定しています。

このマクロコードをコピーして、対象のシートのシート名タグをマウスの右ボタンで選択し、「コードの表示」を選択します。
Microsoft Visual Basicが表示されますので、右のコードウィンドウに貼り付けます。
「ファイル」「終了してMixrosoft Excelに戻る」を選択します。

'ここから
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'列番号は、Target.Column = 1(A列)
'行番号は、Target.Row = 3(3行目)
'の部分で指定しています。
If Target.Row = 3 And Target.Column = 1 Then
    Select Case Cells(Target.Row, Target.Column)
    Case Is = "×"
        Rows("15:20").EntireRow.Hidden = True
    Case Is <> "×"
        Rows("15:20").EntireRow.Hidden = False
    End Select
    Else
End If
End Sub
'ここまで

マクロを記述していますので、ファイルを開くと「開こうとしているブックには、マクロが含まれています・・・・・」というメッセージが表示 されます。
「マクロを有効にする」のチェツクを入れてファイルを開いてください。



戻る
選択しているセルだけ色を付ける
任意のセルを選択している間だけそのセルに色がつくようにマクロで作成してみましたが、注意事項があります。
シートのセルを選択した以外のセルすべての色は「塗りつぶしなし」になります。
下のマクロコードをコピーし、対象シートのインデックスをマウスの右ボタンでクリックし、ショートカットメニューの「コードの表示」を選択します。
表示されたMicrosoft VisualBasicの右の空白部分に、コードを「貼り付け」します。
「ファイル」「終了してMicrosoftExcelへ戻る」を選択し、エクセルのシートにもどります。
色を変えたい場合は、Colorindex = 34 の数値を変更します。
セルの指定は、selection.address      で行っています。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
'選択セルの色を薄い水色にします。
      Cells.Interior.ColorIndex = xlNone
      Range(selection.address).Interior.ColorIndex = 34
End Sub



戻る
15:30になると、エクセルシートを自動印刷する
マクロを使えば簡単にできます。
下の例では、選択中のシートのみを印刷します。

次のマクロコードをコピーして、{Alt}+{F11}を押して(あるいは「ツール」「マクロ」の「Visual Basic Editer」を選択し)、「ツール」「挿入」「標準モジュールを選択し、右側に表示された「コードウィンドウ」に貼り付けます。
「ファイル」「終了してMicrosoft Excelに戻る」を選択し、エクセルシートに戻ります。
「ファイル」「上書き保存」して、「ファイル」「閉じる」で、ファイルをいったん終了します。
「ツール」「マクロ」で「セキュリティ」を「中」に指定します。
次にファイルを開くと、「マクロウィルスが含まれている可能性があります。マクロを無効にすると安全ですが、マクロが適正でない場合、機能が使えなくなり ます。」と、メッセージが表示されますので、「マクロを有効にする」を選択してください。
このマクロが自動的に稼働して、指定時刻(15:30)になると印刷を開始します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
'マクロはここから
Sub Auto_Open()
'15:30になると自動的に印刷を開始します。
Application.OnTime TimeValue("15:30"), "印刷"
End Sub

Sub 印刷()
ActiveSheet.PrintOut
End Sub
'ここまでをコピーします。



戻る
数式入力セルを自動的に保護させる
・セルに数式を入力した時点で、自動的にそのセルを保護する。
・すでに数式が入力してあるシートの数式セルを保護します。

このソフトを使うには、「マクロ」を有効にしておく必要があります。
エクセルを起動し、「ツール」「マクロ」「セキュリティ」からセキュリティレベル「低」をチェツクして「OK」ボタンを押す。
下のマクロコードの「↓ここから」「↑ここまで」をコピーします。

ワークシートの下に表示されている「シート名」タグをマウスの右ボタンで押してショートカットメニュ「コードの表示」を選択します。
Microsoft Visual Basicが表示されますので、左上の「プロジェクト-VBAProject」の中のThisWorkBookをマウスの右ボタンで押してショートカット メニュ「コードの表示」を選択します。
右のコードウィンドウに貼り付けます。
シートの保護をするには、いったん別のシートを選択し、再度対象のシートを選択すれば数式入力セルの保護がかかります。
また、新たに数式を入力しても数式の確定後に自動的にそのセルがロックされます。

'↓ここから
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
' 数式の保護 シートの数式セルを保護します
Dim c As Range
    ActiveSheet.Unprotect
    Cells.Locked = False
    For Each c In ActiveSheet.UsedRange
        If c.HasFormula = True Then
        c.Locked = True
        End If
    Next
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'セルに数式を入力したらセルを保護します
If Target.HasFormula = True Then
    ActiveSheet.Unprotect
    Target.FormulaHidden = False
    With Target
        .Locked = True
        .FormulaHidden = False
    End With
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End If

End Sub
 

'↑ここまで

VBAが記述してありますので、ファイルを開くと「このブックにはマクロが・・・・」という注意メッセージが表示されます。
この注意メッセージを表示しないようにするには、「ツール」「マクロ」「セキュリティ」で、「セキュリティレベル」を「低」にしてください。



戻る
追加した行の番号を自動的に入力できませんか
A列の各行に連番をつけるのですね。
関数では無理です。
行を挿入した場合に、関数まで挿入するためには、VBAを使う必要があります。
見本のファイルを参照してください。
ご質問の場合は、2行目以降にセル選択あるいは行の追加・削除があり、B列にデータが入力してある場合、行番号-1の数値を返します。
が正しくない場合は、セルの選択範囲を移動すると、正しい会員数が表示されます。
次のマクロコードをコピーして、対象のシートの「シート見出し」タグをマウスの右ボタンのショートカットメニュー「コードの表示」を選択します。
表示された、Microsoft Visual Basicの右半分のコードウィンドウに貼り付けます。
'ここから
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long, v As Long
r = Target.Row
If r > 1 Then
Application.ScreenUpdating = False
r = Range("B65536").End(xlUp).Row
For v = 2 To r
Cells(v, 1) = "=if(B" & v & "="""","""",row()-1)"
Cells(v, 1) = Cells(v, 1).Value
Next v
End If
Application.ScreenUpdating = True
End Sub
'ここまで。

VBAが記述してありますので、ファイルを開くと「このブックにはマクロが・・・・」という注意メッセージが表示されます。
この注意メッセージを表示しないようにするには、「ツール」「マクロ」「セキュリティ」で、「セキュリティレベル」を「低」にしてください。
見本のファイル



戻る
外字を他のパソコンに移す方法
Windowsには、既成のフォントにはないオリジナルのフォントを作成できる「外字エディタ」機能があります。
しかし、マイクロソフトでは、外字ファイルを他のパソコンで使用することはサポート対象外としています。
以下の手順で外字を他のパソコンに移すことはできますが、あくまでも自己責任となります。
通常外字ファイルは「EUDC.TTE」と「EUDC.EUF」という、2つのファィルに収まっています。
WindowsXPではまず、コピー元のパソコンで「スタート」メニューから「検索」を開き「eudc」などをキーワードにして2つのファイルを探し出し ます。
Windows98では、Cドライブにある{Windows}フォルダに2つのファイルがあります。
フロッピーディスクなどの記録メディアにドラッグアンドドロップして2つのファイルをコピーします。
外字をコピーしたメディアをコピー先のパソコンに持っていったら、スタートメニューから「コマンドプロンプト」(Windows98/MeではMS- DOSプロンプト)を起動してコピーします。コピー先がWindowsXPならば、「コマンドプロンプト」で「copy a:\eudc.* c:\wndows\fonts」と入力し、「Enter」キーを押します。コピー先がWindows98/Meの場合、「MS-DOSプロンプト」を起 動し、「copy a:eudc.* c:\windows」と入力し「Enter」キーを押します。外字ファイルをコピーする際には、「上書き」のみ可能で新たに外字を「追加」することはで きません。そのためにすでにコピー先のパソコンに外字ファイルがあると、上書きするかどうかメッセージが表示されますので、[y]または、[yes]と入 力して上書きします。
WindowsXPの場合、コピー先にすでに外字ファイルがあるとエラーが発生する場合があります。この場合、パソコンにあった[EUDC.TTE] [EUDC.EUF]ファイルをあらかじめデスクトップなどに移動してからコピを実行しましょう。




戻る
リストから選び、自動でリンク先(同じファイルの別シート)にジャンプする
ハイパーリンクを使えば、リンク先にジャンプできます。
ただし、リストから選んで、リンク先に飛ぶには、マクロを使う必要があります。
見本のファイルを参照してください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
見本のファイルは、「マクロ」が登録されていますので、ファイルを開くといつも「マクロ....」というメッセージが表示されるようになります。
このメッセージを表示しないようにするには、「ツール」「マクロ」の「セキュリティ」で「セキュリティレベル」を「低」にします。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
シート名には次の名前があります。
年間統計
1月の収支
2月の収支
3月の収支
4月の収支
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ハイパーリンクの作成
適当なセル範囲(この場合セルE5:E9)に、
年間統計
1月の収支
2月の収支
3月の収支
4月の収支
と入力します。
セルE5の「年間統計」のセルを選択し、「挿入」「ハイパーリンク」を選択し、「このドキュメント」を選択し、「またはドキュメント内の場所」の「年間統 計」を選択し、「OK」ボタンを押します。セルにハイパーリンクが設定され、青色の文字となり、アンダーラインが引かれます。
同様に「1月の収支」「2月の収支」「3月の収支」「4月の収支」のセルにもシートへのハイパーリンクを設定します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
リストからの選択できるようにする。
通常は、リストから入力を「データ」「入力規則」で行いますが、マクロを登録する必要がありので、「表示」「ツールバー」「フォーム」を使って、「コンボ ボックス」のアイコンを選択します。
シート上の適当な位置(ここでは、D5セルの位置)に{Alt}キーを使ってセルのますに合わせて配置します。
配置後、マウスの右ボタンのショートカットキーで「コントロールの書式設定」を選択し、「コントロールタグ」の「入力範囲」にセル範囲$E$5:$E$9 を選択します。次に「リンクするセル」に選択の戻り値の数値が1から5が入りますので、そのセル(ここではE4)を選択入力し「OK」ボタンを押します。
マクロを登録したE4:E9のセル範囲は表示しないように設定すると見栄えがよくなります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
マクロを作成する
下のマクロコードをコピーして、対象のシート名タグをマウスの右ボタンで選択し「コードの表示」を選択します。
表示されたMicrosoftVisualBAsicの右半分にある「コードウィンドウ」に貼り付けます。

'ここから
OptionExplicit

Subリストからリンク()
'セルE4の数値にタイしてハイパーリンクにジャンプします
ActiveSheet.Hyperlinks(Range("E4")).FollowNewWindow:=True
EndSub
'ここまでコピーします。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ドロップダウンリストにハイパーリンクのマクロを登録します。
作成済みのドロップダウンリストを、マウスの右ボタンのショートカットから「マクロの登録」を選択し、「マクロ名」の「リストからリンク」を選択し、 「OK」ボタンを押します。「ツールバー」の「フォーム」は必要ないので、消します。



戻る
色のついたセルの個数を合計したい
残念ながら、エクセルでは関数に色を認識するものがありません。
しかし、私の作成したユーザー定義関数「色番号
を使えば、セルの色番号を取得することができます。
この関数を使う前に「アドインソフトを使う場合の注 意」を必ずお読みください。
具体的には、次のような式になります。
セル範囲A1:A100で、色つきのセル数を返すには、
=SUM(IF(色番号(A1:A100)>0,1))
と入力し、{Sift}+{Ctrl}+{Enter}で「配列数式」として確定します。
確定後数式は{}でくくられます。
{=SUM(IF(色番号(A2:A4)>0,1))}
自分で{   }を入力してはいけません。


戻る
ユーザーフォームにデータ追加可能なリストボックスを作成する
添付ファイルを参照してください。
ユーザーフォームにリストボックスのコントロールを作成するには、「ツールボックス」の「コンボボックス」を選択して、ユーザーフォーム上に配置します。
セル範囲をユーザーフォームのリストボックスに指定するには、「コンボボックス」のプロパティの[RowSource]にシートのセル範囲(たとえば j3:j8)を指定しま
す。
新しいリストを追加するには、シート上のセルにデータを追加することと、このRowSourceのセル範囲を変更することが必要です。
初期化として、ユーザーフォームを表示する前にそれぞれのリスト範囲を取得しています。
リストのセル範囲は、それぞれのコンボボックスに記述された[RowSource]から取得した列および行から最終行をRange (.ComboBox1.RowSource).End(xlDown).Select
とcb=Selection.Rowで取得しています。
また、テキストボックスやコンボボックスのTabIndexの番号を指定するとTabキーでフォーカスの移る順番を指定できます。
フォーム上のテキストボックスやコンボボックスでは、IMEModeを設定しておくことで、入力するデータの内容に応じて漢字モードを自動的に切り替える こと数で
きます。
契約Noのテキストボックスで入力した数値+1が、入力行番号となります。
入力ボタンを押したときに、各項目のチェックを行います。
契約Noのチェックは、何も入力されていない場合は、「契約Noが入力されていません」とメッセージを表示します。
日付のチェックは、日付として認識できないデータの場合は、「日付が正しく入力されていません」とメッセージを表示します。
日付は、4/12あるいは2004/4/12のように"/"で区切って入力してください。
コンボボックスのデータは、リストから選択してもよいですし、そのままデータを追加入力してもいいです。
追加入力した場合は、今までのリストと同じものでなければ、シート上のリストの次の行に追加されます。
商品名、売り上げ区分、担当者は、追加可能なコンボボックスとしています。
「終了」ボタンで、入力フォームを閉じます。
削除ボタンもほしいところですが、今回は追加していません。


戻る
フォルダに保護を掛ける
WindowsXPには、ファイルやフォルダを圧縮して1つのファイルにまとめる機能があります。
フォルダーを圧縮して、圧縮ファイルにパスワードを書けるには、パスワードで保護したいフォルダーを選択した状態で右クリックのショートカットメニューの 「送る」「圧縮(zip形式)フォルダ」を選択します。
新たにZIP形式の圧縮フォルダが作成されます。これをダブルクリックしてフォルダの中身が一覧表示されます。このウィンドウの「ファイル」メニューから 「パスワードの追加」を選択します。フォルダを保護するためにパスワードを入力します。

ただし、この機能はそもそも圧縮ファイルを作るためのもので、パスワードで保護する場合の使い勝手はよくありません。
ファイルが更新されるたびに自分で圧縮、さらにパスワードを設定しなければなりません。圧縮した場合でも圧縮する前のフォルダーはまるまる残ったままで す。元のフォルダーを消す必要があります。毎日利用するというよりは、古いデータに鍵を掛けて保存したいときに便利な機能です。

利用しているOSがWindowsXPProfessionalなら、もっと便利な方法があります。
XPProfessionalにはファイルやフォルダを暗号化する機能があります。暗号化したいフォルダーを選んで右クリックのショートカットメニューか ら「プロパティ」を選択します。次に「全般」タブ画面の下側にある「詳細設定」ボタンを押します。ここに圧縮や暗号化の属性を決める設定があります。ウィ ンドウ下端の「内容を暗号化して・・・・」のチェックをオンにすれば暗号化されます。
これを利用して第三者が勝手に使えないようにできます。一度暗号化すると暗号化したユーザーだけが利用可能となり、その際はパスワードを入力する必要はあ りません。同じパソコンでも別のアカウントでログオンすると、そのファイルへのアクセスが拒否されます。



戻る
アドインソフトを削除した場合の処置
アドインソフトを使う場合の注意点
http://kiyopon.sakura.ne.jp/soft/addin.html
お読みください。

アドインの削除
「ツール」「アドイン」から登録するアドインのファイル[●●●●.xla]を選択し「チェックを外す」ことで登録を削除します。
その後、[●●●●.xla]ファイルを削除します。

「チェックを外す」前に[●●●●.xla]ファイルを削除してしまった場合の処置。
「ツール」「アドイン」を選択します。
目的の「●●●●」のチェックを外します。(「...一覧から削除しますか」というメッセージが出る場合もあります。)「OK」ボタンを押します。
これで、EXCELをいったん終了します。
次回のEXCEL立ち上げからは「メッセージ」は出なくなるはずです。




戻る
質問の過去ログの検索方法

Web閲覧ソフトで、行う方法を紹介します。
まず、質問のリスト範囲のいずれかの部分を選択し、選択ページを確定します。

「インターネットエクスプローラ」では、「編集」「このページの検索」を選択し、「検索」ダイアログボックスで「検索する文字列」に検索する文 字の一部(たとえば「保存」)を入力し、「次を検索」ボタンを押します。

「ネットスケープコミュニケータ」でも同様に「編集」「ページ内を検索」あるいは、「フレーム内を検索」で、「検索する文字列」に検索する文字 の一部(たとえば「保存」)を入力し、「次を検索」ボタンを押します。



戻る
VisualBasicEditorの表示フォントがおかしい
エクセルの問題です。
マイクロソフトのホームページからExcel2000のアップデートをしてください。
MicrosoftOffice2000VisualBasicEditorの表示の修正プログラム
http://office.microsoft.com/search/redir.aspx?AssetID=DC010506681041&url=http://www.microsoft.com/downloads/details.aspx?FamilyID=781FA2E1-205A-4310-9BE8-113A473F98C6&displaylang=ja&hurl=6B39602EE276A2FEE59536817D7AF0D8&CTT=4&Origin=CD010225861041
この修正プログラムを適用すると、お使いの環境に依存せずにVisualBasicEditorのウィンドウやダイアログに適切なフォントを割り当てるよ うになるので、表示が正しく行われます。

他にも重要なアップデートがありますので、ご確認下さい。
http://office.microsoft.com/officeupdate/category.aspx?CategoryID=CD010225861041&CTT=4&Origin=CD010225201041




戻る
ファイルの試用期間を設定して、それを解除キーによって制限を外す方法
マクロで作成します。
期限を指定日とする場合
下の例では、2004/2/14以降の日付の場合は、メッセージを表示し、「解除キー」を正しく入力しないとファイルを開け ません。
「指定日」は、コードの中で指定します。(例では"2004/2/14")
「解除キー」は、コードの中で指定します。(例では"chocolate")

このマクロコードをピーして、対象のファイルのThisworkbookのマクロコードにコピーしてください。
 

Sub Workbook_Open()
Dim 指定日, 解除キー, p
    Application.DisplayAlerts = False
    指定日 = DateValue("2004/2/14")
    解除キー = "chocolate"
    If Now() > 指定日 Then GoTo cls
    Exit Sub
cls:
    p = InputBox("使用期限が切れました", "解除キー入力")
    If p <> 解除キー Then ThisWorkbook.Close
End Sub

見本のファイルも添付します。
cls.xls
25.0kB

ファイルを開いて編集するには「ファイル」「開く」で、ファイルを選択して{Shift}キーを押しながら「開く」ボタンを押してくださ い。

VBAのマクロコードでは、Shiftキーを押して開けばマクロが起動しませんので、マクロを無効にして開く方法を知っている人には通用し ません。

実際にこの見本を使用する場合は、VBAマクロコードに「パスワード」を付けて保存し、パスワードを知らない者には修正できなくするなどの 処置が必要です。

VBA マクロコードを非表示にする方法

期限を○○日後とする場合
初めてファイルを開いた日から「期限」100日目以降の日付の場合は、メッセージを表示し、「解除キー」を正しく入力しない とファイルを開けません。

概要
「期限」は、コードの中で指定します。(例では100日)
「解除キー」は、コードの中で指定します。(例では"chocolate")
ファイルを初めて開くと"mysheet"というシートを作成し、セルi65535にその日の日付を取得して"mysheet"のシートを非表示にしま す。
"mysheet"のセルi65535の日付+期限(例では100日)
の日付以降の場合「使用期限が切れました」「解除キー入力」のメッセージが表示されます。
解除キーを正しく入力しないと、ファイルは開けません。

このマクロコードをコピーして、対象のファイルのThisworkbookのマクロコードにコピーしてください。

Sub Workbook_Open()
Dim 指定日, 解除キー, p, 期限, シート名, s
 シート名 = "mysheet"
 For s = 1 To Sheets.Count
 If Sheets(s).Name = シート名 Then GoTo sn
    Next s
    Sheets.Add
    ActiveSheet.Name = シート名
    Range("i65535") = Now
    ActiveSheet.Visible = False
sn:
    期限 = 100
指定日 = DateValue(Sheets(シート名).Range("i65535") + 期限)
解除キー = "chocolate"
If Now() > 指定日 Then GoTo cls
Exit Sub
cls:
 p = InputBox("使用期限が切れました", "解除キー入力")
Application.DisplayAlerts = False
 If p <> 解除キー Then ThisWorkbook.Close
End Sub
 

見本のファイルも添付します。
cls1.xls
26.0kB
ファイルを開いて編集するには「ファイル」「開く」で、ファイルを選択して{Shift}キーを押しながら「開く」ボタンを押してください。
一度ファイルをShiftを押さずに開くと"mysheet"というシートが作成され、セルi65535にその日の日付が入力されてしまい、その日以降の 日付を監視されますので、配布するシートは「書式」「シート」「再表示」でシート"mysheet"を表示し、"mysheet"を削除して下さい。

VBAのマクロコードでは、Shiftキーを押して開けばマクロが起動しませんので、マクロを無効にして開く方法を知っている人には通用し ません。

実際にこの見本を使用する場合は、VBAマクロコードに「パスワード」を付けて保存し、パスワードを知らない者には修正できなくするなどの 処置が必要です。

VBA マクロコードを非表示にする方法
 



戻る
アドインソフトをコマンドボタン押下で実行できるようにしたい
「エクセルで使えるソフト」で紹介しているアドインソフトは、エクセルの「マクロ」を有効にしておき、一度エクセルを閉じ、 ダウンロードしたファイルをダブルクリックして自動解凍します。
これにより、エクセルが自動的に開いて、アドインに自動登録されます。
アドインについての説明はこちら
http://kiyopon.sakura.ne.jp/soft/addin.html

取り込まれたアドインは、エクセルのどのファイルからでも利用できます。
ここに紹介されているアドインは、ショートカットメニューなどを追加して利用できるようにしています。
アドインの標準モジュールに含まれているSubプロシージャは、普通のマクロのように「ツール」「マクロ」の「マクロ」ダイアログボックスに表示されませ ん。
利用者自身の作成した「フォーム」のボタンや、図形などに登録する場合にも、「マクロの登録」ダイアログボックスに表示されません。ただし、いずれのダイ アログボックスでも、プロシージャ名がわかっていれば、直接その名前を入力して実行や登録をすることが可能です。
アドインソフトのSubプロシージャ名は「ツール」「VisualBasic Editer」を選択して、プロジェクトエクスプローラのVBAProjecのアドインの名前を選択し、「標準モジュール」の中から名前を捜してくださ い。
通常は、アドインファイルと同じ名前に設定しています。




戻る
VBAマクロコードを非表示にする方法
VBAプロジェクトを保護するには、
対象のブックを開いた状態で、{Alt}+[F11]キーを押して、「Microsoft  visualbasic Editor」を開き、
1 目的のVBAプロジェクトをプロジェクトエクスプローラから選択します。
2 「ツール」メニューから(目的のプロジェクトの)プロパティを選択します。
3 プロジェクトプロパティダイアログボックスの「保護」タブをクリックします。
4 「プロジェクトを表示用にロックする」のチェックをオンにします。
5 「パスワード」ボックスと「パスワードの確認入力」ボックスに同じ文字列を入力し、「OK」ボタンを押します。
注意(パスワードを忘れないようにメモすることをおすすめします)

プロジェクトの保護は、このブックを一度閉じて、再び開くと有効になります。
パスワードの入力を求めるダイアログボックスが表示されます。ここに正しいパスワードを入力しないと、このプロジェクトの内容を見ることはできません。


戻る
テキストボックス内で改行した文章をセルに表示させる
改行コード(vbCr)を空白文字に置き換えます。
具体的には、セルA1にTextBox1のデータを改行無しに表示するには
Range("a1").Value = Replace(TextBox1.Value, vbCr, "")
となります。


戻る
通常は上の行だけの表示にしておいて必要なときに、下の5行を表示させたい
 
「行」の「表示」「非表示」ですが、通常は、対象の行範囲を選択し、「書式」「行」の「再表示」「表示しない」で行いますが、いちいちセル範囲を選択する のは面倒です。

自動で行うには、マクロを使う必要があります。
見本のマクロを作成しましたので、お試しください。
下の見本では行番号2行目のセルをダブルクリックすると、その下の5行の表示/非表示を切り替えます。

起動対象の行(2行目)は、 r の数値 2 を変更します。
非表示対象の行数(5)は、 p の数値 5 を変更します。

下のマクロコードをコピーし、対象シートのシート見出しをマウスの右ボタンのショートカットメニューの「コードの表示」を選択します。
表示された、VBAの右のコードウィンドウに表示されている文字列をすべて選択し、下のコードを貼り付けて置き換えます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim r As Integer, p As Integer
'対象の行の下の5行を表示/非表示にします。
'Pの値を変更すれば任意の行数にできます。
p = 5
r = Target.Row
'行番号2のセルをダブルクリックすると行の表示/非表示の切り替えをします。
'rの値を変更すれば対象の行が変わります。
If r <> 2 Then End
If Rows(r + 1).EntireRow.Hidden = True Then
    Rows(r + 1 & ":" & r + p).EntireRow.Hidden = False
    Else
    Rows(r + 1 & ":" & r + p).EntireRow.Hidden = True
End If

End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
マクロを使うには、事前にマクロを有効にしておく必要があります。
その方法は、
【Excel97の場合】
Excel97を起動します。
「ツール」「オプション」の「全般」から「マクロウィルスから保護する」の チェツクをはずして「OK」ボタンを押す。

【Excel2000の場合】【Excel 2002の場合】
Excel2000(2002)を起動します。
「ツール」「マクロ」「セキュリティ」からセキュリティレベル「中」 をチェツクして「OK」ボタンを押す。



戻る
セルの文字をシート名にする
マクロを使う必要があります。

1つのシートで設定する場合
対象のシートのセルA3のデータをシート名にします。
コード中の"A3"の部分を修正すれば任意のセルに指定できます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
下のマクロをコピーし、対象のシート見出しのタグをマウスの右ボタンでクリックし、「コードの表示」を選択し、Microsoft Visual Basic のコードウィンドウに貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh_Name

'セルA3の値が変更された時、セルA3のデータをシート名にします。
'下の"A3"の部分を修正すれば任意のセルに指定できます。
    If Target.Address <> "$A$3" Then End
    Sh_Name = Range("A3")
     If Sh_Name <> "" Then
     ActiveSheet.Name = Sh_Name
    End If
End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
ブック全体のシートに一度に設定する場合
それぞれのシートのセルA3のデータをシート名にします。
コード中の"A3"の部分を修正すれば任意のセルに指定できます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
下のマクロをコピーし、対象のシート見出しのタグをマウスの右ボタンでクリックし、「コードの表示」を選択し、Microsoft Visual Basic の左上の「プロジェクト」ウィンドウのThisWorkBook をダブルクリックし、右のコードウィンドウに貼り付けます。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Sh_Name
'シートが選択された時、セルA3のデータをシート名にします。
'下の"A3"の部分を修正すれば任意のセルに指定できます。
    Sh_Name = Range("A3")
     If Sh_Name <> "" Then
     ActiveSheet.Name = Sh_Name
    End If
End Sub
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
あるいは、
すべてのシートに対して有効となる用にThisWorkookにマクロを記述します。
シート上のセルを移動した時に、マクロが起動します。
セルC10の値が変更された時に、C10セルの値をシート名に変更します。

[Alt]+[F11]キーを押して、Microsoft Visual Basicを起動し、
ThisWorkbookに次のマクロコードを記述します。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo ERR_HANDLER
t_cell="C10"
If Target.Address(False, False) = t_cell Then
ActiveSheet.Name = Range(t_cell).Value
End If
Exit Sub
ERR_HANDLER:
MsgBox "現在の[" & t_cell & "]セルの値はシート名にできません。"

End Sub

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
これらのマクロを有効にするためには、「マクロを有効にする」必要があります。
その方法
【Excel97の場合】
Excel97を起動します。
「ツール」「オプション」の「全般」から「マクロウィルスから保護する」のチェツクをはずして「OK」ボタンを押す。

【Excel2000の場合】【Excel 2002の場合】
Excel2000(2002)を起動します。
「ツール」「マクロ」「セキュリティ」からセキュリティレベル「中」をチェツクして「OK」ボタンを押す。
 



戻る
VBAの「オブジェクトまたはライブラリが見つかり ません」
原因として、VBAの不具合が考えられます。
 「MicrosoftVisualBasic」の画面で[ツール]→[参照設定]を確認してみていただけますでしょうか。
ひょっとするとその中にチェックボックスにチェックが入っているのに「参照不可」という表示がかあるのではないでしょうか。
もしあれば、そのチェックをはずしてあげると解決するかもしれません。
「Visual Basic for Applications」 と「Microsoft Office 10.0ObjectLibrary」への参照は必ず必要です。
チェツクがついていることを確認します。




戻る
分析ツールを組み込むには
[ツール]メニューの[アドイン]をクリックします。
分析ツールが[アドイン]ダイアログボックスの[アドイン]ボックスに表示されない場合は、[参照]をクリックし、分析ツールアドインが保存されているド ライブとフォルダ、およびアドインのファイル名(Analys32.xll)を指定します。
Analys32.xllは、通常、OfficeまたはExcelをセットアップしたフォルダの\Library\Analysisにあります。
分析ツールアドインが組み込まれていない場合は、Excelのセットアッププログラムをもう一度実行します。

[分析ツール]チェックボックスをオンにします。



戻る
ユーザー定義関数の「説明」の作り方
「ツール」「マクロ」「Visual Basic Editer」を起動します。
対象のファイル名の標準モジュールのModuleを選択します。
作成したユーザー定義関数の「プロパティ」を表示するために、「表示」「オブジェクトブラウザ」を選択します。
<すべてのライブラリ>というリストボックスから「VBAProject」をクリックします。
「<グローバル>のメンバ」の中に作成したマクロ名が表示されます。
対象のマクロを右クリックして、「プロパティ」を選択します。
説明のテキスト入力欄に、説明を入力し「OK」ボタンを押します。

また、ファイル内容をエクスプローラなどでマウスポインタによって表示させる「説明」もあります。
ファイルをマウスの右ボタンで選択し、「プロパティ」を選択します。
「概要」のタグの「コメント」欄に、「説明」を記述し「OK」ボタンを押します。



戻る
数式として入力した=100*2/5を100×2÷5=と表示する
「ユーザー定義関数」として「ア ドインソフト」で作成しました。
数式.exe」を利用します。

関数式として
=数式(セル)
セル:数式の入力されているセル参照を入力します。

たとえばセルB1に=100*2/5と入力されている場合は
セルA1に=数式(B1)と入力します。
100×2÷5
と表示されます。

=数式(B1)&"="とすれば
100×2÷5=
となります。

さらに全角で表示したい場合は
=JIS(数式(B1)&"=")
とすれば
100×2÷5=
と表示されます。
 



戻る
ファイルの保存時に自動的に作成者の名前を入れる
ファイルを開く時または閉じる時にファイル名を「ツール」「オプション」の「全般」の「ユーザー名」に表示されている名前に して保存する「ファイル保存」のダイアログボックスが表示されます。

下のマクロコードをコピーして該当ファイルのシート名インデックスをマウスの右ボタンでクリックし、ショートカットメニューの「コードを表 示」を選択します。
Microsoft Visual Basicが開きますので、
左上の「プロジェクト-VBAProject」の「This Workbook」をダブルクリックします。
開いた、空白のマクロシートに「貼り付け」します。
貼付が終了したら、「ファィル」「終了してNicrosoft Excelに戻る」を選択し、エクセルシートに戻ります。
「ファイル」「上書き保存」でシートを保存します。
作成できたファイルが原紙のファイルになります。
−−−−−−−−−−−−−−−−−−−−−−−−−−
使い方
ファイルを開く時(または閉じる時)に「ユーザー名」でファイルが保存していない場合に、「ファイル保存」のダイアログボックスが表示されます。
ファイル保存先のフォルダは、原紙のファイルの保存先です。
ファイル名や保存先の変更は可能です。
「保存」「キャンセル」のいずれかのボタンを押します。
「保存」ボタンでファイルを「ユーザー名」で保存します。
「キャンセル」で処理を取り消します。
 

マクロコードこれ以降'----までをコピーし、「原紙」のファイルの「ThisWorkbook」マクロコードに貼り付けます。
'---------------------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ファイル名を「ユーザー名」にして保存
tp = ThisWorkbook.Path
un = Application.UserName & ".xls"
sun = tp & "\" & un
If ThisWorkbook.Name <> un Then
sun = Application.GetSaveAsFilename _
(un, "Excel ファイル (*.xls), *.xls", , _
 "ファイル名を" & un & "として保存")
If sun = False Then  End 'キャンセルの場合終わる
ActiveWorkbook.SaveAs sun
End If
End Sub

Private Sub Workbook_Open()
'ファイル名を「ユーザー名」にして保存
tp = ThisWorkbook.Path
un = Application.UserName & ".xls"
sun = tp & "\" & un
If ThisWorkbook.Name <> un Then
sun = Application.GetSaveAsFilename _
(un, "Excel ファイル (*.xls), *.xls", , _
 "ファイル名を" & un & "として保存")
If sun = False Then  End 'キャンセルの場合終わる
ActiveWorkbook.SaveAs sun
End If
End Sub
'---------------------------------------------------
 



戻る
色別に並べ替える
色別に並べ替えるには、「色番号」を取得しなければなりませんが、エクセルの関数には「色番号」を取得できるものがありませ んので、「色番号」を取得できるユーザー定義関数を作成しました。
「エクセルで使えるソフト」 http://kiyopon.sakura.ne.jp/soft/index.htm  に「色番号」ユーザー定義関数 http://kiyopon.sakura.ne.jp/soft/irobango.htm
をご利用下さい。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
このアドインソフトには「マクロ」が記述されていますので、ファイルを解凍する前に「マクロを有効にする」必要があります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
書式
=色番号(セル)
セルには色番号を返す対象のセルを指定します。
例)
 
A B C
1 123 東京都 -4142
2 123 大阪府 6
3 123 京都府 6
4 123 滋賀県 6
5 123 北海道 -4142
セルC1に=色番号(A1)と入力しています。
色の指定していないセルには-4142が返ります。
並べ替えにはこのC列を「最優先されるキー」に指定します。


戻る
入力したデータを読み上げさせる(2002)
セルの読み上げを利用するには、音声認識機能がインストールされている必要があります。
「表示」「ツールバー」「読み上げ」コマンドがない場合は次のようにして、インストールしてください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
1 「スタート」「設定」「コントロールパネル」を選択する。
2 「アプリケーションの追加と削除」アイコンをダブルクリックする。
3 「プログラムの変更と削除」アイコン(または「インストールと削除」)タブをクリックし、インストールされているプログラムの一覧からMicrosoft Office(またはMicrosoft Excel)の項目をクリックする。
4 「変更」(または「追加と削除」)ボタンをクリックします。
5 「Mocrosoft Office xpセットアップ」ダイアログボックスで「機能の追加/削除」オプションボタンをクリックし、「次へ」ボタンをクリックします。
6 「インストールするアプリケーション」の一覧で、目的の項目の左側にある「+」記号をクリックして展開し、項目の左側に「×」または「1」がついている項 目を探す。
7 インストールしたい項目の左側にあるアイコンをクリックし、「マイコンピュータから実行」を選択する。
8 「更新」ボタンをクリックする。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
読み上げの実行
「表示」「ツールバー」「読み上げ」を押して、「読み上げ」ツールバーを表示します。
読み上げたいセル範囲を選択し、「読み上げ」ツールバーの「セルの読み上げ」ボタンをクリックします。
セル範囲の代わりに単一のセルを選択した場合は、同じ範囲にあるすべてのセルが読み上げの対象となります。
「読み上げ」ツールバーの「行ごと」ボタンがオンになっていると、1つの行の対象セルが読み終わるとその下の行にあるセルに進みます。
「列ごと」ボタンがオンになっいると、1つの列の対象セルが読み終わると右の列に進みます。
また、Enterキーを押したときにセルの内容を読むようにも設定できます。
この機能は、データを入力しているときに便利で、入力結果を耳で確認することにより、入力ミスなどの間違いを次の入力に進む前にその場で訂正することが可 能になります。
この機能をオンにするには、「Enterキーを押したときに読み上げる」ボタンをクリックします。
Excelが読み上げる音声の種類や、速度、出力のデバイスなどは変更できます。
それぞれの設定は、コントロールパネルの「スピーチ」を開いて表示される「音声のプロパティ」ダイアログボックスで変更が可能です。



戻る
ソルバーの制約条件で「整数」を指定しても整数にならない
整数条件の場合は、計算時間がかかることを覚悟してください。

「制約条件に」「整数」を指定する方法は次の通りです。
整数条件の指定は「ツール」「ソルバー」を選択し、「追加」ボタンをクリックして「制約条件の追加」ダイアログボックスを表示します。
変化させるセルの範囲を選択してください。次に、「制約条件」ドロップタウンリストから「区間」を選択します。
そして、「制約条件」テキストボックスに"整数"と表示されたのを確認したら「OK」ボタンをクリックし、「パラメータの設定」ダイアログボックスに戻り ます。
「実行」ボタンをクリックし、新しいソルバーを実行すると、整数の条件で最適値を計算します。
整数条件を追加することで、問題の複雑さは幾何学的に増し、処理の時間も予想外に長くなります。
モデルが複雑になればなるほどソルバーにかかる負担はさらに増加します。
したがって、整数条件の場合は、計算時間がかかることを覚悟してください。



戻る
エクセル2002では、マップ機能はなくなったの
ほとんどの場合ソフトウェアのバージョンアップ版は、以前のバージョンで達成されていた以上の機能を持っています。しかし、 ここ数年の開発でわかってきたことは、バージョンアップではいくつかの機能が無くなっても同時にあると言うことです。
ただし、そうした機能は完全に消えてしまうわけではなく、別の機能に取って代わられたり、何らかの理由で単に名前が変わったりする場合もあります。
しかし、Excelの「マップ作成」や「XLMマクロ」などを今後目にすることはないでしょう。
これらは完全になくなり、同等の機能もExcel2002には用意されていません。
「レポートの登録と管理」アドインも製品には付属しませんが、Microsoft Office Update Webサイト
http://officeupdate.microsoft.com/japan
からみつけることができます。
また、「新規作成」ダイアログボックスは姿を消し、その機能は「新しいブック」作業ウィンドウが引き継ぎました。「ファイル」「新規作成」コマンドはあり ますが、このコマンドを選択するとダイアログボックスは表示されずに、「新しいブック」作業ウィンドウが表示されます。

戻る
共有ファイルを同時編集する際の注意点(特にデータを保存する際の注意点)

複数のユーザーが同時に同じ場所で作業を行うためのリスクはあります。
複数のユーザーが同時に同じセルの対して影響を与えるような変更をくわえると、コンフリクト(衝突)が発生します。
誰かが変更結果を保存すると、そのブックが保存されるだけでなく、他のユーザーによって変更がくわえられていた箇所が更新されてしまう可能性もあります。
その場合、変更の結果が取り込まれたことを告げるダイアログボックスが表示されます。
そしてあなたの保存後、他のユーザーによってくわえられた変更箇所は、色つきの罫線によって強調され、誰がいつ変更をくわえたかを示すコメントが追加され ます。
そして、このセルをポイントすると変更に関する情報が表示されます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
共有ブックが保存されると、Excelはコンフリクトをチェツクし、調整が必要かどうかを判断します。
通常は、保存されるダイアログボックスによって、他のユーザーによる変更が取り入れられたことが知らされます。
しかし、他のユーザーによる変更箇所が、あなたの変更箇所と重なる場合、「変更箇所のコンフリクト」ダイアログボックスが表示されます。
それぞれのコンフリクトを解決するため、このダイアログボックスには関係のあるセルが表示され、どの変更内容を反映するかを選択できます。
コンフリクトが複数発生する場合、このダイアログボックスは、繰り返し表示されます。
各コンフリクトについては、それぞれに判断を下すことも可能ですが、ダイアログボックス下部のボタンによって、特定のユーザーの変更を一括して反映するこ ともできます。
コンフリクトは、最後に保存されたバージョンとこれから保存しようとしているバージョンとの間だけに発生します。
3人以上のユーザーが同じセルに変更をくわえている場合、各自がその保存時にどの変更内容を使用するかを決定できます。
ただし、あなただけは、全てのコンフリクトを再確認して、ここに変更を受け入れるか、拒否するかを選択できます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
マルチユーザー編集を行う場合、安全性確保するために、操作のガイドラインを決めておきましょう。
例えば、各ユーザは、それぞれ自分が管理するワークシートを操作し、他のワークシートには触れないように取り決めをしておきます。そして、独立したデータ 結合用のワークシートを作成し、各ワークシートから統合したデータをそこに表示するようにすると良いでしょう。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
より高度な共有オプション
「ブックの共有」ダイアログボックスの「詳細設定」タブを使って、共有ブックのデフォルトの機能を設定することが可能です。
共有ブックのユーザーごとに、これらのオプションは設定できます。
「詳細設定」タブの最初のグループでは、変更履歴をどれくらい保存しておくかを指定できます。
「変更の更新」グループでは、いつ更新を行うかを指定します。
通常は、誰かがファイルを保存すると、その変更結果が保存され、そのブックのコピーは他のユーザーによる変更によって更新されます。
「自動保存」オプションは、更新が自動的に行われる間隔を指定します。
このオプションを指定した場合、あなたの変更は定期的に保存され、他のユーザーによるる変更がそのあなたのコピーに対して組み込まれます。
しかし、「ほかのユーザーの変更を見る」オプションを選択した場合、ほかのユーザーによる変更によってあなたの変更は定期的に更新されますが、あなたのく わえた変更による更新は、保存時まで反映されません。
通常、コンフリクトが発生すると、「変更箇所のコンフリクト」ダイアログボックスが表示されます。
しかし、「詳細設定」タブの「変更のコンフリクト」グループの「保存時に変更箇所を反映する」オプションボタンを選択しておくと、最後のユーザーが「上書 き保存」コマンドを実行した時点で、全てのコンフリクトは解消されます。
「個人用ビューに含む」グループのオプションは、印刷設定の変更、およびフィルタコマンドによって設定されたビューの変更を可能にします。
これらのオプションがオンの状態では、共有ブックを開く各ユーザーごとに、異なる印刷設定やフィルタ設定が可能となり、同じユーザーが次に共有ブックを開 く際には、自動的にその設定が有効になります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
変更箇所を罫線で囲み、コメントボックスを表示する変更履歴機能は、デフォルトでオンになっています。この機能のオン/オフを切り替えるには、「ツール」 「変更履歴の作成」「変更履歴の表示」コマンドを選択し、「変更箇所を画面に表示する」チェックボックスをクリックしてください。
全ての変更箇所を記録し、表示するには、共有ブックを最初に保存する前に、このチェツクボックスをオンにしてください。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
共有されたブックに対しては、実行できない動作もいくつかあります。
ブックが共有になっても、テキストや数値の入力、セル書式の変更、数式の編集や、マウスドラッグによるデータのコピー、貼り付け、移動は可能です。
また、行や列の追加も可能でが、セルの挿入はできなくなります。
また、セルの結合、グラフや他のオブジェクトの挿入、ハイパーリンクの作成、パスワードの設定、自動集計の追加、アウトラインの設定、データテーブルやピ ボットテーブルの作成、実行以外のマクロに対する操作などもできなくなります。
「条件付き書式設定」、「シナリオ」「入力規則」コマンドや、「図形描画」ツールバーのほとんどのボタンも使用できなくなります。


戻る
異なるバージョンのエクセルを1つのパソコンにインストールする
エクセルの複数のバージョンを同じパソコンにインストールすることは何の問題もなくできます。
追加インストールすることで、それぞれのバージョンのエクセルを共存することができます。
私ももWinxpにエクセルの95,97,2000,xpの四種類をインストールして使っています。
注意点としては、
1 新しいバージョンのソフトを古いバージョンのソフトより後にインストールすることです。
2 共存させる場合は、インストール先のフォルダをそれぞれ別のフォルダにする必要があります。
たとえば
エクセル95はoffice_95
エクセル97はoffice_97
エクセル2000は0ffice_2000
エクセルxpはoffice_xp
というフォルダにインストールしています。
3 エクセルのファイルをダブルクリックして起動されるエクセルは最後にインストールしたエクセルのバージョンになります。
4 スタートアップメニューからのエクセルの起動は最後にインストールしたエクセルのバージョンになります。
古いバージョンのエクセルを起動したい場合は、エクスプローラなどでインストール先のフォルダのofficeにある EXCEL.EXEのショートカットをスタートメニューに貼り付けます。


戻る
'が先頭に付いた文字や数値の'を消す
「エクセルで使えるソフト」
http://kiyopon.sakura.ne.jp/soft/index.htm
の「数値として貼り付け」というアドインソフトがあります。
http://kiyopon.sakura.ne.jp/soft/susiki.htm
を使えば、文字列として入力した数式や数値を一発で数値や数式に置き換えできます。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−
この「アドインソフト」には「マクロ」が記述ししてありますので、インストールする前に「マクロを有効にする」必要があります。
その方法は、
【Excel2000の場合】【Excel 2002の場合】
Excel2000(2002)を起動します。
「ツール」「マクロ」「セキュリティ」からセキュリティレベル「低」 をチェツクして「OK」ボタンを押す。


戻る
マクロを実行した後、マクロの実行前の状態に戻す

これは難しいです。通常のマクロではできません。
マクロは、エクセルの操作手順として記録されませんので「元に戻す」ボタンが使えません。
したがって、マクロの実行前の状態に戻すというより、元のファイルを保存しておいてそのファイルを読み込んで元の状態のファイルとする方法が一般的です。
具体的には、マクロの実行のはじめにマクロで元のファイルを○○.xlbとし、バックアップファイルとして保存します。

Sub save_backup()
ap = ActiveWorkbook.Path
an = ActiveWorkbook.Name
nan = Left(an, Len(an) - 3) & "xlb"
ActiveWorkbook.SaveCopyAs ap & "\" & nan
End Sub

マクロの実行前の状態に戻すには、○○.xlbを元のファイルとして開けばよいですね。



戻る
「メモリ不足」エラーについて
これは「リソース不足」が原因のメモリ不足エラーは搭載メモリーの量とは関係ないのです。
Windows95/98/Meの根本部分の問題です。
リソースとは、Windowsの作業領域のことでパソコンのメモリー容量とは関係ありません。

システムリソースでは、プログラムの実行や管理を行うKERNEL。
キーボードの入力やアイコン、メニューの管理などのユーザーインターフェイスを受け持つUSER。
画面描画から印刷までグラフィック処理全般を担当するGDI。の3つの要素があります。
システムリソースとは、USERとGDIがそれぞれの処理を遂行するために割り当てられるメモリー領域のことです。

メモリ全体の容量にかかわらず、このサイズが常に一定なので問題が起こります。
このUSERとGDIには、Windows95で設けられた32ビット版と、95以前のWindows3.1との互換性を重視して残された16ビット版が あります。
32ビット版のリソース容量はUSERでウィンドウ用、メニュー用合わせて4MB、GDIで2MBですが、16ビット版はそれぞれたった64kBしかない のです。
一部の古いアプリケーションでしか16ビット版が使われないなら問題ないのですが、95/98/MeはOSの内部でも16ビット版のUSERとGDIを利 用しています。
また、95以降に対応した32ビットのアプリケーションでも、内部的に16ビット版のリソース領域を使っていることがあります。
どのアプリケーションがどれだけリソースを使うかは事前には分からないし、使い方でも変わってきます。

USERとGDI、どちらかのリソースに余裕がなくなると、メモリーにどんなに空きがあっても「メモリ不足」エラーが起きます。
このリソース不足はWindowsの仕様の問題で、ユーザーが制限を外すことはできません。
もちろんメモリーを増やしても解決できません。
安定動作のためには、タスクトレイに並ぶアイコンや起動時に実行される常駐ソフトを少なくすることしか解決の道はありません。
その後Windowsを再起動し、リソースをクリアするしか手がありません。

WindowsNT/2000/XPでは、16ビットで動作するモジュールが排除され、CPUは完全に32ビットで動作し、リソースの制約 も大幅に緩和されてこういった問題は非常に起こりにくくなっています。



戻る
マクロの「記録終了」ボタンが表示されなくなった
マクロの記録中に「記録終了」ボタンを押さずに「マクロ」のツールバーを閉じると、次回からマクロの「記録終了」ボタンが表 示されなくなります。
この場合は、「表示」メニューの「ツールバー」の「記録終了」を選択します。
これで正常に「記録終了」ボタンが表示されるようになります。



戻る
ステータスバーの右端にある「固定」は何ですか

これは小数点以下の桁数が固定表示になっている場合に表示されます。
「ツール」「オプション」「編集」「小数点位置を固定する」にチェックが入っていませんか。
ここのチェックを外して「OK」ボタンを押せば、「固定」表示は消えるはずです。
参考
次に示すインジケータは、対応するモードがアクティブになっている時にステータスバーの右端に表示されます。
[拡張]
拡張モード[F8]を押すことで、キーボードによる選択範囲の拡張が可能となります。
[Shift]を押しながらマウスでセルを選択しても、同じ結果が得られます。

[ADD]
追加モード。[Shift]+[F8]を押すことで、キーボードによって、現在の選択範囲にセルを追加できます。隣接しないセルの追加も可能です。また、 [Ctrl]を押しながらマウスでセルを選択しても同じ結果が得られます。

[NUM]
Numロックモード。キーボードのNumロックをオンに設定している場合、デフォルトのモードになります。[NumLock]を押すことでNumロック モードをオフにできます。

[固定]
小数点位置の固定モード。「オプション」ダイアログの「編集」タブを押し、「小数点以下を固定する」チェックボックスを「オン」にして、「入力単位」テキ ストボックスに桁数を指定すると、セルに数字を入力した時に、指定した桁に小数点がつけられます。たとえば、小数点位置の固定モードを指定して、入力単位 の桁数を2に指定してから、12345と入力すると、セルに123.45と表示されます。

[CAPS]
キャップスモード。[Shift]+[CapsLock]を押すと、入力する文字はすべて大文字で表示されます。ただし、数字と記号のキーは影響を受けま せん。

[SCRL]
スクロールモード。通常[PageUp]や[PageDown]でワークシートを1画面ずつスクロールすると、アクティブセルも一緒に移動してしまいま す。[ScrollLock]を押してから、[PageUp]と[PageDown]を使用すると、アクティブセルは移動せずに、ワークシートだけがスク ロールします。再度、[ScrollLock]を押すことでスクロールロックをオフにできます。

[上書]
上書きモード。数式バーをアクティブにしてから文字を入力すると、通常は挿入ポイントの一に新しい文字が挿入されます。上書きモードを設定すると、入力し た文字は既存の文字と1字ずつ置き換えられます。上書きモードを設定するには、数式バーをアクティブにしてから[Insert]を押します。

[END]
エンドモード。[End]を押してから方向キーを押すと、方向キーの矢印が示す方向にあるデータ領域の最後のセル、または次のデータ領域の先頭セル、また はワークシートの最後のセルが選択されます。


戻る
エクセルのシートをワードに貼付して計算したい

方法1
 ワードの「挿入」「オブジェクト」で「ファイルから」でエクセルファイルを選択する

方法2
 エクセルのファイルを開き、ワードに貼り付けたい「セル範囲」を「コピー」しておきます。
 ワードの「挿入」「オブジェクト」で「Microsoft Excelワークシート」を選択し、 「OK」ボタンを押します。
 ワードのオブジェクトA1を選択し、マウスの右ボタンで、「貼り付け」ます。
 オブジェクトの範囲境界をドラッグして必要なセル範囲を表示できるようにします。
 オブジェクトをダブルクリックすれば計算式なども変更できます。

戻る
2000と97のエクセルをインストールしてもエクスプローラから97を開きたい
OSのバージョンによって多少操作方法は違いますが、おおむね次のようにします。

手順
1 WindowsMeの場合「エクスプローラ」の「フォルダオプション」を選択し、「フォルダオプション」ダイアログボックスの「ファイルの種類」を選択し ます 。

2 「登録されているファイルの種類」の中で「xls Microsoft Excelワークシート」を選択し「詳細設定」ボタンを押します。

3 「ファイルの種類の編集」ダイアログボックスで、「アクション」の「開く」を選択し、「アクションの編集」ダイアログボックスで、「参照」ボタンを押しま す。

4 Excel97のインストール先のフォルダからEXCEL.EXEを選択し「開く」ボタンを押します。

5 [OK][OK]ボタンを押して、ダイアログをすべて終了します。