Excel(エクセル)マクロ・VBAの最近のブログ記事

2003までのExcelならば、メニュー[表示]?[ステータスバー]や、[オプション]ダイアログ?[表示]タブ?[表示]グループ?[ステータスバー]チェックボックスで、ステータスバーの表示・非表示を切り替えられました。

ところがExcel 2007ではそれに該当するオプション設定や、コマンドが見当たりません。

そのことに起因する疑問でしょう。

Excel 2007に限らず、Office 2007ではステータスバーの表示・非表示を切り替えるコマンドはなくなっているようです。

どうしてもステータスバーを非表示にしたいという場合は、VBA(Visual Basic for Applications)を利用してください。

▼操作手順:ステータスバーを非表示にする
[Alt]キー+[F11]キーを押してVBEを起動
 ↓
[Ctrl]キー+[G]キーを押して[イミディエイト]ウィンドウを表示
 ↓
[イミディエイト]ウィンドウに
 「Application.DisplayStatusBar = False」
  と入力して[Enter]キーを押す


「Application.CommandBars("Status Bar").Visible = False」
でもステータスバーを非表示にできますが、[イミディエイト]ウィンドウを利用する場合は上記の
「Application.DisplayStatusBar = False」
のほうが簡単でしょう。

ステータスバーが非表示になっているときに表示したいときは、
「Application.DisplayStatusBar = True」
「Application.CommandBars("Status Bar").Visible = True」
としてください。

Excelであえてステータスバーを非表示にしたいという場合、Excelで業務用アプリを作成しているような場合でしょう。その場合、業務用アプリを開いたときに実行されるAuto_Openマクロで
「Application.DisplayStatusBar = False」や
「Application.CommandBars("Status Bar").Visible = False」
を実行して、ファイルを閉じるときに実行されるAuto_Closeマクロで
「Application.DisplayStatusBar = True」
「Application.CommandBars("Status Bar").Visible = True」
を実行してステータスバーを表示状態に戻しておくのがいいんじゃないでしょうか。



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

VBA(Visual Basic for Applications)で、簡単にマクロを作成することができます。

▼すべてのオートフィルタを一括解除するマクロ
Sub RemoveFiltersAllWorksheets()

 Dim objWorkSheet As Worksheet

 For Each objWorkSheet In Worksheets
  objWorkSheet.AutoFilterMode = False
 Next

End Sub

AutoFilterModeプロパティをFalseにしてやれば、オートフィルタは解除できますから、すべてのワークシートに対して、AutoFilterModeプロパティをFalseにする処理を行ってやれば、オートフィルタを一括解除するマクロになります。

上記のマクロではFor Each Nextループの中で、AutoFilterModeプロパティをFalseにしています。

For Each Nextループの中でワークシートに対して何らかの処理を行うのは、Excelマクロの基本技ともいっていいものですので、標準で用意されていないような、すべてのシートに対する処理を行う機会が多いという方は、是非マスターされることをおすすめします。



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

Excelユーザーで、VBA(Visual Basic for Applications)に触れ始めた方から時々いただく疑問・質問があります。
「VBAの関数とワークシート上で使える関数はなぜ違うのですか?」
というご質問です。

例えば、
今日の日付を取得するのは、
VBA関数の場合は「Date」ですが、
ワークシート関数では「TODAY」です。

日付の間隔を取得するのは、
VBA関数の場合は「DateDiff」ですが、
ワークシート関数では「DATEDIF」です。
(よく似ていますが、最後の「F」の数が違います。)

厄介なことに同じスペルで似たような動作をするのに実は違うものもあります。
VBA関数の「Round」は丸めを行いますが、
ワークシート関数の「ROUND」は四捨五入を行います。

同じExcelというソフトウェア上で動いている関数なのに、なぜ違うのか、というのがご質問の主旨です。

結論から言えば、ワークシート関数とVBA関数とは、まったく別ものだからです。同じExcel上で動作していても。

同じ動作をする関数は、たまたま、同じであったにすぎません。
むしろ、同じ名称で同じ動作をする関数の方が、特殊と考えるほうがいいでしょう。

このことは、今現在のExcelだけを見ていると、納得しがたいかもしれませんが、ExcelとVBAそれぞれの過去や歴史を知ると、理解できるんじゃないかと思います。

Excelとは無関係に、Quick Basicという言語を元に、VB(Microsoft Visual Basic)というプログラム言語が1991年に発表されています。VBAはVBを元にして、1994年のExcel 5.0ではじめて採用されました。

Excelのほうは元々マッキントッシュ用の表計算ソフトで、それがWindowsに移植されたものです。

Excelのマクロは5.0からはVBAで記述するようになっていますが、それ以前のExcelは違いました。昔のExcelのマクロは、マクロシート上にワークシート関数のように記述するようになっていたのです。

これが今でも裏技的に利用されることもある、「Excel 4.0 マクロ」というものです。(このサイトではExcel 4.0 マクロについて次のようなネタをご紹介しています。「Excel 4.0 マクロとは」「Excel 4.0 マクロのサンプル」)

また、Excel以外のWordやAccessでは、それぞれ独自のマクロ言語が採用されていました。WordにはWordBasic、AccessにはAccessBasicという別のマクロ言語が。

つまり同じOfficeアプリケーションでありながら、マクロ機能についてはバラバラだったのです。昔のOfficeは。

このマクロ言語を統一しようということで、プログラム言語VBを元に考えられたのが、VBA(Visual Basic for Applications)なのです。

つまり、今でこそ同じExcel上で動く、VBAの関数とワークシート関数とは、そのルーツがまったく別物なのです。

だから、同じような関数なのに別の名称がついていることや、同じ名称の関数なのに結果が異なることの方が普通のことなのです。元来まったく別物なのですから。



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

VBA(Visal Basic for Applications)で業務アプリケーションを作成する際、ユーザーに何らかの入力をしてもらう場面というのは少なくありません。簡単な入力ならばInputBox関数などを利用することも可能ですが、複雑な入力を必要とするならばユーザーフォームを作成することになります。

VBE(Visual Basic Editor )で、メニュー[挿入]?[ユーザーフォーム]をクリックすると、フォームが表示されプロジェクトエクスプローラにもツリー表示されるようになります。

そして、ユーザーフォームのコーディングを行う場面では、フォームの画面を表示させたり、コードウィンドウを表示させたりという操作が頻発します。

フォームの画面を表示するにはプロジェクトエクスプローラでダブルクリックすればいいのですが、コードウィンドウを表示するにはプロジェクトエクスプローラの該当フォーム上で右クリックして、ショートカットメニューから[コードの表示]をクリックするか、メニュー[表示]?[コードウィンドウ]をクリックする必要があります。

そのため、
「もっと簡単にコードを表示できないんでしょうか?」
というご質問をいただくことがあります。

コードウィンドウを表示するにはショートカットキーを利用するのが一番簡単だと思います。

▼操作方法:コードウィンドウを表示する
[F7]キーを押す


フォームが表示されている状態で[F7]キーを押せば、そのフォームのコードが表示されます。

コードウィンドウが表示されている状態から、フォーム表示に切り替えるには、プロジェクトエクスプローラでダブルクリックする方が多いとは思いますが、こちらもショートカットキーが用意されています。

▼操作方法:ユーザーフォームを表示する
[Shift]キー+[F7]キーを押す



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

▼操作方法:プロシージャごとの表示をデフォルトに設定する
メニュー[ツール]?[オプション]をクリック
 ↓
[オプション]ダイアログ?[編集]タブをクリック
 ↓
[モジュール全体を連続表示]チェックボックスをOffに
 ↓
[オプション]ダイアログ?[OK]ボタンをクリック


上記の設定変更を行う方がいいのか、[プロシージャの表示][モジュール全体を連続表示]ボタンで一時的に表示を変更するだけでいいのか、人それぞれだと思いますので、生産性の上がるスタイルをみつけてみてください。



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

プロパティ ウィンドウで設定できます。

以下に、以前に作成したUserForm2を利用して説明します。

Accelerator プロパティ
コントロールのアクセス キー(1つ文字)を設定します。値の取得も可能です。
OptionButton1.Accelerator = "a" とすると、[Alt]+[a]キーを押すとOptionButton1が選択され、チェックが入ります。
Alignment プロパティ
キャプションの位置を設定します
構文:object.Alignment [= fmAlignment]
定数 値 内容
fmAlignmentLeft 0 コントロールの左端にキャプションを配置します
fmAlignmentRight 1 (既定値)コントロールの右端にキャプションを配置します


For i = 1 To 4
   Me.Controls("OptionButton" & i).Alignment = fmAlignmentLeft
Next i
オプションボタンの左にキャプションが配置されます。

AutoSize プロパティ
オブジェクトのサイズを表示内容の大きさに合わせて、自動的に調整するか否かを設定します。
構文:object.AutoSize [= Boolean]
Trueにすると、コントロールのサイズを表示内容の大きさに合わせて、自動的に調整します。
Falseが既定値です。

For i = 1 To 4
   Me.Controls("OptionButton" & i).AutoSize = True
Next i
サイズがキャプションの幅に自動調整されます。

BackColor プロパティ
オブジェクトの背景色を設定します。
オブジェクトの背景色は、BackStyleプロパティが定数 fmBackStyleOpaque(背景を不透明)に設定されている場合に限り表示されます。

For i = 1 To 4
   Me.Controls("OptionButton" & i).BackColor = RGB(153, 255, 153)
Next i

BackStyle プロパティ
オブジェクトの背景のスタイルを設定します。値の取得も可能です。
構文:object.BackStyle [= fmBackStyle]
定数 値 内容
fmBackStyleTransparent 0 背景を透明にします
fmBackStyleOpaque 1 (既定値)背景を不透明にします

Enabled プロパティ
Falseにすると、淡色で表示され、マウス操作やキー操作 (アクセス キー、ホットキーを含む) でコントロールを操作することができなくなります。
元に戻すには、Trueにします。
例:OptionButton1.Enabled = False

Visible プロパティ
オブジェクトの表示/非表示を設定します。
Falseにすると非表示になります。
例:OptionButton1.Visible = False



>出張パソコン教室ITスクール 
>webコンサルティングスクール 
>パソコンの家庭教師BEST

同じグループの中では1つのオプションボタンが選択できます。

 A.GroupNameプロパティでグループを分ける。

 B.フレームやページなどで分ける。




>出張パソコン教室ITスクール 
>webコンサルティングスクール 
>パソコンの家庭教師BEST

1.プロパティウィンドウを利用する
  OptionButton1を選択して、プロパティウィンドウのCaptionに入力します。

2.コードで設定する
  初期設定で、OptionButton1にチェックが入った状態にしています。
  Private Sub UserForm_Initialize()
    OptionButton1.Caption = "20歳未満"
   OptionButton2.Caption = "20歳以上40歳未満"
    OptionButton3.Caption = "40歳以上60歳未満"
    OptionButton4.Caption = "60歳以上"
    OptionButton1.Value = True
  End Sub



>出張パソコン教室ITスクール 
>webコンサルティングスクール 
>パソコンの家庭教師BEST

1.VBEのメニューバーの[挿入]→ユーザーフォームを実行してユーザーフォームを作成します。

2.ツールボックスのチェックボックスをクリックし、作成したUserForm2の配置する箇所でクリックします。
  または、ドラッグすると任意の大きさで配置できます。

3.操作2を繰り返し、4個のオプションボタンを配置しました。

4.CommandButtonも同様に1個配置しました。




>出張パソコン教室ITスクール 
>webコンサルティングスクール 
>パソコンの家庭教師BEST

[セルの書式設定]ダイアログ?[配置]タブ?[文字の制御]欄に[折り返して全体を表示する]というチェックボックスがあります。

[折り返して全体を表示する]チェックボックスがOnになっていると、セルにたくさんの文字列が入力されているときなどに、文字列がセル内で改行されて表示されるようになります。

セルの幅が広くないときなどにセル内改行されると、非常に見づらい状態になることもあり、自動的に折り返して全体を表示してほしくないという要望が出てくることもうなずけます。

原因は、[折り返して全体を表示する]チェックボックスが、自動的にOnになるようなケースがあるということでしょう。

例えば、改行を含んだ文字列をコピーアンドペーストしたときや、セル内改行するために[Alt]+[Enter]キーを利用したときなどです。このようなときに[折り返して全体を表示する]チェックボックスは自動的にOnになります。

この自動的にOnになる機能を止められればいいのでしょうが、残念ながらこの仕様は、オプション設定などで変えられるようなものではなさそうです。

ただし一つの解決策として、イベントプロシージャを利用して[折り返して全体を表示する]チェックボックスを、強制的にOffにしてしまうという方法が考えられます。

▼セルの値変更後に折り返して全体を表示するをOffにするイベントプロシージャ

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

 Target.WrapText = False

End Sub

Workbook_SheetChangeイベントプロシージャは、セルの値などが変更されたときに実行されるイベントプロシージャです。

勝手に[折り返して全体を表示する]チェックボックスがOnにならないようにしたいExcelファイルに、このWorkbook_SheetChangeイベントプロシージャを作成しておけば、勝手に折り返して全体を表示されないようになります。

やってることは、更新されたセルのWrapTextプロパティをFalseにすることだけです。

[Alt]+[Enter]キーが押されると、WrapTextプロパティがTrueになり、折り返して全体を表示するようになってしまうわけですから、イベントプロシージャで強制的にFalseにしてしまうという考えです。

▼サンプルファイル(003575.xls 42KByte)ダウンロード

サンプルファイルには上記のイベントプロシージャが作成してあります。

文字を入力して、[Alt]+[Enter]でセル内改行をしても、[折り返して全体を表示する]チェックボックスがOnにならないことなどをご確認ください。



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

VBA(Visual Basic for Applications)を使いこなしているレベルの方なら、他にも簡単にハイパーリンクを一括で削除する方法がありますので、ご紹介しておきます。

VBE(Visual Basic Editor)の[イミディエイト]ウィンドウからコードを実行することで、ハイパーリンクの一括削除ができます。

▼操作手順:アクティブシートのハイパーリンクを一括削除する
[Alt]キー+[F11]キーを押してVBEを起動
 ↓
[Ctrl]キー+[G]キーを押して[イミディエイト]ウィンドウを表示
 ↓
[イミディエイト]ウィンドウに
 「activesheet.hyperlinks.delete」と入力して[Enter]キーを押す


「activesheet.hyperlinks.delete」
というコードだけで、アクティブシートのハイパーリンクがすべて削除されるのです。

注意点は、
「activesheet.hyperlinks.delete」を
「activesheet.hyperlink.delete」と
してしまいがちなところでしょうか。

「activesheet.hyperlink.delete」と入力して実行した場合は、
「実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません。」といったメッセージが表示されます。

タイプミスをしていないかしっかりご確認ください。

VBAを使えるレベルの方で、ハイパーリンクの削除をよく行っているという方は、是非お試しください。


>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

▼任意のワークシートのセルを参照するユーザー定義関数
Function RefSheet(objCell As Range, intRef As Integer) As Variant

 Application.Volatile
 RefSheet = Sheets(objCell.Parent.Index + intRef).Range(objCell.Address).Value

End Function


今回のユーザー定義関数では、どのセルを参照するのかと、どのワークシートを参照するのかを指定するために、引数は2つです。

1つ目の引数:objCellはセルを指定してください。
2つ目の引数:intRefはどのシートを参照するか整数で指定してください。

「-1」なら1つ左隣
「-2」なら2つ左隣
「1」なら1つ右隣
「2」なら2つ右隣
のシートを参照します。

objCell.Parent.Indexで、ユーザー定義関数:RefSheetを呼んでいるシートが何番目にあるかを取得できます。

この数値と引数:intRefを加算することで、参照したいシートを指定できるわけです。


「相対参照している」シートのA1セルに上記のRefSheet関数を入力してあります。シートを移動したりしたときにどのような値が表示されるかなどをご確認ください。


>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

マクロの自動記録を利用して、マクロを作成して実行してみましょう。
以下の例では、名前をふりがな順に並べ替るマクロを作成し、実行してみます。
元になるデータ表を作成します。

1.メニューバーの【ツール】→【マクロ】→【新しいマクロの記録】を選択します。
【マクロの記録】ダイアログが表示されますので、「マクロ名」「マクロの保存先」を確認して、【OK】をクリックします。

2.一般操作での並べ替えと同じように操作します。
対象セルをアクティブにします。
標準ツールバーの【昇順で並べ替え】ボタンをクリックします。
【記録】ツールバーの【記録終了】ボタンをクリックします。
(メモ)記録終了のツールバーを閉じてしまった場合
メニューバーの表示→ツールバー→記録終了 を選択すると表示できます。

3.【Alt】+【F11】でVisual Basic Editor (以下VBEと表記します)を開きます。
(メニューバーからは、【ツール】→【マクロ】→【Visual Basic Editor】を選択します)
標準モジュールのModule1にMacro1が記録されました。
確認できたら、VBEのウィンドウを閉じましょう。

上記2?3の手順で、Noの昇順に並べ替える操作をマクロの自動記録で作成します。



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

メニューバーの【ツール】→【マクロ】→【マクロ】を選択します。
Macro1を選択して、【実行】ボタンをクリックすると、Macro1が実行され名前の昇順に並べ替えます。



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

メニューバーの【表示】→【ツールバー】→【フォーム】を選択し、フォームツールバーを表示します。

【ボタン】を選択し、シート上でクリックすると、【マクロの登録】ダイアログが表示されます。
「Macro1」を選択し、【OK】ボタンをクリックします。

1?2の操作手順でもう1つボタンを表示し、Macro2を登録します。
ボタン1をクリックするとMacro1が、ボタン2をクリックするとMacro2が実行されます。

以上で、マクロをボタンに登録して、実行できるようになりました。
ボタンのテキストは、ボタンを右クリックして、【テキストの編集】を選択して変更します。


>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

【表示】→【ツールバー】→【ユーザー設定】を選択します。
【コマンド】タブを選択し、【分類】で「マクロ」を選択します。
【ユーザー設定ボタン】をツールバーへドラッグ&ドロップします。

ツールバーのマクロボタンを選択した状態で、【選択したボタンの編集】をクリックし【名前】に『名前順の並べ替え』と入力します。

同様に、【マクロの登録】をクリックします。

マクロの登録画面で「Macro1」を選択し、【OK】とします。

ツールバーにマクロのコマンドボタンができました。



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

初期状態ではマクロを含んだブックを開くと「セキュリティの警告 マクロが無効にされました」と表示され、マクロが実行できません。

[オプション]をクリックし、「このコンテンツを有効にする」にチェックを入れ[OK]ボタンをクリックします。
これはブック(ファイル)を開くたびに実行する必要があります。



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

セキュリティセンターのマクロの設定で設定が変更できます。
[開発]タブの[マクロのセキュリティ]を実行します。

「セキュリティの警告のオプション」の最下行にある「セキュリティセンターを開く」をクリックします。
Officeボタン→Excelのオプションの「セキュリティセンター」で「セキュリティセンターの設定」を実行します。

警告を表示せずにすべてのマクロを無効にする
すべてのマクロが無効にされ、セキュリティ警告も表示されません。
ただし、信頼できる場所にあるファイルは、セキュリティセンターのセキュリティ機能によるチェックを受けずに、実行されます。
常にマクロを有効にしてファイルを開きたいときには、この信頼できる場所にファイルを置いておくか、ファイルのある場所(フォルダ)を信頼できる場所に登録すればよいということになります。
信頼できる場所は同じセキュリティセンターダイアログの「信頼できる場所」で追加ができます。

警告を表示してすべてのマクロを無効にする:初期設定ではここにチェックが入っています。
マクロは無効にして、セキュリティ警告が表示されます。ここのオプションをクリックするとマクロを有効にすることができます。
(前項で説明した方法です)
デジタル署名されたマクロを除き、すべてのマクロを無効にする
署名のないマクロはすべて、警告は表示されずに無効に設定されます。
マクロが信頼のおける発行元によってデジタル署名されていて、ユーザーがその発行元を既に信頼している場合は、マクロを実行できます。
信頼しない発行元である場合は、メッセージが表示され、有効にするか否かを選択できます。
すべてのマクロを有効にする(推奨しません。危険なコードが実行される可能性があります)
すべてのマクロが実行可能となります。
ウィルスなどが含まれている場合には実行されてしまいますので、ここへのチェックはしないことをお勧めします。


>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

[Alt]+[F11]キーを押すとVBEが起動します。
Excel2003以前の場合はメニューバーの[ツール]→[マクロ]→[Visual Basic Editor]を実行します。
Excel2007の場合は[開発]タブの[Visual Basic]を実行します。
開発タブが表示されていない場合は[Officeボタン]→[Excelのオプション]の基本設定で「[開発]タブをリボンに表示する」にチェックを入れます。

メニューバーの[挿入]→[標準モジュール]を実行します。
プロジェクトウィンドウに「標準モジュール」フォルダが挿入され、Module1が作成されます。右のコードウィンドウも白くなっています。

右のコードウィンドウにVBAコード(プログラム)を貼り付けます。または自分で入力します。

これで登録できたので、[閉じるボタン]をクリックしてVBEを閉じます。



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

Excel(エクセル)2003以前の場合

1.メニューバーの[ツール]→[マクロ]→[マクロ]を実行します。

2.記録したマクロ名「test」を選択し、[実行]ボタンをクリックするとマクロが実行されます。

3.実行後のシートは下図のようになります。


Excel(エクセル)2007の場合

1.[開発]タブの「コード」グループにある[マクロ]を実行します。
開発タブが表示されていない場合は[Officeボタン]→[Excelのオプション]の基本設定で「[開発]タブをリボンに表示する」にチェックを入れます。

2.記録したマクロ名「test」を選択し、[実行]ボタンをクリックするとマクロが実行されます。

3.実行後のシートは下図のようになります。


>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

アクティブなブックのシート名をアクティブシートのA列に書き出します。
【例1】アクティブなブックのシート名をA1以降に書き出します。
Sub rei15_01_1()
 Dim Sh As Object
 Dim myCnt As Integer
  For Each Sh In ActiveWorkbook.Sheets
    myCnt = myCnt + 1
    Range("A" & myCnt).Value = Sh.Name
  Next Sh
End Sub


アクティブなブックのシート名を変更します。
【例2】Sheet2のシート名を印刷用に変更します。
Sub rei15_01_2()
  ActiveWorkbook.Sheets("Sheet2").Name = "印刷用"
End Sub



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

初期状態では「開発」リボンは表示されていません。
マクロの自動記録やフォームコントロールを使いたい時など困ってしまいます。
Officeボタン→[Excelのオプション]を実行します。

[基本設定]で「[開発]タブをリボンに表示する」にチェックを入れます。

[開発]タブが表示されました。



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

Dictionaryを利用する

Dictionaryオブジェクトを利用します。
このページの中ではもっとも短時間で処理できます。
コード例
Sub myDic()
  Dim myDic As Object, myKey As Variant
  Dim c As Variant, varData As Variant
    Set myDic = CreateObject("Scripting.Dictionary")
    With Worksheets("Sheet1")
      varData = .Range("A1", .Range("A" & Rows.Count).End(xlUp)).Value
    End With
    For Each c In varData
      If Not c = Empty Then
        If Not myDic.Exists(c) Then
          myDic.Add c, Null
        End If
      End If
    Next
    myKey = myDic.Keys
    With Worksheets("Sheet2")
      .Range("G:G").ClearContents
      .Range("G1").Resize(myDic.Count) = Application.WorksheetFunction.Transpose(myKey)
    End With
    Set myDic = Nothing
End Sub



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

フィルタオプションの設定を利用する

Excelの一般機能であるフィルタオプションの設定を利用します。
フィルタオプションの設定では列見出しが必要ですので、仮の見出しを挿入して抽出後に削除しています。
配列の方法より短時間で処理できます。
コード例
Sub myAd()
  Dim rngData As Range, rngC As Range
  With Worksheets("Sheet1")
    .Range("A1").Insert xlDown
    .Range("A1").Value = "見出し"
    Set rngData = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
    Set rngC = Worksheets("Sheet2").Range("E1")
    rngData.AdvancedFilter _
      Action:=xlFilterCopy, _
      CopyToRange:=rngC, _
      Unique:=True
    .Range("A1").Delete xlUp
  End With
  With Worksheets("Sheet2")
    .Range("E:E").ClearContents
    .Range("E1").Delete xlUp
  End With
End Sub



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

データを配列に読み込んでFor?Nextで逐次チェックする方法

元のデータを配列(x)に読み込み、For?Nextで逐次チェックします。
配列でチェックしているため上の方法よりは短時間で処理できます。
コード例
Sub 配列()
  Dim x, y
  Dim myCnt As Long, myFlg As Boolean
  Dim i As Long, j As Long
    With Worksheets("Sheet1")
      x = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))
    End With
    ReDim y(1 To UBound(x), 1 To 1)
    y(1, 1) = x(1, 1)
    myCnt = 1
    For i = LBound(x) To UBound(x)
      myFlg = False
      For j = 1 To myCnt
        If x(i, 1) = y(j, 1) Then myFlg = True: Exit For
      Next j
      If myFlg = False Then myCnt = myCnt + 1: y(myCnt, 1) = x(i, 1)
    Next i
    With Worksheets("Sheet2").
      Range("C:C").ClearContents
      .Range("C1").Resize(UBound(y), 1) = y
    End With
End Sub



>文書作成代行/データ入力代行サービス
>ワード・エクセル・マクロVBA・パワーポイント・アクセス企業パソコン研修
>出張パソコン教室ITスクール 
>パソコンの家庭教師BEST

For?Nextで逐次チェックする方法

もっとも基本的な方法で重複しているか否かを逐次調べ重複がなかったらSheet2へ追加していきます。
ここで書いている方法の中では最も時間がかかります。
コード例
Sub ループ()
 Dim lastRow1 As Long, lastRow2 As Long
 Dim i As Long, j As Long, myCnt As Long
    With Worksheets("Sheet2")
      .Range("A:A").ClearContents
      .Range("A1") = Worksheets("Sheet1").Range("A1").Value
      lastRow1 = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
      For i = 2 To lastRow1
        myCnt = 0
        lastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
        For j = 1 To lastRow2
          If .Cells(j, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value Then
            Exit For
          Else
            myCnt = myCnt + 1
          End If
        Next j
        If myCnt = lastRow2 Then
          .Cells(lastRow2 + 1, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value
        End If
      Next i
    End With
End Sub



>文書作成代行
>パソコン企業研修
>パソコン教室
>パソコン教室久喜市 
>パソコンの家庭教師BEST

ヘッダーとフッターのプロパティ

LeftHeader、CenterHeader、RightHeader、LeftFooter、CenterFooter、RightFooterを利用します。
コード例:各位置にA1?A6セルの値を設定する例です。
Sub myHeader1()
  With ActiveSheet.PageSetup
    .LeftHeader = Range("A1").Value
    .CenterHeader = Range("A2").Value
    .RightHeader = Range("A3").Value
    .LeftFooter = Range("A4").Value
    .CenterFooter = Range("A5").Value
    .RightFooter = Range("A6").Value
  End With
  ActiveWindow.SelectedSheets.PrintPreview
End Sub

【注】一度設定すると、ファイルにその情報が記録されるため異なる位置のヘッダーやフッターの設定はクリアしてから設定をする必要があります。
上の例を試した後、左のヘッダーのみに日付を表示したいときは、他のヘッダー/フッターをクリアしてから設定します。
コード例
Sub myHeader2()
  With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftHeader = "&D"
  End With
  ActiveWindow.SelectedSheets.PrintPreview
End Sub

ヘッダー/フッターの日付を和暦で表示したい
コード例
Sub myHeader3()
  With ActiveSheet.PageSetup
    .LeftHeader = ""
    .CenterHeader = ""
    .RightHeader = ""
    .LeftFooter = ""
    .CenterFooter = ""
    .RightFooter = ""
    .LeftHeader = Format(Date, "ggge年m月d日")
  End With
  ActiveWindow.SelectedSheets.PrintPreview
End Sub

ヘッダーとフッターに指定できる書式コード

指定された書式コードを使うことで、ヘッダー/フッターに書式を設定できます。
書式コードの一覧
(例) 左ヘッダーにファイル名と和暦の日付をつなげて表示する例: .LeftHeader = "&F" & Format(Date, "ggge年m月d日")


書式コードと内容

&L 文字列を左詰めにします
&C 文字列を中央揃えにします
&R 文字列を右詰めにします
&E 文字列に二重下線をつけます
&X 上付き文字にします
&Y 下付き文字にします
&B 文字列を太字にします
&I 文字列を斜体にします
&U 文字列に下線を付けます
&S 文字列に取り消し線を付けます
&D 現在の日付を表示します
&T 現在の時刻を表示します
&F ファイル名を表示します
&A シート名を表示します
&P ページ番号を表示します
&P+<数値> ページ番号に指定した[数値]を加えた値を表示します
&P-<数値> ページ番号から指定した[数値]を引いた値を表示します
&& 「&」(アンパサンド&) を表示します
& "<フォント名>" 指定したフォントで文字列を表示します
フォント名は、半角の二重引用符 (") で囲みます
&nn 指定したフォント サイズ[nn]で文字を表示します。
nn は、2桁のポイント数で指定します
&N すべてのページ数を表示します



>文書作成代行
>パソコン企業研修
>パソコン教室 
>パソコンの家庭教師BEST

試験投稿

user-pic

Excel(エクセル)マクロ・VBA